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/rgbx/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

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

/***/ 4657:
/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {

"use strict";

;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/OOP.js
/**
 * @param {Object} object
 * @param {String} key
 * @param {Function} method
 */
function overrideMethod(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);
  }
}

function extendsObject(object, prototype) {
  // do not use setter, getter
  for (var key in prototype) {
    if (key !== 'constructor' && key !== '__proto__') {
      if (typeof prototype[key] == 'function') {
        overrideMethod(object, key, prototype[key]);
      } else if (prototype[key] !== undefined && prototype[key] !== null) {
        object[key] = prototype[key]; //just copy
      }
    }
  }
}

;

function quickInheritObject(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;
        };
      }
    }
  });
}

;
function drillProperty(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) {
        drillProperty(topObject, botObject, keyTop[i], keyTop[i]);
      }
    } else {
      for (var key in keyTop) {
        drillProperty(topObject, botObject, key, keyTop[key]);
      }
    }
  }
}
;
function bindFunctions(_this, handlers) {
  var res = {};

  for (var key in handlers) {
    res[key] = handlers[key].bind(_this);
  }

  return res;
}
;
function inheritCreator(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
 */

function mixClass(constructor) {
  var descriptors = {};

  for (var i = 1; i < arguments.length; ++i) {
    Object.assign(descriptors, Object.getOwnPropertyDescriptors(arguments[i].prototype));
  }

  delete descriptors.constructor;
  Object.defineProperties(constructor.prototype, descriptors);
}
var OOP = {
  overrideMethod: overrideMethod,
  "extends": extendsObject,
  inherit: quickInheritObject,
  mixClass: mixClass,
  inheritCreator: inheritCreator,
  drillProperty: drillProperty,
  bindFunctions: bindFunctions
};
/* harmony default export */ const HTML5_OOP = (OOP);
;// 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/Code/noop.js
function noop() {}
;
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Context.js


function Context() {
  /****
   *
   * @type {"CREATE"|"PAUSE"|"RUNNING"|"STANDBY"|"DIE"|"STOP"}
   */
  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.warn(this, 'NOT READY!', this.state);
    return;
  }

  if (this.state === "RUNNING") return;
  this.state = "RUNNING";
  this.onResume && this.onResume();
};
/***
 * @param {boolean=} standBy start but waiting for resume()
 */


Context.prototype.start = function (standBy) {
  if (this.state.match(/DIE/)) {
    // console.warn(this, 'DIED!');
    return;
  }

  if (this.state.match(/RUNNING/)) return;

  if (this.state.match(/STOP|CREATE/)) {
    this.state = "STANDBY";
    this.onStart && this.onStart();
  }

  if (!standBy && 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/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;

Fragment.prototype.revokeResource = function () {
  this.destroy();
};

/* harmony default export */ const AppPattern_Fragment = (Fragment);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/default.css
var css_default = __webpack_require__(7425);
;// 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/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/Code/safeThrow.js
function safeThrow_safeThrow(error) {
  setTimeout(function () {
    if (error.stack) {
      error.message += '\n' + error.stack;
    }

    throw error;
  }, 0);
}
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/EventEmitter.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); }



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" : _typeof(Node)) === "object" ? this instanceof Node : this && _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);
  var listenerList;
  var i;
  var startTime, endTime;

  if (this.isSupportedEvent(eventName)) {
    if (this._azar_extendEvents.prioritize[eventName]) {
      listenerList = this._azar_extendEvents.prioritize[eventName].slice();

      for (i = 0; i < listenerList.length; ++i) {
        try {
          startTime = Date.now();
          listenerList[i].wrappedCallback.apply(this, others);
          endTime = Date.now();

          if (endTime - startTime > 200) {
            console.log('slow function call (' + endTime - startTime + ')', listenerList[i]);
          }
        } catch (e) {
          safeThrow_safeThrow(e);
        }
      }
    }

    if (this._azar_extendEvents.nonprioritize[eventName]) {
      listenerList = this._azar_extendEvents.nonprioritize[eventName].slice();

      for (i = 0; i < listenerList.length; ++i) {
        try {
          startTime = Date.now();
          listenerList[i].wrappedCallback.apply(this, others);
          endTime = Date.now();

          if (endTime - startTime > 200) {
            console.log('slow function call (' + endTime - startTime + ')', listenerList[i]);
          }
        } catch (e) {
          safeThrow_safeThrow(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 (_typeof(arg0) == 'object') {
    for (var key in arg0) {
      this.eventEmittorOnWithTime(isOnce, key, arg0[key]);
    }

    return this;
  } else {
    if (_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 () {
            this.off(event.eventName, event.wrappedCallback, event.cap);
            event.callback.apply(this, arguments);
          };
        } 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 (_typeof(arg0) == 'object') {
    for (var key in arg0) {
      this.off(key, arg0[key]);
    }

    return this;
  } else {
    if (_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;
}
/**
 *
 * @type AElement
 * @name sponsorElement
 * @memberof AElement#
 */

/**
 *
 * @param {AElement} element
 * @param {Event |{target: AElement}} event
 * @returns {boolean}
 */

function hitElement(element, event) {
  var current = event.target;

  while (current) {
    if (current === element) return true;

    if (current.sponsorElement && current.sponsorElement !== current.parentElement) {
      // sponsorElement like trigger of quick-menu
      if (hitElement(element, {
        target: current.sponsorElement
      })) 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  rulesheet
 * @param {string=} userAgent
 */

function BrowserDetector(rulesheet, userAgent) {
  this.au = userAgent || (__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 = this.au.toLowerCase().indexOf('firefox') > -1;
  this.isCococ = this.au.toLowerCase().indexOf('coc_coc_browser') >= 1;
  this.isSafari = this.browser.type === 'safari' || !this.isCococ && this.au.toLowerCase().indexOf('safari') > -1 && this.au.toLowerCase().indexOf('win') < 0 && this.au.toLowerCase().indexOf('android') < 0; // this.isSafari = /constructor/i.test(window.HTMLElement) || window.safari;

  this.isMobile = this.au.indexOf('KFFOWI') > -1 || this.au.toLowerCase().indexOf('mobile') > -1 || this.device.type === 'iphone' || this.device.type === 'ipad';
  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 __webpack_require__.g || __webpack_require__.g.DocumentTouch && document instanceof __webpack_require__.g.DocumentTouch || __webpack_require__.g.navigator && (navigator.maxTouchPoints > 0 || __webpack_require__.g.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;
        }
      });
      __webpack_require__.g.addEventListener('test', null, opts);
      __webpack_require__.g.removeEventListener('test', null, opts);
    } catch (e) {}

    return supportsPassiveOption;
  }();

  this.supportGridLayout = __webpack_require__.g.document && typeof document.createElement('div').style.grid === 'string';
  Object.defineProperty(this, 'zoom', {
    get: function get() {
      return this.getZoom();
    },
    enumerable: true,
    configurable: false
  });
}

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].replace(/_/g, '.');
        }

        break;
      }
    } else if (typeof rgx == 'string') {
      if (this.au.toLowerCase().indexOf(rgx) >= 0) {
        result.type = type;
      }
    }
  }

  result.type = result.type || 'unknow';
  result.version = result.version || '0';
  return result;
};

BrowserDetector.prototype.getZoom = function () {
  //todo: wrong on chrome
  var type;

  if ('chrome' in __webpack_require__.g) {
    type = "chrome";
  } else if (this.isSafari) {
    type = 'safari';
  } else if ('orientation' in __webpack_require__.g && 'webkitRequestAnimationFrame' in __webpack_require__.g) {
    type = 'webkitMobile';
  } else if ('webkitRequestAnimationFrame' in __webpack_require__.g) {
    type = 'webkit';
  }

  switch (type) {
    case 'chrome':
      return Math.round(__webpack_require__.g.outerWidth / __webpack_require__.g.innerWidth * 100) / 100;

    case 'safari':
      return Math.round(document.documentElement.clientWidth / __webpack_require__.g.innerWidth * 100) / 100;

    case 'webkitMobile':
      return (Math.abs(__webpack_require__.g.orientation) == 90 ? screen.height : screen.width) / __webpack_require__.g.innerWidth;

    case 'webkit':
      return function () {
        var important = function important(str) {
          return str.replace(/;/g, " !important;");
        };

        var div = document.createElement('div');
        div.innerHTML = "1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>0";
        div.setAttribute('style', important('font: 100px/1em sans-serif; -webkit-text-size-adjust: none; text-size-adjust: none; height: auto; width: 1em; padding: 0; overflow: visible;'));
        var container = document.createElement('div');
        container.setAttribute('style', important('width:0; height:0; overflow:hidden; visibility:hidden; position: absolute;'));
        container.appendChild(div);
        document.body.appendChild(container);
        var zoom = 1000 / div.clientHeight;
        zoom = Math.round(zoom * 100) / 100;
        document.body.removeChild(container);
        return zoom;
      }();

    default:
      return 1;
  }

  return 1;
};

function calcBenchmark() {
  var now = new Date().getTime();
  var i = 0;

  while (now === new Date().getTime()) {}

  now++;

  while (now === new Date().getTime()) {
    ++i;
  }

  return i;
}
BrowserDetector.prototype.calcBenchmark = calcBenchmark;
/* harmony default export */ const Detector_BrowserDetector = (new BrowserDetector((BrowserRules_default())));
;// 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 {this}
 */

/**
 * add style
 * @param {CSSStyleDeclaration|string|{}} arg0
 * @param {string|[]=} arg1
 * @returns {this}
 */


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 {this}
 */


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.lastChild) {
    this.removeChild(this.lastChild);
  }

  return this;
};
/**
 *
 * @param {string|Array} className
 * @returns {Boolean}
 */


AElement.prototype.hasClass = function (className) {
  return this.classList.contains(className);
};
/**
 *
 * @param {string|Array} className
 * @returns {this}
 */


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 {this}
 */


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 atIdx;

  if (at) {
    atIdx = Array.prototype.indexOf.call(this.childNodes, at);

    if (atIdx >= 0) {
      this.insertBefore(newItem, this.childNodes[atIdx + 1]);
    } else {
      throw new Error("Failed to execute 'addChildAfter' on 'Node': The node before which the new node is to be inserted is not a child of this node.");
    }
  } else {
    this.insertBefore(newItem, this.firstChild);
  }

  return this;
};
/**
 * @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) {
  if (!parent || !parent.childNodes || !parent.childNodes.length) return false;
  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/AttachHook.js

window.pendingAttachHooks = {};
var pendingId = 0;
/***
 * @extends AElement
 * @constructor
 */

function AttachHook() {
  this._attached = false;
  this._canceled = false;
  this._pendingId = ++pendingId;
  this._eventAdded = false;
  this.counter = 0;
  this.delayTime = 0;
}

AttachHook.prototype._addAttachedEvent = function () {
  if (this._eventAdded) return;
  this.addEventListener('error', function (event) {
    if (!this._attached && this.isDescendantOf(document.body)) {
      this._attached = true;
      if (this.waitTimeout > 0) clearTimeout(this.waitTimeout);
      delete pendingAttachHooks[this._pendingId];
      if (this._canceled) return;
      this.emit('attached', event, this);
    }
  });
  this._eventAdded = true;

  if (!this._canceled) {
    pendingAttachHooks[this._pendingId] = this;
    this.waitAttaching();
  }
};

AttachHook.prototype.on = function () {
  if (arguments[0] === 'attached') {
    this._addAttachedEvent();

    HTML5_AElement.prototype.on.apply(this, arguments);
  } else {
    HTML5_AElement.prototype.on.apply(this, arguments);
  }

  return this;
};

AttachHook.prototype.once = function () {
  if (arguments[0] === 'attached') {
    this._addAttachedEvent();

    HTML5_AElement.prototype.once.apply(this, arguments);
  } else {
    HTML5_AElement.prototype.once.apply(this, arguments);
  }

  return this;
};

AttachHook.render = function (data, option, domInstance) {
  var attributes = {};
  var tag;

  if (domInstance.defaultTag === 'div') {
    attributes.src = '';
    tag = 'img';
  } else {
    tag = 'image';
    attributes.href = '';
  }

  return domInstance._({
    tag: tag,
    "class": 'absol-attachhook',
    extendEvent: ['attached'],
    style: {
      display: 'none'
    },
    attr: attributes,
    props: {
      domInstance: domInstance
    }
  });
};

AttachHook.prototype.waitAttaching = function () {
  if (this._canceled) return;
  var self = this; // if (BrowserDetector.browser.type.startsWith('chrome') && parseInt((BrowserDetector.browser.version || '').split('.').shift()) >= 113) {

  if (this.waitTimeout > 0) clearTimeout(this.waitTimeout);
  this.waitTimeout = setTimeout(function wait() {
    self.waitTimeout = -1;
    self.counter++;
    if (self.counter === 1) self.delayTime = 10;else if (self.counter === 5) self.delayTime = 30;else if (self.counter === 50) self.delayTime = 60;else if (self.counter === 100) self.delayTime = 100;else if (self.counter === 500) self.delayTime = 1000;

    if (!self._attached && self.isDescendantOf(document.body)) {
      self._attached = true;
      delete pendingAttachHooks[self._pendingId];
      if (self._canceled) return;
      self.emit('attached', {
        target: this
      }, self);
    } else if (!self._attached && !self._canceled) {
      self.waitTimeout = setTimeout(wait, self.delayTime);
    }
  }, this.delayTime); // }
};

AttachHook.prototype.cancelWaiting = function () {
  if (this.waitTimeout > 0) clearTimeout(this.waitTimeout);
  this._canceled = true;
  delete pendingAttachHooks[this._pendingId];
};

AttachHook.prototype.resetState = function () {
  if (this.waitTimeout > 0) clearTimeout(this.waitTimeout);
  this._attached = false;
  this._canceled = false;
  this.counter = 0;
  this.delayTime = 1;

  if (this.tagName.toLowerCase() === 'img') {
    this.attr('src', '');
  } else {
    this.attr('href', '');
  }

  pendingAttachHooks[this._pendingId] = this;
  this.waitAttaching();
};

AttachHook.property = {
  attached: {
    get: function get() {
      return !!this._attached;
    }
  },
  canceled: {
    get: function get() {
      return !!this._canceled;
    }
  }
};
/* harmony default export */ const HTML5_AttachHook = (AttachHook);
;// 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 || this.createBuildInAttachHook();
  this.$attachhookParent = attachHookElt && attachHookElt.parentElement || null;
  this.$attachhook.on('attached', this.ev_attached);
  this.$attachhook.ofDS = this;
  this.isPending = false;
}

HTML5_OOP.mixClass(DomSignal, HTML5_EventEmitter);

DomSignal.prototype.createBuildInAttachHook = function () {
  var elt = document.createElement('img');
  Object.defineProperties(elt, Object.getOwnPropertyDescriptors(HTML5_AElement.prototype));
  Object.defineProperties(elt, Object.getOwnPropertyDescriptors(HTML5_AttachHook.prototype));
  Object.defineProperties(elt, HTML5_AttachHook.property);
  HTML5_AElement.call(elt);
  elt.setAttribute('src', '');
  elt.defineEvent('attached');
  elt.addStyle('display', 'none');
  HTML5_AttachHook.call(elt);
  elt.cancelWaiting();
  return elt;
};

DomSignal.prototype.execSignal = function () {
  var signals = this.signals;
  this.signals = {};
  this.isPending = false;

  for (var name in signals) {
    this.fire.apply(this, [name].concat(signals[name]));
  }
};

DomSignal.prototype.emit = function (name) {
  if (this.$attachhook && (this.$attachhook.canceled || this.$attachhook.attached) && !this.isPending) {
    this.$attachhook.remove();
    this.$attachhook.resetState();
  }

  this.signals[name] = Array.prototype.slice.call(arguments, 1);
  this.isPending = true;

  if (!this.$attachhookParent) {
    this.$attachhookParent = document.body;
  }

  if (!this.$attachhook.parentElement) {
    this.$attachhook.resetState();
    this.$attachhookParent.appendChild(this.$attachhook);
  }
};

DomSignal.prototype.ev_attached = function () {
  this.execSignal();
};

/* harmony default export */ const HTML5_DomSignal = (DomSignal);
var currentAT = null;
var callbackList = {};
var id = 0;
function setDomImmediate(callback) {
  var cid = ++id;
  callbackList[cid] = {
    exec: callback,
    args: Array.prototype.slice.call(arguments, 1)
  };

  if (!currentAT) {
    currentAT = document.createElement('img');
    currentAT.setAttribute('src', '');
    currentAT.addEventListener('error', function () {
      currentAT.remove();
      currentAT = null;
      Object.keys(callbackList).map(function (key) {
        var cb = callbackList[key];
        delete callbackList[key];

        if (cb) {
          try {
            cb.exec.call(null, cb.args);
          } catch (error) {
            safeThrow(error);
          }
        }
      });
    });
  }

  return cid;
}
function clearDomImmediate(id) {
  delete callbackList[id];
}
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js



/**
 * @name requestUpdateSize
 * @type {function}
 * @memberof AElement#
 */

/**
 * @name updateSize
 * @type {function}
 * @memberof AElement#
 */

/**
 * @name onresize
 * @type {function}
 * @memberof AElement#
 */

/**
 * @name requestRevokeResource
 * @type {function}
 * @memberof AElement#
 */

/**
 *
 * @constructor
 */

function ResizeSystem() {
  var _this = this;

  this.elts = [];
  this.cache = [];
  this.cacheOf = null;
  this.lastResizeTime = 0;
  this.pendingElts = {};
  window.addEventListener('resize', this.update.bind(this));
  this['goDown' + 'AndCache'] = this.goDownAndCache.bind(this);
  this['notify' + 'ToElt'] = this.notifyToElt.bind(this);

  var setup = function setup() {
    _this.domSignal = new HTML5_DomSignal();

    _this.domSignal.on('request_update_signal', _this.update.bind(_this));

    _this.domSignal.on('request_update_pending_signal', _this.updatePending.bind(_this));

    window.removeEventListener("load", setup);
  };

  if (document.body) {
    setup();
  } else {
    window.addEventListener("load", setup);
  }
}
/***
 *
 * @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) {
  try {
    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;
    }
  } catch (err) {
    console.error(err);
  }
};

ResizeSystem.prototype.update = function () {
  var now = Date.now();

  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.requestUpdateSignal = function () {
  if (!this.domSignal) return;
  this.domSignal.emit('request_update_signal');
};

ResizeSystem.prototype.removeTrash = function () {
  var oldArr = this.elts;
  var newArr = [];
  var elt;
  var n = oldArr.length;

  for (var i = 0; i < n; ++i) {
    elt = oldArr[i];

    if (HTML5_AElement.prototype.isDescendantOf.call(elt, document.body)) {
      newArr.push(elt);
    } else if (typeof elt.requestRevokeResource === "function") {
      elt.requestRevokeResource();
    }
  }

  this.elts = newArr;
};
/***
 *
 * @param  {AElement| AElementNS | Node} fromElt
 * @param  {boolean=} toRoot
 * @returns {boolean}
 */


ResizeSystem.prototype.updateUp = function (fromElt, toRoot) {
  var found = false;

  while (fromElt && (!found || toRoot)) {
    found = this.notifyToElt(fromElt);
    fromElt = fromElt.parentElement;
  }

  return found;
};

ResizeSystem.prototype.updatePending = function () {
  var o = this.pendingElts;
  this.pendingElts = {};

  for (var key in o) {
    this.notifyToElt(o[key]);
  }
};
/***
 *
 * @param  {AElement| AElementNS | Node} fromElt
 * @param  {boolean=} toRoot
 * @returns {boolean}
 */


ResizeSystem.prototype.requestUpdateUpSignal = function (fromElt, toRoot) {
  if (!this.domSignal) return;
  var elts = [];
  var found = false;

  while (fromElt && (!found || toRoot)) {
    if (typeof fromElt.requestUpdateSize == 'function' || typeof fromElt.updateSize == 'function' || typeof fromElt.onresize == 'function') {
      elts.push(fromElt);
      found = true;
    }

    fromElt = fromElt.parentElement;
  }

  var pendingElts = this.pendingElts;
  elts.forEach(function (elt) {
    if (!elt.__resize_ident__) elt.__resize_ident__ = Date.now() + '_' + Math.random();
    if (!pendingElts[elt.__resize_ident__]) pendingElts[elt.__resize_ident__] = elt;
  });
  this.domSignal.emit('request_update_pending_signal');
  return found;
};
/***
 *
 * @param  {AElement| AElementNS | Node} fromElt
 * @returns {boolean}
 */


ResizeSystem.prototype.updateDown = function (fromElt) {
  var now = Date.now();

  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.removeTrash();
  this.cache = undefined;
  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+/);
}
/**
 *
 * @param mValue
 * @returns {{unit: null, value: string}|{unit: string, value: number}|null}
 */

function parseMeasureValue(mValue) {
  if (mValue === 'auto') return {
    unit: null,
    value: 'auto'
  };
  if (mValue === 'match_parent') return {
    unit: null,
    value: 'match_parent'
  };
  var value = NaN;
  var unit = null;
  var matched;

  if (typeof mValue === "number") {
    value = mValue;
    unit = 'px';
  } else if (typeof mValue === "string") {
    matched = mValue.match(/([+-]?([0-9]*[.])?[0-9]+([eE][+-]?[0-9]+)?)(px|%|vw|vh)?/i);

    if (matched) {
      value = parseFloat(matched[1]);
      unit = matched[4];
    }
  }

  if (isNaN(value)) return null;
  unit = unit || 'px';
  return {
    value: value,
    unit: unit
  };
}
;// 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 {Object} data
 * @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
 *
 */

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_Dom(option) {
  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 HTML5_AttachHook;
      }
    }
  });
  this['$ '.trim()] = this.$.bind(this);
  this['_ '.trim()] = this._.bind(this);
  this['$' + '$'] = this.$$.bind(this);
  this.buildDom = this._;
}

Dom_Dom.prototype.defaultTag = 'div';

Dom_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_Dom.prototype.$ = function (query, root, onFound) {
  var res;
  if (Dom_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_Dom.prototype.selectAttacth = Dom_Dom.prototype.$;
/**
 * DFS
 * @param {string} query
 * @param {AElement} root
 * @param {function} onFound - return true to stop find
 */

Dom_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_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_Dom.prototype.makeNewElement = function (tagName) {
  return document.createElement(tagName);
};

Dom_Dom.prototype.makeNewTextNode = function (data) {
  return document.createTextNode(data);
};
/**
 *
 * @param {AbsolConstructDescriptor | string | {} } option
 * @param {boolean=} isInherited
 * @returns {AElementNS| AElement | Text}
 */


Dom_Dom.prototype._ = function (option, isInherited) {
  var res;
  var creator;

  if (Dom_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 = this._(option.elt);
  } else {
    if (!res) {
      if (creator) {
        if (creator.render) {
          res = creator.render(option.data, option, this);
        } else {
          res = creator(option.data, option, this);
        }
      } 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);
  var children = option.child;

  if (children) {
    if (!children.forEach || !children.map) {
      children = [children];
    }

    for (var i = 0; i < children.length; ++i) {
      res.addChild(this._(children[i], false));
    }
  }

  return res;
};
/***
 *
 * @type {function(Object, boolean): AElement}
 */


Dom_Dom.prototype.create = Dom_Dom.prototype._;
/***
 *
 * @param query
 * @param root
 * @returns {Array<AElement|AElementNS>}
 */

Dom_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_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_Dom.prototype.require = function (tagName) {
  return this.creator[tagName] || null;
};
/**
 *
 * @param {*} o
 * @returns {Boolean}
 */


function Dom_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_Dom.isDomNode = Dom_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_Dom.activeFullScreen = activeFullScreen;
function inactiveFullScreen() {
  if (document.exitFullscreen) {
    document.exitFullscreen();
  } else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if (document.webkitExitFullscreen) {
    document.webkitExitFullscreen();
  } else if (document.msExitFullscreen) {
    document.msExitFullscreen();
  }
}
Dom_Dom.inactiveFullScreen = inactiveFullScreen; //adapt

var deactiveFullScreen = inactiveFullScreen;
Dom_Dom.deactiveFullScreen = deactiveFullScreen;
function isFullScreen() {
  var fullScreenElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;
  return !!fullScreenElement;
}
Dom_Dom.isFullScreen = isFullScreen;
/**
 * @param {AElement|Node|HTMLElement} current
 * @returns {ClientRect}
 */

function traceOutBoundingClientRect(current) {
  var screenSize = Dom_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;

      if (isHtml) {
        bound = Object.assign({
          left: 0,
          top: 0
        }, getScreenSize());
        bound.bottom = bound.height;
        bound.right = bound.width;
      } else {
        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_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_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_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();
  if (!img.src) return Promise.resolve();
  return new Promise(function (rs) {
    if (img.addEventListener) {
      img.addEventListener('load', rs, false);
      img.addEventListener('error', rs, false);
    } else {
      img.attachEvent('onload', rs, false);
    }

    setTimeout(rs, timeout || 5000);
  }); // No other way of checking: assume it’s ok.
}
Dom_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_Dom.waitIFrameLoaded = waitIFrameLoaded;
/***
 *
 * @param {Image} element
 * @returns {Promise<HTMLCanvasElement>}
 */

function imageToCanvas(element) {
  if (typeof element == 'string') {
    element = Dom_Dom.ShareInstance.$(element);
  }

  if (element.tagName.toLowerCase() === 'img') {
    var preRender = Dom_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_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_Dom.imageToCanvas = imageToCanvas;
Dom_Dom.ShareInstance = new Dom_Dom();
Dom_Dom.scrollWidthPromise;
Dom_Dom.documentReady = new Promise(function (resolve) {
  if (document.body) {
    resolve();
  } else {
    window.addEventListener("load", resolve);
  }
});
function getScrollSize() {
  if (!Dom_Dom.scrollWidthPromise) Dom_Dom.scrollWidthPromise = new Promise(function (resolve) {
    function prerender() {
      var parent = Dom_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_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_Dom.documentReady.then(prerender);
  });
  return Dom_Dom.scrollWidthPromise;
}
Dom_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
 * @param afterCloneCb
 * @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_Dom.depthClone = depthClone;
Dom_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_Dom.copyStyleRule = copyStyleRule;
/**
 *
 */

function getSystemFontSize() {
  if (window.mobileHost && window.mobileHost.systemFont) {
    return window.mobileHost.systemFont.pointSize;
  }

  var _ = Dom_Dom.ShareInstance._;

  var initSpan = Dom_Dom.ShareInstance._({
    tag: 'span',
    style: {
      font: 'inherit'
    }
  });

  var appleSpan = Dom_Dom.ShareInstance._({
    tag: 'span',
    style: {
      font: '-apple-system-body'
    }
  }).addTo(document.body);

  var renderer = _({
    style: {
      font: 'initial',
      position: 'fixed',
      top: 0,
      left: 0,
      visibility: 'hidden',
      opacity: 0,
      zIndex: -100
    },
    child: [initSpan && appleSpan]
  }).addTo(document.body);

  var appleSize = appleSpan.getFontSize();
  var initSize = initSpan.getFontSize();
  var defaultSize = appleSize !== initSize ? appleSize : initSize;
  renderer.remove();
  return Math.round(defaultSize * 14 / 16);
}
function getTextNodeBound(textNode) {
  if (document.createRange) {
    var range = document.createRange();
    range.selectNodeContents(textNode);

    if (range.getBoundingClientRect) {
      return range.getBoundingClientRect();
    }
  }

  return null;
}
Dom_Dom.getTextNodeBound = getTextNodeBound;
/***
 * 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_Dom.getConstructDescriptor = getConstructDescriptor;

Dom_Dom.addToResizeSystem = function (element) {
  HTML5_ResizeSystem.add(element);
};

Dom_Dom.updateResizeSystem = function () {
  HTML5_ResizeSystem.update();
};

Dom_Dom.updateSizeUp = function (fromElt) {
  HTML5_ResizeSystem.updateUp(fromElt);
};

/* harmony default export */ const HTML5_Dom = (Dom_Dom);
;// 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_$ = ACore.$;
var $$ = ACore.$$;
/* harmony default export */ const absol_acomp_ACore = (ACore);
// EXTERNAL MODULE: ./css/app.css
var css_app = __webpack_require__(9758);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiLanguageCSS.js

var counter = 30;

function makeCss(data) {
  var cssText = Object.keys(data).map(function (key) {
    return ['[data-ml-key=' + JSON.stringify(key) + ']::before {', '    content: ' + JSON.stringify(data[key]) + ';', '}'].join('\n');
  }).join('\n\n');

  ACore_({
    tag: 'style',
    attr: {
      type: 'text/css'
    },
    props: {
      innerHTML: cssText
    }
  }).addTo(document.head);
}

var MultiLanguageCSS_data = {
  txt_ok: 'OK',
  txt_cancel: 'Cancel',
  txt_close: 'Close',
  txt_option: 'Option',
  txt_check_all: 'Check All'
};
makeCss(MultiLanguageCSS_data);
var overrideData = {};

function waitLanguage() {
  if (window['LanguageModule'] && window['LanguageModule'].data && window['LanguageModule'].data.length > 0) {
    var text;
    var newest = false;

    for (var key in MultiLanguageCSS_data) {
      text = window['LanguageModule'].text(key);

      if (!text.startsWith('[key:') && text !== MultiLanguageCSS_data[key]) {
        overrideData[key] = text;
        newest = true;
      }
    }

    if (newest) makeCss(overrideData);
  } else {
    if (counter--) setTimeout(waitLanguage, 400 + Math.floor(16000 / counter / counter));
  }
}

waitLanguage();
/* harmony default export */ const MultiLanguageCSS = ({});
;// 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);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/common.css
var common = __webpack_require__(7515);
;// 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);
var EmojiAnimByIdent = EmojiAnims.reduce(function (ac, cr) {
  ac[cr[0]] = cr;
  return ac;
}, {});
// 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.$;
/***
 *
 * @extends {AElement}
 * @constructor
 */

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');
}

AutoCompleteInput.tag = 'AutoCompleteInput'.toLowerCase();

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 () {
  if (!this.hasClass('focus')) return;
  this.removeClass('focus');
  AutoCompleteInput_$(document.body).off('mousedown', this.eventHandler.clickOut);
};

AutoCompleteInput.eventHandler.focus = function () {
  if (this.hasClass('focus')) return;
  this.addClass('focus');
  AutoCompleteInput_$(document.body).on('mousedown', this.eventHandler.clickOut);
};

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.hasClass('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.selectedItem = {
  get: function get() {
    return this._currentData && this._currentData[this._selectedIndex] || null;
  }
};
AutoCompleteInput.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('absol-disabled');
    } else {
      this.removeClass('absol-disabled');
    }
  },
  get: function get() {
    return this.hasClass('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);
/* 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/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;
};
/***
 *
 * @param {Vec2} v1
 * @returns {number}
 */


Vec2.prototype.cross = function (v1) {
  return this.x * v1.y - this.y * v1.x;
};
/***
 *
 * @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 {Vec2} b
 */


Vec2.prototype.equals = function (b) {
  return b && this.x === b.x && this.y === b.y;
};
/***
 *
 * @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);
};

Vec2.ZERO = new Vec2(0, 0);
Vec2.OX = new Vec2(1, 0);
Vec2.OY = new Vec2(0, 1);
/* harmony default export */ const Math_Vec2 = (Vec2);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Element.js

/* harmony default export */ const Element = (HTML5_AElement);
;// 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 {number=} margin
 * @return {boolean}
 */


Rectangle.prototype.isCollapse = function (r, margin) {
  if (!margin) margin = 0;
  return !(this.x >= r.x + r.width + margin || this.y >= r.y + r.height + margin || r.x >= this.x + this.width + margin || r.y >= this.y + this.height + margin);
};
/***
 *
 * @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);
};
/***
 *
 * @param {Vec2[]} points
 * @returns  {Rectangle}
 */


Rectangle.boundingPoints = function (points) {
  var minX = Infinity,
      minY = Infinity,
      maxX = -Infinity,
      maxY = -Infinity;
  var point;

  for (var i = 0; i < points.length; ++i) {
    point = points[i];
    minX = Math.min(minX, point.x);
    maxX = Math.max(maxX, point.x);
    minY = Math.min(minY, point.y);
    maxY = Math.max(maxY, point.y);
  }

  return new Rectangle(minX, minY, maxX - minX, maxY - minY);
};

/* harmony default export */ const Math_Rectangle = (Rectangle);
// 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', 'draginit', 'dragdeinit']); //predrag is draginit

  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: 'draginit',
    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('draginit', preDragEvent, this);
  this.emit('predrag', Object.assign(preDragEvent, {
    type: 'predrag'
  }), this);

  if (preDragEvent.canceled) {
    this._hangerPointerData = null;
    return;
  }

  if (isTouch) this.on2.call(document, this._touchEvents);else this.on2.call(document, this._mouseEvents);
};

Hanger.eventHandler.hangerPointerMove = function (event) {
  var _this = this;

  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.trackedScrollers = function () {
        var res = [];
        var c = _this._hangerPointerData.target;

        while (c) {
          c.addEventListener('scroll', _this.eventHandler.trackingScroll);
          res.push(c);
          c = c.parentElement;
        }

        document.addEventListener('scroll', _this.eventHandler.trackingScroll);
        res.push(document);
        return res;
      }();

      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 _this2 = this;

  var pointerData = this._hangerPointerData;
  var isTouch = event.type === 'touchend';
  var dragEndEvent;
  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) {
    pointerData.trackedScrollers.forEach(function (elt) {
      return elt.removeEventListener('scroll', _this2.eventHandler.trackingScroll);
    });
    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, this._touchEvents);else this.off2.call(document, this._mouseEvents);
  this.emit('dragdeinit', {
    type: 'dragdeinit',
    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
  });
};

Hanger.eventHandler.trackingScroll = function (event) {
  var pointerData = this._hangerPointerData;
  var currentPoint = pointerData.currentPoint;
  var dragEvent = {
    type: 'drag',
    originEvent: event,
    isTouch: false,
    bound: pointerData.bound,
    startingPoint: pointerData.startingPoint,
    offsetVec: pointerData.offsetVec,
    pointerIdent: pointerData.pointerIdent,
    currentPoint: currentPoint,
    target: pointerData.target,
    clientX: currentPoint.x,
    clientY: currentPoint.y,
    isScrolling: true,
    preventDefault: function preventDefault() {// event.preventDefault();
    }
  };
  this.emit('drag', dragEvent, this);
};

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);
        if (this._dragEventData) 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);
;// 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 stringFormat_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();
  });
}
/***
 *
 * @param {String} text
 */

function normalizeIdent(text, opt) {
  var spaces = '_';

  if (opt && 'spaces' in opt) {
    spaces = opt.spaces || '';
  }

  var symbols = '_';

  if (opt && 'symbols' in opt) {
    symbols = opt.symbols || '';
  }

  var startsWithDigit = false;

  if (opt && 'startsWithDigit' in opt) {
    startsWithDigit = opt.startsWithDigit || false;
  }

  var res = stringFormat_nonAccentVietnamese(text);

  if (typeof spaces === "string") {
    res = res.replace(/\s+/g, spaces);
  }

  if (typeof symbols === 'string') {
    if (spaces === '_') res = res.replace(/[^a-zA-Z0-9_$]+/g, symbols);else if (spaces === '-') {
      res = res.replace(/[^a-zA-Z0-9_$\-]+/g, symbols);
    }
  }

  if (!startsWithDigit && res.match(/^[0-9]/)) {
    res = '$' + res;
  }

  return res;
}
function breakTextToLineByLength(text, limitLength) {
  limitLength = limitLength || 256;
  var lines = text.split(/\n/);
  var newLines = [];

  var breakLine = function breakLine(line) {
    var testLine = stringFormat_nonAccentVietnamese(line).toLowerCase();
    var wordRgx = /(\(?(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)\)?)|([()_a-z0-9,.]+)|([^\sa-z0-9,._()])/g;
    var poss = [];
    var matched = wordRgx.exec(testLine);

    while (matched) {
      poss.push(matched.index);
      matched = wordRgx.exec(testLine);
    }

    if (poss[0] !== 0) poss.unshift(0);
    poss.push(testLine.length);
    poss.push(testLine.length);
    var start = poss[0] || 0;
    var end,
        pend = start;
    var newLine;
    var chars;

    for (var i = 1; i < poss.length; ++i) {
      end = poss[i];

      if (end - start > limitLength || i + 1 === poss.length) {
        newLine = line.substring(start, pend).trimEnd();

        if (newLine.length > limitLength) {
          chars = newLine.split('');

          while (chars.length > 0) {
            newLine = chars.splice(0, limitLength).join('');
            newLines.push(newLine);
          }
        } else if (newLine.length > 0) {
          newLines.push(newLine);
        }

        start = pend;
      }

      pend = end;
    }
  };

  lines.forEach(function (line) {
    return breakLine(line);
  });
  return newLines.join('\n');
} // window.t = `Sử dụng công thức tính: (Luong_Gio  OT150  0.5) + (Luong_Gio  OT200  1.0) + (Luong_Gio  OT210  1.1) + (Luong_Gio  OT270  1.7) + (Luong_Gio  OT300  2.0)`;
// console.log(breakTextToLineByLength(t, 50))

String.nonAccentVietnamese = stringFormat_nonAccentVietnamese;

String.prototype.nonAccentVietnamese = function () {
  return String.nonAccentVietnamese(this);
};
;// 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 int_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;
}
/***
 *
 * @param value
 * @param {string=}decimalSeparator
 */

function isNumber(value, decimalSeparator) {
  decimalSeparator = decimalSeparator || '.';
  if (typeof value === "number") return true;
  if (typeof value !== "string") return false;
  var thousandsSeparator = decimalSeparator === '.' ? ',' : '.';
  value = value.split(thousandsSeparator).join('');
  value = value.replace(decimalSeparator, '.');
  return !!value.match(/^[+-]?\d+(\.\d+)?$/);
}
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 int_integerZeroPadding(number, length) {
  var res = number + '';

  while (res.length < length) {
    res = '0' + res;
  }

  return res;
}
function int_harmonicMean(a, b) {
  return 2 / (1 / a + 1 / b);
}
;// 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;
var _default_first_day_of_week = 1;
function getDefaultFirstDayOfWeek() {
  return _default_first_day_of_week;
}
function setDefaultFirstDayOfWeek(value) {
  if (isNaN(value) || !isFinite(value)) return;
  value = Math.floor(value) % 7;
  _default_first_day_of_week = value;
}
/**
 *
 * @param {Date} date
 * @returns {String}
 */

function ddmmyyyy(date) {
  return formatDateTime(date, 'dd/MM/yyyy');
}
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) {
  return formatDateTime(date, 'yyyy/MM/dd');
}
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":
      case 'MM':
        month = parseInt(textToken) - 1;
        break;

      case "m":
      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
 * @param {number} delta - must be a integer
 * @param {boolean=} gmt
 * @returns {Date}
 */

function addDate(date, delta, gmt) {
  delta = Math.round(delta);
  var res = beginOfDay(date, gmt);

  if (gmt) {
    res.setUTCDate(date.getUTCDate() + delta);
  } else {
    res.setDate(date.getDate() + delta);
  }

  return beginOfDay(res, gmt);
}
/**
 * @param {Date} date
 * @param {boolean=} gmt
 * @return {Date}
 */

function prevDate(date, gmt) {
  return addDate(date, -1, gmt);
}
/**
 * @param {Date} date
 * @param {boolean=} gmt
 * @return {Date}
 */

function nextDate(date, gmt) {
  return addDate(date, 1, gmt);
}
/****
 *
 * @param {Date} date
 * @param {boolean=} gmt
 * @param {number=} startDayOfWeek
 * @returns {number}
 */

function weekIndexOf(date, gmt, startDayOfWeek) {
  if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek();
  var by = beginOfYear(date, gmt);
  var byw = beginOfWeek(by, gmt, startDayOfWeek);
  var bw = beginOfWeek(date, gmt, startDayOfWeek);

  if (compareYear(by, bw) > 0) {
    return weekIndexOf(bw, gmt, startDayOfWeek);
  }

  var i = compareYear(byw, by) < 0 ? -1 : 0;
  return Math.floor(compareDate(date, byw, gmt) / 7) + i;
}
/***
 *
 * @param {number} year
 * @param {number} weekIdx
 * @param {boolean=} gmt
 * @param {number=} startDayOfWeek
 * @returns {Date}
 */

function weekInYear(year, weekIdx, gmt, startDayOfWeek) {
  if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek();
  var bg = new Date(year, 0, 1);
  if (gmt) bg.setUTCHours(0);
  var byw = beginOfWeek(bg, gmt, startDayOfWeek);
  var d = compareYear(bg, byw) > 0 ? MILLIS_PER_DAY * 7 : 0;
  return new Date(byw.getTime() + d + weekIdx * 7 * MILLIS_PER_DAY);
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at xx:xx:xx:00
 */

function beginOfSecond(date, gmt) {
  var res = new Date(date.getTime());
  if (gmt) res.setUTCMilliseconds(0);else res.setMilliseconds(0);
  return res;
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at xx:xx:00
 */

function beginOfMinute(date, gmt) {
  var res = new Date(date.getTime());
  if (gmt) res.setUTCSeconds(0, 0);else res.setSeconds(0, 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());
  if (gmt) res.setUTCHours(0, 0, 0, 0);else res.setHours(0, 0, 0, 0);
  return res;
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at xx:00
 */

function beginOfHour(date, gmt) {
  var res = new Date(date.getTime());
  if (gmt) res.setUTCMinutes(0, 0, 0);else res.setMinutes(0, 0, 0);
  return res;
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @param {number=} startDayOfWeek default:0
 * @return {Date} date at 00:00
 */

function beginOfWeek(date, gmt, startDayOfWeek) {
  if (typeof startDayOfWeek !== "number") startDayOfWeek = getDefaultFirstDayOfWeek();
  var res = beginOfDay(date, gmt);
  if (isNaN(res.getTime())) return res;

  while ((gmt ? res.getUTCDay() : res.getDay()) !== startDayOfWeek) {
    res = prevDate(res, gmt);
  }

  return res;
}
/***
 *
 * @param {Date} date
 * @param {number} delta
 * @param {boolean=} gmt
 */

function addWeek(date, delta, gmt) {
  date = beginOfWeek(date, gmt);
  delta = Math.round(delta);
  return addDate(date, delta * 7, gmt);
}
/****
 *
 * @param {Date} date
 * @param {boolean=} gmt
 * @returns {Date}
 */

function nextWeek(date, gmt) {
  return addWeek(date, 1, gmt);
}
/****
 *
 * @param {Date} date
 * @param {boolean=} gmt
 * @returns {Date}
 */

function prevWeek(date, gmt) {
  return addWeek(date, -1, gmt);
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00 AM
 */

function datetime_beginOfMonth(date, gmt) {
  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 beginOfQuarter(date, gmt) {
  var y = gmt ? date.getUTCFullYear() : date.getFullYear();
  var m = gmt ? date.getUTCMonth() : date.getMonth();
  m = Math.floor(m / 3) * 3;
  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 {number=} delta
 * @param {boolean=} gmt
 */

function addQuarter(date, delta, gmt) {
  delta = Math.round(delta);
  date = beginOfQuarter(date, gmt);
  return addMonth(date, delta * 3, gmt);
}
/***
 *
 * @param {Date} date
 * @param {boolean=} gmt
 * @returns {Date}
 */

function nextQuarter(date, gmt) {
  date = beginOfQuarter(date);
  return nextMonth(nextMonth(nextMonth(date, gmt), gmt), gmt);
}
/***
 *
 * @param {Date} date
 * @param {boolean=} gmt
 * @returns {Date}
 */

function prevQuarter(date, gmt) {
  date = beginOfQuarter(date, gmt);
  return prevMonth(prevMonth(prevMonth(date, gmt), gmt), gmt);
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00 AM
 */

function beginOfYear(date, gmt) {
  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} date
 * @param {number} delta
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00 AM
 */

function addYear(date, delta, gmt) {
  delta = Math.round(delta);
  var y = gmt ? date.getUTCFullYear() : date.getFullYear();
  var res = new Date();
  if (gmt) res.setUTCFullYear(y + delta, 0, 1);else res.setFullYear(y + delta, 0, 1);
  return beginOfDay(res, gmt);
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00 AM
 */

function nextYear(date, gmt) {
  return addYear(date, 1, gmt);
}
/**
 * @param {Date} date
 * @param {Boolean=} gmt default:false
 * @return {Date} date at 00:00 AM
 */

function prevYear(date, gmt) {
  return addYear(date, -1, gmt);
}
/**
 * @param {Date} date0
 * @param {Date} date1
 * @param {Boolean=} gmt default:false
 * @return {number}
 */

function compareDate(date0, date1, gmt) {
  date0 = beginOfDay(date0, gmt);
  date1 = beginOfDay(date1, gmt); //Date(1975, 5, 12) has 1 hour extend

  return Math.floor((date0.getTime() - date1.getTime()) / 86400000);
}
/**
 * @param {Date} date0
 * @param {Date} date1
 * @param {Boolean=} gmt default:false
 * @return {number}
 */

function compareMonth(date0, date1, 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) {
  var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear();
  var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear();
  return y0 - y1;
}
/**
 *
 * @param {Date} date
 * @param {number} delta
 * @param {boolean=} gmt
 * @returns {Date}
 */

function addMonth(date, delta, gmt) {
  var res = datetime_beginOfMonth(date, gmt);

  if (gmt) {
    res.setUTCMonth(res.getUTCMonth() + delta);
  } else {
    res.setMonth(res.getMonth() + delta);
  }

  return beginOfDay(res, gmt);
}
/**
 *
 * @param {Date} date
 * @param {number} delta
 * @param {boolean=} gmt
 * @returns {Date}
 */

function addMonthKeepDate(date, delta, gmt) {
  var res = addMonth(date, delta, gmt);
  var dateNum = gmt ? date.getUTCDate() : date.getDate();
  var dim = daysInMonth(gmt ? date.getUTCFullYear() : date.getFullYear(), gmt ? date.getUTCFullYear() : date.getFullYear());
  dateNum = Math.min(dateNum, dim);
  res = addDate(res, dateNum - 1, gmt);
  return res;
}
/**
 *
 * @param {Date} date
 * @param {number} delta
 * @param {boolean=} gmt
 * @returns {Date}
 */

function addMonthKeepDateTime(date, delta, gmt) {
  var dayOffset = date.getTime() - beginOfDay(date, gmt).getTime();
  var res = addMonthKeepDate(date, delta, gmt);
  res = new Date(res.getTime() + dayOffset);
  return res;
}
/**
 *
 * @param {Date} date
 * @param {boolean=} gmt
 * @returns {Date}
 */

function nextMonth(date, gmt) {
  return addMonth(date, 1, gmt);
}
/**
 *
 * @param {Date} date
 * @param {boolean=} gmt
 * @returns {Date}
 */

function prevMonth(date, gmt) {
  return addMonth(date, -1, gmt);
}
/**
 * note:argument will be converted to 00h00
 * @param date0
 * @param date1
 */

function monthOfTwoDate(date0, date1) {
  date0 = beginOfDay(date0);
  date1 = beginOfDay(date1);
  var temp;
  var sign = 1;
  var res = 0;
  var cmdv = compareDate(date0, date1);

  if (cmdv > 0) {
    sign = -1;
    temp = date0;
    date0 = date1;
    date1 = temp;
  } else if (cmdv === 0) return 0;

  var d1 = date0.getDate();
  var d2 = date1.getDate();
  var y0 = date0.getFullYear();
  var y1 = date1.getFullYear();
  var m0 = date0.getMonth();
  var m1 = date1.getMonth();
  var nextMD0;

  if (d1 <= d2) {
    res += (y1 - y0) * 12 + (m1 - m0);
    res += 2 * (d2 - d1) / (daysInMonth(y0, m0) + daysInMonth(y1, m1));
  } else {
    res += (y1 - y0) * 12 + (m1 - m0) - 1;
    nextMD0 = datetime_beginOfMonth(nextMonth(date0));
    res += 2 * (compareDate(nextMD0, date0) + compareDate(date1, datetime_beginOfMonth(date1))) / (daysInMonth(y0, m0) + daysInMonth(y1, m1));
  }

  return sign * res;
}
/**
 *
 * @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
 * @param {*=} opt
 * @returns {Date}
 */

function parseDateTime(text, format, opt) {
  opt = Object.assign({
    startDayOfWeek: 0
  }, opt);
  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 'w':
      case 'ww':
        tokenMap.week = parseInt(tkText, 10) - 1;
        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];
  }

  var weekDate;

  if ('week' in tokenMap && !isNaN(tokenMap.week)) {
    weekDate = weekInYear(resParam[0], tokenMap.week, false, opt.startDayOfWeek);
    resParam[1] = weekDate.getMonth();
    resParam[2] = weekDate.getDate();
  }

  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]);
}
/***
 *
 * @param {Date} date
 * @param {string} format
 * @param {*=} opt
 * @return {string}
 */

function formatDateTime(date, format, opt) {
  opt = Object.assign({
    startDayOfWeek: 0
  }, opt);
  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 = int_integerZeroPadding(date.getDate(), s.length);
        break;

      case 'w':
      case 'ww':
        res = int_integerZeroPadding(weekIndexOf(date, false, opt.startDayOfWeek || 0) + 1, s.length);
        break;

      case 'M':
      case 'MM':
        res = int_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 = int_integerZeroPadding(date.getFullYear(), s.length);
        break;

      case 'yy':
        res = int_integerZeroPadding(date.getFullYear() % 100, s.length);
        break;

      case 'a':
        res = date.getHours() < 12 ? "AM" : "PM";
        break;

      case "H":
      case 'HH':
        res = int_integerZeroPadding(date.getHours(), s.length);
        break;

      case 'h':
      case 'hh':
        res = int_integerZeroPadding(1 + (date.getHours() - 1) % 12, s.length);
        break;

      case 'm':
      case 'mm':
        res = int_integerZeroPadding(date.getMinutes(), s.length);
        break;

      case 'Q':
      case 'QQ':
        res = int_integerZeroPadding(Math.floor(date.getMonth() / 3) + 1, s.length);
        break;
    }

    return res;
  });
}
var number = [/[+-]?\d+$/, function (matched) {
  return new Date(parseInt(matched[0]));
}];
var reISO = [/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/, function (matched) {
  return new Date(matched[0]);
}];
var reMsAjax = [/^\/Date\((d|-|.*)\)[\/|\\]$/, function (matched) {
  return new Date(parseInt(matched[1]));
}];
var reString = [/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+([a-zA-Z]{3})\s+[\d\s:]+GMT[\d+]+\s*\([^)]+\)$/, function (matched) {
  return new Date(matched[0]);
}];
function implicitDate(o) {
  var res = null;

  if (o instanceof Date) {
    res = new Date(o.getTime());
  } else if (typeof o === "number") {
    res = new Date(o);
  } else if (typeof o === 'string') {
    [reString, reISO, reMsAjax, number].some(function (rule) {
      var matched = o.match(rule[0]);

      if (matched) {
        res = rule[1](matched);
        return true;
      }

      return false;
    });
  }

  if (res && isNaN(res.getTime())) res = null;
  return res;
}
/***
 *
 * @param {null|{dayOffset?: number, duration?: number}}range
 * @param opt
 */

function formatTimeRange24(range, opt) {
  opt = Object.assign({
    nextDayText: !window.systemconfig || typeof window.systemconfig.language !== "string" || window.systemconfig.language.toLowerCase().indexOf('vn') >= 0 || window.systemconfig.language.toLowerCase().indexOf('vi') >= 0 ? 'Hôm sau' : 'Next day'
  }, opt || {});
  range = range || {};
  var m0 = Math.floor(range.dayOffset / MILLIS_PER_MINUTE);
  var h0 = Math.floor(m0 / 60);
  var d0 = Math.floor(h0 / 24);
  m0 = m0 % 60;
  h0 = h0 % 24;
  var endOffset = range.dayOffset + range.duration;
  var m1 = Math.floor(endOffset / MILLIS_PER_MINUTE);
  var h1 = Math.floor(m1 / 60);
  var d1 = Math.floor(h1 / 24);
  m1 = m1 % 60;
  h1 = h1 % 24;
  var res = h0 + ':' + integerZeroPadding(m0, 2) + ' - ' + h1 + ':' + integerZeroPadding(m1, 2);
  if (d0 !== d1) res += ' (' + opt.nextDayText + ')';
  return res;
}
/**
 *
 * @param {Date} date
 * @param type
 * @param {number} n
 * @returns {{expireddate: Date, startdate: Date}}
 */

function getTimeRangeFromStep(date, type, n) {
  var startDate, expiredDate;
  var initHandlers = {
    month: function month(x) {
      return datetime_beginOfMonth(x);
    },
    quarter: function quarter(x) {
      return beginOfQuarter(x);
    },
    year: function year(x) {
      return beginOfYear(x);
    }
  };
  var addHandlers = {
    month: function month(x, d) {
      return addMonth(x, d);
    },
    quarter: function quarter(x, d) {
      return addQuarter(x, d);
    },
    year: function year(x, d) {
      return addYear(x, d);
    }
  };
  startDate = initHandlers[type](addHandlers[type](date, n));
  expiredDate = addHandlers[type](startDate, 1);
  return {
    startdate: startDate,
    expireddate: expiredDate
  };
}
// 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;
}();
/***
 * @extends AElement
 * @constructor
 */


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(int_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;
};
/***
 * @extends AElement
 * @constructor
 */


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;
    }
  }
};
/***
 * @extends AElement
 * @constructor
 */


function Scrollbar() {
  var thisSB = this;
  this.$button = Scroller_$('.absol-scrollbar-button', this);
  this.on('inactive', function (event, sender) {
    this.emit('deactive', event, sender);
  });
}
Scrollbar.tag = 'scrollbar';

Scrollbar.render = function () {
  return Scroller_({
    tag: js_Hanger.tag,
    "class": ['absol-scrollbar'],
    extendEvent: ['scroll', 'active', 'inactive', '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.hasClass('absol-hidden');
  }
};
/***
 * @extends Scrollbar
 * @constructor
 */

function VScrollbar() {
  this.on('draginit', this.eventHandler.dragInit, true).on('drag', this.eventHandler.drag, true).on('dragend', this.eventHandler.dragEnd, true);
  /***
   * @type {number}
   * @name outerHeight
   * @memberOf VScrollbar#
   */

  /***
   * @type {number}
   * @name innerHeight
   * @memberOf VScrollbar#
   */

  /***
   * @type {number}
   * @name innerHeight
   * @memberOf VScrollbar#
   */
}
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.prototype.updateStatus = function () {
  if (this.innerHeight > this.outerHeight) {
    this.addClass('as-overflow');
  } else {
    this.removeClass('as-overflow');
  }
};

VScrollbar.eventHandler = {};

VScrollbar.eventHandler.dragInit = function (event) {
  event.preventDefault();
  var boundRes = this.getBoundingClientRect();
  var boundButton = this.$button.getBoundingClientRect();

  if (event.target === this.$button) {
    this.innerOffset0 = this.innerOffset;
  } else {
    var newInnerOffset = int_map(event.startingPoint.y - boundButton.height / 2 - boundRes.top, 0, boundRes.height, 0, this.innerHeight);
    if (newInnerOffset + this.outerHeight > this.innerHeight) newInnerOffset = this.innerHeight - this.outerHeight;
    if (newInnerOffset < 0) newInnerOffset = 0;
    this.innerOffset = newInnerOffset; //todo

    event.innerOffset = newInnerOffset;
    this.innerOffset0 = newInnerOffset;
    this.emit('scroll', event);
  }

  this.addClass('absol-active');
  this.emit('active', {
    type: 'active',
    originEvent: event,
    target: this,
    originalEvent: event.originalEvent || event
  });
};

VScrollbar.eventHandler.drag = function (event) {
  event.preventDefault();
  var dy = event.currentPoint.sub(event.startingPoint).y;
  var newInnerOffset = this.innerOffset0 + dy * (this.innerHeight / this.outerHeight) * (this.outerHeight / this.getBoundingClientRect().height);
  if (newInnerOffset + this.outerHeight > this.innerHeight) newInnerOffset = this.innerHeight - this.outerHeight;
  if (newInnerOffset < 0) newInnerOffset = 0;
  this.innerOffset = newInnerOffset;
  event.innerOffset = newInnerOffset;
  this.emit('scroll', event);
};

VScrollbar.eventHandler.dragEnd = function (event) {
  this.removeClass('absol-active');
  this.emit('inactive', {
    type: 'inactive',
    originEvent: event,
    target: this,
    originalEvent: event.originalEvent || event
  });
};

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();
      }

      this.updateStatus();
    },
    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();
      }

      this.updateStatus();
    },
    get: function get() {
      return this._outerHeight || 0;
    }
  }
};
/***
 * @extends Scrollbar
 * @constructor
 */

function HScrollbar() {
  this.on('draginit', this.eventHandler.dragInit, true).on('drag', this.eventHandler.drag, true).on('dragend', this.eventHandler.dragEnd, true);
  /***
   * @type {number}
   * @name innerOffset
   * @memberOf HScrollbar#
   */

  /***
   * @type {number}
   * @name innerWidth
   * @memberOf HScrollbar#
   */

  /***
   * @type {number}
   * @name outerWidth
   * @memberOf HScrollbar#
   */
}
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.prototype.updateStatus = function () {
  if (this.innerWidth > this.outerWidth) {
    this.addClass('as-overflow');
  } else {
    this.removeClass('as-overflow');
  }
};
/**
 *
 * @type {{[key: string]:function}}
 */


HScrollbar.eventHandler = {};
/**
 * @this HScrollbar
 * @param event
 */

HScrollbar.eventHandler.dragInit = function (event) {
  event.preventDefault();
  var boundRes = this.getBoundingClientRect();
  var boundButton = this.$button.getBoundingClientRect();

  if (event.target === this.$button) {
    this.innerOffset0 = this.innerOffset;
  } else {
    var newInnerOffset = int_map(event.startingPoint.x - boundButton.width / 2 - boundRes.left, 0, boundRes.width, 0, this.innerWidth);
    if (newInnerOffset + this.outerWidth > this.innerWidth) newInnerOffset = this.innerWidth - this.outerWidth;
    if (newInnerOffset < 0) newInnerOffset = 0;
    this.innerOffset = newInnerOffset; //todo

    event.innerOffset = newInnerOffset;
    this.innerOffset0 = newInnerOffset;
    this.emit('scroll', event);
  }

  var body = Scroller_$(document.body);
  this.addClass('absol-active');
  this.emit('active', {
    type: 'inactive',
    originEvent: event,
    target: this
  });
};
/**
 * @this HScrollbar
 * @param event
 */


HScrollbar.eventHandler.drag = function (event) {
  event.preventDefault();
  var dy = event.currentPoint.x - event.startingPoint.x;
  var newInnerOffset = this.innerOffset0 + dy * (this.innerWidth / this.outerWidth) * (this.outerWidth / this.getBoundingClientRect().width);
  if (newInnerOffset + this.outerWidth > this.innerWidth) newInnerOffset = this.innerWidth - this.outerWidth;
  if (newInnerOffset < 0) newInnerOffset = 0;
  this.innerOffset = newInnerOffset; //todo

  event.innerOffset = newInnerOffset;
  this.emit('scroll', event);
};
/**
 * @this HScrollbar
 * @param event
 */


HScrollbar.eventHandler.dragEnd = function (event) {
  this.removeClass('absol-active');
  this.emit('inactive', {
    type: 'inactive',
    originEvent: event,
    target: this
  });
};

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();
      }

      this.updateStatus();
    },
    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();
      }

      this.updateStatus();
    },
    get: function get() {
      return this._outerWidth || 0;
    }
  }
};
absol_acomp_ACore.install([VScrollbar, HScrollbar, Scrollbar, VScroller, HScroller]);
;// CONCATENATED MODULE: ./node_modules/absol/src/String/stringUtils.js
function stringHashCode(st) {
  var hash = 0,
      i,
      chr;
  if (st.length === 0) return hash;

  for (i = 0; i < st.length; i++) {
    chr = st.charCodeAt(i);
    hash = (hash << 5) - hash + chr;
    hash |= 0; // Convert to 32bit integer
  }

  return hash;
}

function crc16($str) {
  var $CRC16_Lookup = [0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0];
  var $crc16 = 0xFFFF; // the CRC

  var $len = $str.length;
  var $t;

  for (var $i = 0; $i < $len; $i++) {
    $t = $crc16 >> 8 ^ $str.charCodeAt($i); // High byte Xor Message Byte to get index

    $crc16 = $crc16 << 8 & 0xffff ^ $CRC16_Lookup[$t]; // Update the CRC from table
  }

  $crc16 = $crc16.toString(16).toUpperCase();
  return $crc16;
}
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/messagedialog.css
var messagedialog = __webpack_require__(210);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/flexiconbutton.css
var flexiconbutton = __webpack_require__(8913);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FlexiconButton.js
function FlexiconButton_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FlexiconButton_typeof = function _typeof(obj) { return typeof obj; }; } else { FlexiconButton_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FlexiconButton_typeof(obj); }




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 = {
  /***
   *
   * @param {string| {mlKey:string}|*} value
   */
  set: function set(value) {
    value = value || null;
    this._text = value;
    this.$textCtn.clearChild();
    this.$textCtn.attr('data-ml-key', undefined);

    if (value === null || value === undefined) {} else if (FlexiconButton_typeof(value) === "object") {
      if (value.mlKey) {
        this.$textCtn.attr('data-ml-key', value.mlKey);
      }
    } else {
      this.$textCtn.addChild(FlexiconButton_({
        text: value + ''
      }));
    }
  },
  get: function get() {
    return this._text;
  }
};
absol_acomp_ACore.install(FlexiconButton);
/* harmony default export */ const js_FlexiconButton = (FlexiconButton);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MessageDialog.js



/***
 * @extends AElement
 * @constructor
 */

function MessageDialog() {
  this.$header = ACore_$('.as-message-dialog-header', this);
  this.$title = ACore_({
    tag: 'span',
    "class": 'as-message-dialog-title',
    child: {
      text: ''
    }
  });
  this.$body = ACore_$('.as-message-dialog-body', this);
  this.$footer = ACore_$('.as-message-dialog-footer', this);
  this.$actionBtns = [];
}

MessageDialog.tag = 'MessageDialog'.toLowerCase();

MessageDialog.render = function () {
  return ACore_({
    extendEvent: ['action'],
    "class": 'as-message-dialog',
    child: [{
      "class": 'as-message-dialog-header'
    }, {
      "class": 'as-message-dialog-body'
    }, {
      "class": 'as-message-dialog-footer'
    }]
  });
};

['addChild', 'removeChild', 'clearChild', 'addChildBefore', 'addChildAfter'].forEach(function (key) {
  MessageDialog.prototype[key] = function () {
    this.$body[key].apply(this.$body, arguments);
    return this;
  };
});

MessageDialog.prototype._makeActionBtn = function (action) {
  var _this = this;

  var button = ACore_({
    tag: js_FlexiconButton.tag,
    "class": action["class"] || [],
    props: {
      text: action.text || action.name,
      icon: action.icon || null
    },
    on: {
      click: function click(event) {
        _this.emit('action', {
          type: 'action',
          target: _this,
          originalEvent: event,
          action: action
        }, _this);
      }
    }
  });

  if (action.name) button.attr('data-name', action.name);
  return button;
};

MessageDialog.property = {};
MessageDialog.property.dialogActions = {
  /***
   * @this MessageDialog
   * @param actions
   */
  set: function set(actions) {
    var _this2 = this;

    this._actions = actions || [];
    this.$actionBtns.forEach(function (button) {
      return button.remove();
    });
    this.$actionBtns = this._actions.map(function (action) {
      return _this2._makeActionBtn(action);
    });
    this.$footer.addChild(this.$actionBtns);
  },
  get: function get() {
    return this._actions;
  }
};
MessageDialog.property.dialogTitle = {
  set: function set(value) {
    this._dialogTitle = value;
    this.$title.firstChild.data = '';
    this.$title.attr('data-ml-key', undefined);

    if (typeof value === "string") {
      this.$title.firstChild.data = value;
    } else if (value && value.mlKey) {
      this.$title.firstChild.data = '';
      this.$title.attr('data-ml-key', value.mlKey);
    }

    if (value && !this.$title.parentElement) {
      this.$header.addChild(this.$title);
    } else if (!value && this.$title.parentElement) {
      this.$title.remove();
    }
  },
  get: function get() {
    return this._dialogTitle;
  }
};
absol_acomp_ACore.install(MessageDialog);
/* harmony default export */ const js_MessageDialog = (MessageDialog);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/YesNoQuestionDialog.js



/***
 * @extends MessageDialog
 * @constructor
 */

function YesNoQuestionDialog_YesNoQuestionDialog() {
  this.dialogActions = [{
    "class": 'secondary',
    text: 'No',
    name: 'no'
  }, {
    "class": 'primary',
    text: 'Yes',
    name: 'yes'
  }];
  this.$yesBtn = this.$actionBtns[1];
  this.$noBtn = this.$actionBtns[0];
  this.$message = ACore_$('.as-message-dialog-message', this);
  /*{
          class: 'as-message-dialog-footer',
          child: [
              {
                  tag: FlexiconButton.tag,
                  class: ['as-message-dialog-no-btn', 'secondary'],
                  props: {
                      text: 'No'
                  }
              },
              {
                  tag: FlexiconButton.tag,
                  class: ['as-message-dialog-yes-btn', 'primary'],
                  props: {
                      text: 'Yes'
                  }
              }
          ]
      }*/
}

YesNoQuestionDialog_YesNoQuestionDialog.tag = 'YesNoQuestionDialog'.toLowerCase();

YesNoQuestionDialog_YesNoQuestionDialog.render = function () {
  return ACore_({
    tag: js_MessageDialog.tag,
    child: [{
      tag: 'span',
      "class": 'as-message-dialog-message',
      child: {
        text: ''
      }
    }]
  });
};

YesNoQuestionDialog_YesNoQuestionDialog.eventHandler = {};
YesNoQuestionDialog_YesNoQuestionDialog.property = {};
YesNoQuestionDialog_YesNoQuestionDialog.property.message = {
  set: function set(value) {
    value = (value || '') + '';
    this.$message.firstChild.data = value;
  },
  get: function get() {
    return this.$message.firstChild.data;
  }
};
YesNoQuestionDialog_YesNoQuestionDialog.property.textYes = {
  set: function set(value) {
    value = (value || 'Yes') + '';
    this.$yesBtn.text = value;
    this.dialogActions[1].text = value;
  },
  get: function get() {
    return this.$yesBtn.text;
  }
};
YesNoQuestionDialog_YesNoQuestionDialog.property.textNo = {
  set: function set(value) {
    value = (value || 'No') + '';
    this.$noBtn.text = value;
    this.dialogActions[0].text = value;
  },
  get: function get() {
    return this.$noBtn.text;
  }
};
absol_acomp_ACore.install(YesNoQuestionDialog_YesNoQuestionDialog);
/* harmony default export */ const js_YesNoQuestionDialog = (YesNoQuestionDialog_YesNoQuestionDialog);
// 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_Modal() {
  this._contentAlign = [];
  this.contentAlign = 'middle center';
  this.$content = Modal_$('.as-modal-content', this);
}

Modal_Modal.tag = 'modal';

Modal_Modal.render = function () {
  return Modal_({
    "class": 'as-modal',
    child: '.as-modal-content'
  });
};

['findChildBefore', 'findChildAfter', 'removeChild', 'clearChild', 'addChild'].forEach(function (key) {
  Modal_Modal.prototype[key] = function () {
    this.$content[key].apply(this.$content, arguments);
  };
});

Modal_Modal.prototype.getChildren = function () {
  return this.$content.children;
};

Modal_Modal.property = {};
Modal_Modal.property.show = {
  set: function set(value) {
    if (value) this.removeClass('as-hidden');else this.addClass('as-hidden');
  },
  get: function get() {
    return !this.hasClass('as-hidden');
  }
};
Modal_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_Modal);
/* harmony default export */ const js_Modal = (Modal_Modal);
;// CONCATENATED MODULE: ./node_modules/absol/src/Converter/ext2MineType.js
var ext2MineType = {
  "323": "text/h323",
  "*": "application/octet-stream",
  "3g2": "video/3gpp2",
  "3gp": "video/3gpp",
  "7z": "application/x-7z-compressed",
  aac: "audio/aac",
  abw: "application/x-abiword",
  acx: "application/internet-property-stream",
  ai: "application/postscript",
  aif: "audio/x-aiff",
  aifc: "audio/x-aiff",
  aiff: "audio/x-aiff",
  arc: "application/x-freearc",
  asf: "video/x-ms-asf",
  asr: "video/x-ms-asf",
  asx: "video/x-ms-asf",
  au: "audio/basic",
  avi: "video/x-msvideo",
  axs: "application/olescript",
  azw: "application/vnd.amazon.ebook",
  bas: "text/plain",
  bcpio: "application/x-bcpio",
  bin: "application/octet-stream",
  bmp: "image/bmp",
  bz: "application/x-bzip",
  bz2: "application/x-bzip2",
  c: "text/plain",
  cat: "application/vnd.ms-pkiseccat",
  cda: "application/x-cdf",
  cdf: "application/x-netcdf",
  cer: "application/x-x509-ca-cert",
  "class": "application/octet-stream",
  clp: "application/x-msclip",
  cmx: "image/x-cmx",
  cod: "image/cis-cod",
  cpio: "application/x-cpio",
  crd: "application/x-mscardfile",
  crl: "application/pkix-crl",
  crt: "application/x-x509-ca-cert",
  csh: "application/x-csh",
  css: "text/css",
  csv: "text/csv",
  dcr: "application/x-director",
  der: "application/x-x509-ca-cert",
  dir: "application/x-director",
  dll: "application/x-msdownload",
  dms: "application/octet-stream",
  doc: "application/msword",
  docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  dot: "application/msword",
  dvi: "application/x-dvi",
  dxr: "application/x-director",
  eot: "application/vnd.ms-fontobject",
  eps: "application/postscript",
  epub: "application/epub+zip",
  etx: "text/x-setext",
  evy: "application/envoy",
  exe: "application/octet-stream",
  fif: "application/fractals",
  flr: "x-world/x-vrml",
  gif: "image/gif",
  gtar: "application/x-gtar",
  gz: "application/gzip",
  h: "text/plain",
  hdf: "application/x-hdf",
  hlp: "application/winhlp",
  hqx: "application/mac-binhex40",
  hta: "application/hta",
  htc: "text/x-component",
  htm: "text/html",
  html: "text/html",
  htt: "text/webviewhtml",
  ico: "image/vnd.microsoft.icon",
  ics: "text/calendar",
  ief: "image/ief",
  iii: "application/x-iphone",
  ins: "application/x-internet-signup",
  isp: "application/x-internet-signup",
  jar: "application/java-archive",
  jfif: "image/pipeg",
  jpe: "image/jpeg",
  jpeg: "image/jpeg",
  jpg: "image/jpeg",
  js: "text/javascript",
  json: "application/json",
  jsonld: "application/ld+json",
  latex: "application/x-latex",
  lha: "application/octet-stream",
  lsf: "video/x-la-asf",
  lsx: "video/x-la-asf",
  lzh: "application/octet-stream",
  m13: "application/x-msmediaview",
  m14: "application/x-msmediaview",
  m3u: "audio/x-mpegurl",
  man: "application/x-troff-man",
  mdb: "application/x-msaccess",
  me: "application/x-troff-me",
  mht: "message/rfc822",
  mhtml: "message/rfc822",
  mid: "audio/midi",
  midi: "audio/midi",
  mjs: "text/javascript",
  mny: "application/x-msmoney",
  mov: "video/quicktime",
  movie: "video/x-sgi-movie",
  mp2: "video/mpeg",
  mp3: "audio/mpeg",
  mp4: "video/mp4",
  mpa: "video/mpeg",
  mpe: "video/mpeg",
  mpeg: "video/mpeg",
  mpg: "video/mpeg",
  mpkg: "application/vnd.apple.installer+xml",
  mpp: "application/vnd.ms-project",
  mpv2: "video/mpeg",
  ms: "application/x-troff-ms",
  msg: "application/vnd.ms-outlook",
  mvb: "application/x-msmediaview",
  nc: "application/x-netcdf",
  nws: "message/rfc822",
  oda: "application/oda",
  odp: "application/vnd.oasis.opendocument.presentation",
  ods: "application/vnd.oasis.opendocument.spreadsheet",
  odt: "application/vnd.oasis.opendocument.text",
  oga: "audio/ogg",
  ogv: "video/ogg",
  ogx: "application/ogg",
  opus: "audio/opus",
  otf: "font/otf",
  p10: "application/pkcs10",
  p12: "application/x-pkcs12",
  p7b: "application/x-pkcs7-certificates",
  p7c: "application/x-pkcs7-mime",
  p7m: "application/x-pkcs7-mime",
  p7r: "application/x-pkcs7-certreqresp",
  p7s: "application/x-pkcs7-signature",
  pbm: "image/x-portable-bitmap",
  pdf: "application/pdf",
  pfx: "application/x-pkcs12",
  pgm: "image/x-portable-graymap",
  php: "application/x-httpd-php",
  pko: "application/ynd.ms-pkipko",
  pma: "application/x-perfmon",
  pmc: "application/x-perfmon",
  pml: "application/x-perfmon",
  pmr: "application/x-perfmon",
  pmw: "application/x-perfmon",
  png: "image/png",
  pnm: "image/x-portable-anymap",
  pot: "application/vnd.ms-powerpoint",
  ppm: "image/x-portable-pixmap",
  pps: "application/vnd.ms-powerpoint",
  ppt: "application/vnd.ms-powerpoint",
  pptx: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
  prf: "application/pics-rules",
  ps: "application/postscript",
  pub: "application/x-mspublisher",
  qt: "video/quicktime",
  ra: "audio/x-pn-realaudio",
  ram: "audio/x-pn-realaudio",
  rar: "application/vnd.rar",
  ras: "image/x-cmu-raster",
  rgb: "image/x-rgb",
  rmi: "audio/mid",
  roff: "application/x-troff",
  rtf: "application/rtf",
  rtx: "text/richtext",
  scd: "application/x-msschedule",
  sct: "text/scriptlet",
  setpay: "application/set-payment-initiation",
  setreg: "application/set-registration-initiation",
  sh: "application/x-sh",
  shar: "application/x-shar",
  sit: "application/x-stuffit",
  snd: "audio/basic",
  spc: "application/x-pkcs7-certificates",
  spl: "application/futuresplash",
  src: "application/x-wais-source",
  sst: "application/vnd.ms-pkicertstore",
  stl: "application/vnd.ms-pkistl",
  stm: "text/html",
  sv4cpio: "application/x-sv4cpio",
  sv4crc: "application/x-sv4crc",
  svg: "image/svg+xml",
  swf: "application/x-shockwave-flash",
  t: "application/x-troff",
  tar: "application/x-tar",
  tcl: "application/x-tcl",
  tex: "application/x-tex",
  texi: "application/x-texinfo",
  texinfo: "application/x-texinfo",
  tgz: "application/x-compressed",
  tif: "image/tiff",
  tiff: "image/tiff",
  tr: "application/x-troff",
  trm: "application/x-msterminal",
  ts: "video/mp2t",
  tsv: "text/tab-separated-values",
  ttf: "font/ttf",
  txt: "text/plain",
  uls: "text/iuls",
  ustar: "application/x-ustar",
  vcf: "text/x-vcard",
  vrml: "x-world/x-vrml",
  vsd: "application/vnd.visio",
  wav: "audio/wav",
  wcm: "application/vnd.ms-works",
  wdb: "application/vnd.ms-works",
  weba: "audio/webm",
  webm: "video/webm",
  webp: "image/webp",
  wks: "application/vnd.ms-works",
  wmf: "application/x-msmetafile",
  woff: "font/woff",
  woff2: "font/woff2",
  wps: "application/vnd.ms-works",
  wri: "application/x-mswrite",
  wrl: "x-world/x-vrml",
  wrz: "x-world/x-vrml",
  xaf: "x-world/x-vrml",
  xbm: "image/x-xbitmap",
  xhtml: "application/xhtml+xml",
  xla: "application/vnd.ms-excel",
  xlc: "application/vnd.ms-excel",
  xlm: "application/vnd.ms-excel",
  xls: "application/vnd.ms-excel",
  xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
  xlt: "application/vnd.ms-excel",
  xlw: "application/vnd.ms-excel",
  xml: "application/xml",
  xof: "x-world/x-vrml",
  xpm: "image/x-xpixmap",
  xul: "application/vnd.mozilla.xul+xml",
  xwd: "image/x-xwindowdump",
  z: "application/x-compress",
  zip: "application/zip"
};
/* harmony default export */ const Converter_ext2MineType = (ext2MineType);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tool/TextMeasurement.js
/**
 * @deprecated
 * @param opts
 * @constructor
 */
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 = (TextMeasurement);
;// CONCATENATED MODULE: ./node_modules/absol/src/DataStructure/Object.js
function Object_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Object_typeof = function _typeof(obj) { return typeof obj; }; } else { Object_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Object_typeof(obj); }

function revokeResource(o) {
  if (!o) return;
  var oc, ocs;
  var keys, key;

  if (Array.isArray(o)) {
    while (o.length) {
      oc = o.pop();

      try {
        revokeResource(oc);
      } catch (err) {}
    }
  } else if (o.revokeResource) {
    o.revokeResource();
  } else if (o.nodeType === 1 || o.nodeType === 3) {
    if (o.revokeResource) o.revokeResource();else {
      while (o.lastChild) {
        oc = o.lastChild;
        revokeResource(oc);

        if (oc.selfRemove) {
          oc.selfRemove();
        } else {
          oc.remove();
        }
      }
    }
  } else if (Object_typeof(o) === "object") {
    keys = [];
    ocs = [];

    for (key in o) {
      keys.push(key);
    }

    while (keys.length) {
      key = keys.pop();
      ocs.push(o[keys]);

      try {
        delete o[key];
      } catch (err) {}
    }

    while (ocs.length) {
      try {
        revokeResource(ocs.pop());
      } catch (err) {}
    }
  }

  ocs = undefined;
  oc = undefined;
  keys = undefined;
  key = undefined;
  o = undefined;
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/utils.js
function utils_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { utils_typeof = function _typeof(obj) { return typeof obj; }; } else { utils_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return utils_typeof(obj); }









function getSelectionRangeDirection(range) {
  var sel = document.getSelection();
  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';
  }

  return direction;
}
/***
 *
 * @param {Range} range
 * @param {boolean=} backward
 */

function setSelectionRange(range, backward) {
  var sel = document.getSelection();

  if (backward) {
    if (typeof sel.extend != "undefined") {
      var endRange = range.cloneRange();
      endRange.collapse(false);
      sel.removeAllRanges();
      sel.addRange(endRange);
      sel.extend(range.startContainer, range.startOffset);
    }
  } else {
    sel.removeAllRanges();
    sel.addRange(range);
  }
}
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 nearFloor(x, epsilon) {
  var y = Math.floor(x);
  if (x - y + epsilon >= 1) y++;
  return y;
}
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) {
  return 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);
}
function forwardEvent(elt, fromName, toName) {
  elt.defineEvent(toName);
  elt.on(fromName, function (event) {
    event = Object.assign({}, event);
    event.type = toName;
    this.emit.apply(this, [toName, event].concat(Array.prototype.slice.call(arguments, 1)));
  });
}
function forwardMethod(elt, fromName, toName) {
  elt[fromName] = function () {
    this[toName].apply(this, arguments);
  };
}
/***
 *
 * @param {"camera"|"microphone"|"camcorder"|{accept:("image/*"|"audio/*"|"video/*"|undefined), capture:boolean|undefined, multiple:boolean|undefined}|{}=} props
 * @param {boolean=}unSafe
 *  @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);
  });
}
function openYesNoQuestionDialog(title, message) {
  return new Promise(function (resolve) {
    if (window.ModalElement && window.ModalElement.question) {
      window.ModalElement.question({
        title: title,
        message: message,
        onclick: function onclick(sel) {
          if (sel === 0) {
            resolve(true);
          } else {
            resolve(false);
          }
        }
      });
    } else {
      var modal = _({
        tag: Modal.tag,
        child: {
          tag: YesNoQuestionDialog.tag,
          props: {
            textYes: 'Có',
            textNo: 'Không',
            message: message,
            dialogTitle: title
          },
          on: {
            action: function action(event) {
              modal.remove();
              resolve(event.action.name === 'yes');
            }
          }
        }
      }).addTo(document.body);
    }
  });
}
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;
}
/**
 *TODO: import from absol-acomp
 * @param {Text} text
 * @param {number=} startOffset
 * @param {number=} endOffset
 * @returns {*[]}
 */

function getTextNodeBounds(text, startOffset, endOffset) {
  if (!text || text.nodeType !== Node.TEXT_NODE || !text.parentElement) return null;
  var style = getComputedStyle(text.parentElement);
  var fontSize = parseFloat(style.getPropertyValue('font-size').replace('px', ''));
  var lineHeight = style.getPropertyValue('line-height');
  if (lineHeight === 'normal') lineHeight = 1.2;else lineHeight = parseFloat(lineHeight.replace('px', '')) / fontSize;
  var txt = text.data;
  var y = -Infinity;
  var c;
  var range;
  var parts = [];
  var cPart;
  var j;
  var delta = lineHeight * fontSize / 3;
  var rect;
  var i = 0;
  if (isNaturalNumber(startOffset)) i = Math.max(startOffset, i);
  if (isNaturalNumber(endOffset)) endOffset = Math.min(txt.length, endOffset);else endOffset = txt.length;

  while (i < endOffset) {
    c = txt[i];
    j = i + 1;
    range = document.createRange();
    range.setStart(text, i);
    range.setEnd(text, j);
    rect = Math_Rectangle.fromClientRect(range.getBoundingClientRect());

    if (Math.abs(rect.y - y) < delta) {
      cPart.end = j;
      cPart.rect = cPart.rect.merge(rect);
    } else {
      cPart = {
        start: i,
        end: j,
        rect: rect
      };
      y = rect.y;
      parts.push(cPart);
    }

    i = j;
  }

  parts.forEach(function (part) {
    rect = part.rect;
    part.text = txt.substring(part.start, part.end);
  });
  return parts;
}
/***
 *
 * @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", "autoFixParentSize", "sync", "$dropper", "$vmenu", "$button", "$text", "$key", "$arrow", "$iconCtn", "_textMarginRight", "_tabIndex", '$icon', '_icon', '$textNode', '$primaryBtn', '$extendBtn', '_menuHolder', '_items', 'hasClass'].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;
}
function getTagListInTextMessage(text) {
  var rg = /@\[id:(\d+)]/g;
  var matched = rg.exec(text);
  var dict = {};
  var v;
  var res = [];

  while (matched) {
    v = parseInt(matched[1]);
    if (isNaN(v)) v = matched[1];

    if (!dict[v]) {
      dict[v] = true;
      res.push(v);
    }

    matched = rg.exec(text);
  }

  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);
}
function swapChildrenInElt(e1, e2) {
  var c1 = Array.prototype.slice.call(e1.childNodes);
  var c2 = Array.prototype.slice.call(e2.childNodes);
  ACore_$(e1).clearChild();
  ACore_$(e2).clearChild();

  while (c2.length > 0) {
    e1.appendChild(c2.shift());
  }

  while (c1.length > 0) {
    e2.appendChild(c1.shift());
  }
}
function replaceChildrenInElt(elt, childNodes) {
  var nChildren = childNodes.slice();
  var cChildren = Array.prototype.slice.call(elt.childNodes);
  var cC, nC;

  while (cChildren.length > 0 && nChildren.length > 0) {
    cC = cChildren[0];
    nC = nChildren[0];

    if (cC === nC) {
      cChildren.shift();
      nChildren.shift();
    } else {
      break;
    }
  }

  cChildren.forEach(function (elt) {
    elt.remove();
  });
  elt.addChild(nChildren);
}
function findVScrollContainer(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") {
    parent = document.body.parentElement;
  }

  return parent;
}
/**
 *
 * @param {HTMLElement} elt
 */

function vScrollIntoView(elt) {
  var parent = findVScrollContainer(elt);
  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', 'w', 'ww', 'Q', 'QQ'].indexOf(text) >= 0;
}
var normalizeMinuteOfMillis = function normalizeMinuteOfMillis(mil) {
  mil = mil >> 0;

  if (mil < 0) {
    mil += Math.ceil(-mil / MILLIS_PER_DAY) * MILLIS_PER_DAY;
  }

  mil = mil % MILLIS_PER_DAY;
  return Math.floor(mil / 6e4) * 6e4;
};
/**
 *
 * @param {number} mil
 * @returns {{hour: number, minute: number, isNextDate: boolean}}
 */

var millisToClock = function millisToClock(mil) {
  var res = {};
  res.minute = Math.floor(mil / 6e4) % 60;
  var hour = Math.floor(mil / 36e5);

  if (hour >= 24) {
    res.hour = hour % 24;
    res.isNextDate = true;
  } else {
    res.hour = hour;
  }

  return res;
};
var clockToMillis = function clockToMillis(hour, minute) {
  var res = hour * MILLIS_PER_HOUR + minute * MILLIS_PER_MINUTE;
  if (isNaturalNumber(res)) return res;
  return null;
};
function isRealNumber(value) {
  return isFinite(value) && typeof value === "number";
}
function isNaturalNumber(value) {
  return isFinite(value) && typeof value === "number" && Math.floor(value) === value && value >= 0;
}
/****
 *
 * @param {string} text
 * @param {{locales?:string}|string =} opt
 */

function parseLocalFloat(text, opt) {
  if (typeof opt === "string") opt = {
    locales: opt
  };
  var locales = opt && opt.locales || window.systemconfig && window.systemconfig.numberFormatLocales;
  var sample = locales ? new Intl.NumberFormat(locales).format(123456.78) : 123456.78.toLocaleString(); // decimal-separator, thousand-separator.

  var thousandSeparator = sample.match(/3(.?)4/)[1] || '';
  var decimalSeparator = sample.match(/6(.?)7/)[1];
  text = text.replace(new RegExp('[' + thousandSeparator + ']', 'g'), '').replace(new RegExp('[' + decimalSeparator + ']', 'g'), '.');
  return parseFloat(text);
}
function formatLocalFloat(value, opt) {
  if (typeof opt === "string") opt = {
    locales: opt
  };
  var formatOpt = Object.assign({}, opt);
  delete formatOpt.locales;
  var locales = opt && opt.locales || window.systemconfig && window.systemconfig.numberFormatLocales;
  var sample;
  var thousandSeparator;
  var decimalSeparator;

  if (!locales) {
    sample = 123456.78.toLocaleString();
    thousandSeparator = sample.match(/3(.?)4/)[1] || '';
    decimalSeparator = sample.match(/6(.?)7/)[1];
    if (decimalSeparator === '.') locales = 'en-US';else if (decimalSeparator === ',') {
      locales = 'vi-VN';
    }
  }

  return new Intl.NumberFormat(locales, formatOpt).format(value);
}
/***
 *
 * @param {String} text
 * @returns {Boolean}
 */

function isURLAddress(text) {
  if (typeof text != "string") return false;
  return text.startsWith('.') || text.startsWith('http://') || text.startsWith('https://') || text.startsWith('/');
}
/***
 *
 * @param {string | null} pattern
 * @param {string} typeString
 * @returns {boolean}
 */

function fileAccept(pattern, typeString) {
  if (!pattern) return true;
  var parts = pattern.split(',').map(function (x) {
    return x.trim().toLowerCase();
  });
  var ext = typeString.split('.').pop().toLowerCase();
  var mineType = typeString.split('/').shift().toLowerCase();
  return parts.some(function (part) {
    if (part === '*') return true;

    if (part === 'audio/*') {
      return mineType === 'audio' || ['.3gp', '.aa', '.aac', '.aax', '.act', '.aiff', '.alac', '.amr', '.ape', '.au', '.awb', '.dss', '.flac', '.gsm', '.m4a', '.m4b', '.m4p', '.mp3', '.mpc', '.ogg, .oga, .mogg', '.opus', '.ra', '.rm', '.raw', '.rf64', '.sln', '.tta', '.voc', '.vox', '.wav', '.wma', '.wv', '.webm', '.8svx', '.cda'].indexOf(ext) >= 0;
    } else if (part === 'video/*') {
      return mineType === 'video' || ['.webm', '.mkv', '.flv', '.flv', '.vob', '.drc', '.gif', '.gifv', '.mng', '.avi', '.wmv', '.yuv', '.rm', '.rmvb', '.viv', '.asf', '.amv', '.m4v', '.svi', '.3gp', '.3g2', '.mxf', '.roq', '.nsv'].indexOf(ext) >= 0;
    } else if (part === 'image/*') {
      return mineType === 'video' || ["ase", "art", "bmp", "blp", "cd5", "cit", "cpt", "cr2", "cut", "dds", "dib", "djvu", "egt", "exif", "gif", "gpl", "grf", "icns", "ico", "iff", "jng", "jpeg", "jpg", "jfif", "jp2", "jps", "lbm", "max", "miff", "mng", "msp", "nef", "nitf", "ota", "pbm", "pc1", "pc2", "pc3", "pcf", "pcx", "pdn", "pgm", "PI1", "PI2", "PI3", "pict", "pct", "pnm", "pns", "ppm", "psb", "psd", "pdd", "psp", "px", "pxm", "pxr", "qfx", "raw", "rle", "sct", "sgi", "rgb", "int", "bw", "tga", "tiff", "tif", "vtf", "xbm", "xcf", "xpm", "3dv", "amf", "ai", "awg", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "gbr", "odg", "svg", "stl", "vrml", "x3d", "sxd", "v2d", "vnd", "wmf", "emf", "art", "xar", "png", "webp", "jxr", "hdp", "wdp", "cur", "ecw", "iff", "lbm", "liff", "nrrd", "pam", "pcx", "pgf", "sgi", "rgb", "rgba", "bw", "int", "inta", "sid", "ras", "sun", "tga", "heic", "heif"].indexOf(ext) >= 0;
    } else if (part.startsWith('.')) {
      return '.' + ext === part;
    } else {
      return part === ext || part === mineType;
    }
  });
}
/***
 *
 * @param {File|Blob|string|{url:string}} fi
 */

function fileInfoOf(fi) {
  var res = {};

  var handle = function handle(o) {
    var parts;

    if (typeof o === "string") {
      res.name = res.name || (o.split('/').pop() || '').replace(/%([\dA-Fa-f][\dA-Fa-f])/g, function (all, g1) {
        var n = parseInt(g1, 16);

        if (typeof n === "number") {
          return String.fromCharCode(n);
        }

        return all;
      }).replace(/\?.+$/, '');
      if (!res.url && isURLAddress(o)) res.url = o;
      parts = res.name.split('.');

      if (!res.type && parts.length > 1) {
        res.type = parts.pop();
      } else if (typeof res.url === 'string') {
        parts = res.url.split('.');
        res.type = parts.pop();
      }

      if (res.type === 'upload') res.type = parts.pop();
    } else if (utils_typeof(o) === "object" && o) {
      if (o instanceof Blob) {
        res.mimeType = o.type;
      }

      if (!res.name && typeof o.name === "string") {
        res.name = o.name;
      }

      if (!res.size && typeof o.size === "number") {
        res.size = o.size;
      }

      if (typeof o.url === "string") {
        res.url = o.url;
        handle(o.url);
      }
    }
  };

  handle(fi);

  if (res.name) {
    res.name = res.name.replace(/\.upload$/, '');
  }

  if (!res.type && res.name) {
    res.type = res.name.toLowerCase().split('.').slice(1).pop();
  }

  if (!res.mimeType && res.type) {
    res.mimeType = Converter_ext2MineType[res.type];
  }

  for (var k in res) {
    if (res[k] === undefined) delete res[k];
  }

  return res;
}
function addElementsBefore(inElement, elements, at) {
  for (var i = 0; i < elements.length; ++i) {
    (inElement.addChildBefore || inElement.insertBefore).call(inElement, elements[i], at);
  }
}
function addElementAfter(inElement, elements, at) {
  var atIdx;
  var before;
  var i;

  if (at) {
    atIdx = Array.prototype.indexOf.call(inElement.childNodes, at);
    if (at && atIdx < 0) throw new Error("The node before which the new node is to be inserted is not a child of this node.");
    before = inElement.childNodes[atIdx + 1];

    if (before) {
      for (i = 0; i < elements.length; ++i) {
        (inElement.addChildBefore || inElement.insertBefore).call(inElement, elements[i], before);
      }
    } else {
      for (i = 0; i < elements.length; ++i) {
        (inElement.addChild || inElement.appendChild).call(inElement, elements[i]);
      }
    }
  } else {
    before = inElement.firstChild;

    for (i = 0; i < elements.length; ++i) {
      (inElement.addChildBefore || inElement.insertBefore).call(inElement, elements[i], before);
    }
  }
}
function addElementClassName(elt, className) {
  if (typeof className === "string") {
    className = className.trim().split(/\s+/);
  }

  if (className instanceof Array) {
    className.forEach(function (cls) {
      return elt.classList.add(cls);
    });
  }
}
function findMaxZIndex(elt) {
  var e = elt;
  var style;
  var res = 0;

  while (e && e !== document.body) {
    style = getComputedStyle(e);
    res = Math.max(parseFloat(style.getPropertyValue('z-index')) || 0);
    e = e.parentElement;
  }

  return res;
}
function getAncestorElementOf(elt) {
  while (elt.parentElement) {
    elt = elt.parentElement;
  }

  return elt;
}
function checkedValues2RootTreeValues(items, values) {
  var keyOf = function keyOf(x) {
    return utils_typeof(x) + x;
  };

  var dict = values.reduce(function (ac, cr) {
    ac[keyOf(cr)] = true;
    return ac;
  }, {});

  var checkScan = function checkScan(item) {
    if (dict[keyOf(item.value)]) return true;

    if (item.items && item.items.length > 0) {
      item.items.forEach(function (sItem) {
        return checkScan(sItem);
      });
      dict[keyOf(item.value)] = item.items.every(function (sItem) {
        return dict[keyOf(sItem.value)];
      });
    }

    return dict[keyOf(item.value)];
  };

  var res = [];

  var scan = function scan(item) {
    if (dict[keyOf(item.value)]) {
      res.push(item.value);
    } else if (item.items && item.items.length > 0) {
      item.items.forEach(function (sItem) {
        return scan(sItem);
      });
    }
  };

  items.forEach(function (sItem) {
    return scan(sItem);
  });
  return res;
}
function rootTreeValues2CheckedValues(items, values) {
  var keyOf = function keyOf(x) {
    return utils_typeof(x) + x;
  };

  var dict = values.reduce(function (ac, cr) {
    ac[keyOf(cr)] = true;
    return ac;
  }, {});
  var res = [];

  var visit = function visit(item, checked) {
    if (checked) res.push(item.value);

    if (item.items && item.items.length > 0) {
      item.items.forEach(function (cr) {
        return visit(cr, checked || dict[keyOf(cr.value)]);
      });
    }
  };

  items.forEach(function (cr) {
    return visit(cr, dict[keyOf(cr.value)]);
  });
  return res;
}
/***
 *
 * @param {SelectionItem[]} items
 * @param {{removeNoView?: boolean, removeNewLine?:boolean}=} opt
 * @returns {SelectionItem[]}
 */

function copySelectionItemArray(items, opt) {
  opt = opt || {};

  if (opt.removeNoView) {
    items = items.filter(function (item) {
      return !item.noView;
    });
  }

  if (opt.removeNewLine) {
    items.forEach(function (it) {
      if (it.text && it.text.indexOf && it.text.indexOf('\n') >= 0) {
        it.text = it.text.replace(/[\r\n]/g, '');
      }
    });
  }

  return items.map(function (item) {
    var newItem;

    if (utils_typeof(item) === "object" && 'text' in item) {
      newItem = Object.assign({}, item);
    } else {
      newItem = {
        text: item + '',
        value: item
      };
    }

    if (item.items) {
      newItem.items = copySelectionItemArray(item.items, opt);
    }

    return newItem;
  });
}

function compareSelectionItemArray(a, b) {
  if (a === b) return true;
  var aEmpty = !a || !a.length;
  var bEmpty = !b || !b.length;
  if (!aEmpty && aEmpty === bEmpty) return true;
  if (aEmpty !== bEmpty) return false;
  if (a.length !== b.length) return false;
  var n = a.length;
  var ait, bit;

  for (var i = 0; i < n; ++i) {
    ait = a[i];
    bit = b[i];
    if (ait === bit) continue;
    if (ait.text !== bit.text) return false;
    if (ait.text !== bit.text) return false;
    if (!compareSelectionItemArray(ait.items, bit.items)) return false;
  }

  return true;
}
/***
 *
 * @param {AElement|HTMLElement} element
 * @param {number} padding
 */


function isScrolledToBottom(element, padding) {
  if (!isRealNumber(padding)) padding = 0;
  return element.scrollHeight - element.scrollTop - padding <= element.clientHeight;
}
function implicitLatLng(value) {
  var latlng = null;
  var nums;

  if (typeof value === "string") {
    nums = value.split(/\s*,\s*/).map(function (t) {
      return parseFloat(t);
    });

    if (isRealNumber(nums[0]) && isRealNumber(nums[1])) {
      latlng = new google.maps.LatLng(nums[0], nums[1]);
    }
  } else if (value instanceof google.maps.LatLng) {
    latlng = value;
  } else if (value && isRealNumber(value.latitude) && isRealNumber(value.longitude)) {
    latlng = new google.maps.LatLng(value.latitude, value.longitude);
  } else if (value && isRealNumber(value.lat) && isRealNumber(value.lng)) {
    latlng = new google.maps.LatLng(value.lat, value.lng);
  } else if (value instanceof Array && isRealNumber(value[0]) && isRealNumber(value[1])) {
    latlng = new google.maps.LatLng(value[0], value[1]);
  }

  return latlng;
}
function getMapZoomLevel(mapDim, bounds) {
  var WORLD_DIM = {
    height: 256,
    width: 256
  };
  var ZOOM_MAX = 21;

  function latRad(lat) {
    var sin = Math.sin(lat * Math.PI / 180);
    var radX2 = Math.log((1 + sin) / (1 - sin)) / 2;
    return Math.max(Math.min(radX2, Math.PI), -Math.PI) / 2;
  }

  function zoom(mapPx, worldPx, fraction) {
    return Math.floor(Math.log(mapPx / worldPx / fraction) / Math.LN2);
  }

  var ne = bounds.getNorthEast();
  var sw = bounds.getSouthWest();
  var latFraction = (latRad(ne.lat()) - latRad(sw.lat())) / Math.PI;
  var lngDiff = ne.lng() - sw.lng();
  var lngFraction = (lngDiff < 0 ? lngDiff + 360 : lngDiff) / 360;
  var latZoom = zoom(mapDim.height, WORLD_DIM.height, latFraction);
  var lngZoom = zoom(mapDim.width, WORLD_DIM.width, lngFraction);
  return Math.min(latZoom, lngZoom, ZOOM_MAX);
}
/***
 *
 * @param p0
 * @param p1
 * @returns {number}
 */

function latLngDistance(p0, p1) {
  var lat0 = p0.lat();
  var lat1 = p1.lat();
  var lng0 = p0.lng();
  var lng1 = p1.lng();

  var toRad = function toRad(value) {
    return value * Math.PI / 180;
  };

  var R = 6371;
  var dLat = toRad(lat1 - lat0);
  var dLng = toRad(lng1 - lng0);
  lat0 = toRad(lat0);
  lat1 = toRad(lat1);
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLng / 2) * Math.sin(dLng / 2) * Math.cos(lat0) * Math.cos(lat1);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d;
}
function keyStringOf(o) {
  var type = utils_typeof(o);

  var keys;

  if (o && type === "object") {
    if (typeof o.getTime === "function") {
      return 'd(' + o.getTime() + ')';
    } else if (typeof o.map === "function") {
      return 'a(' + o.map(function (val) {
        return keyStringOf(val);
      }).join(',') + ')';
    } else {
      keys = Object.keys(o);
      keys.sort();
      return 'o(' + keys.map(function (key) {
        return key + ':' + keyStringOf(o[key]);
      }).join(',') + ')';
    }
  } else {
    return type[0] + '(' + o + ')';
  }
}
function jsStringOf(x) {
  if (x === null) return 'null';
  if (x === undefined) return 'undefined';

  var type = utils_typeof(x);

  if (type === 'string' || type === 'number') return JSON.stringify(x);
  if (x instanceof Date) return 'new Date(' + x.getTime() + ')';
  var keys;
  keys = Object.keys(x);
  keys.sort();
  return '{' + keys.map(function (key) {
    return JSON.stringify(key) + ':' + jsStringOf(x[key]);
  }).join(',') + '}';
}
function calcDTQueryHash(o) {
  var s = jsStringOf(o);
  return stringHashCode(s);
}
function replaceInObject(o, replacer, test) {
  return new Promise(function (rs) {
    var sync = [];

    function visit(so) {
      Object.keys(so).forEach(function (key) {
        var newValue;

        if (test(so[key])) {
          newValue = replacer(so[key], key, so);

          if (newValue && newValue.then) {
            sync.push(newValue);
            newValue.then(function (newValue) {
              return so[key] = newValue;
            });
          } else {
            so[key] = newValue;
          }
        } else if (utils_typeof(so[key]) === "object" && so[key]) {
          visit(so[key]);
        }
      });
    }

    visit(o);
    Promise.all(sync).then(function () {
      rs(o);
    });
  });
}
function replaceFileInObject(o, replacer) {
  return replaceInObject(o, replacer, function (value, key, object) {
    return value instanceof File || value instanceof Blob;
  });
}

function isNone(x) {
  return x === null || x === undefined;
}
var measureTool = new tool_TextMeasurement();
function wrapWord(text, width, font) {
  font = font || '14px arial';
  measureTool.compute(font);
  var res = [];
  var i = 1;
  var prevText = '';
  var curText;

  while (text.length > 0) {
    if (i > text.length && text) {
      res.push(text);
      break;
    }

    curText = text.substring(0, i);

    if (measureTool.measureTextWidth(curText, font) <= width || !prevText) {
      prevText = curText;
    } else {
      text = text.substring(prevText.length).trimStart();
      res.push(prevText);
      prevText = '';
      i = 1;
      continue;
    }

    ++i;
  }

  return res;
}
function wrapText(text, width, font) {
  font = font || '14px arial';
  measureTool.compute(font);
  var res = [];
  var i = 1;
  var prevText = '';
  var prevWidth = 0;
  var curText, curWidth;

  while (text.length > 0) {
    if (i > text.length && text) {
      prevText = text;
      prevWidth = measureTool.measureTextWidth(prevText, font);

      if (prevWidth <= width) {
        res.push(prevText);
      } else {
        res.push.apply(res, wrapWord(prevText, width, font));
      }

      break;
    }

    if (!text[i - 1].match(/[\s\n]/) && (!text[i] || text[i].match(/[\s\n]/))) {
      curText = text.substring(0, i);
      curWidth = measureTool.measureTextWidth(curText, font);

      if (curWidth <= width || !prevText) {
        prevText = curText;
        prevWidth = curWidth;
      } else {
        if (prevWidth <= width) {
          res.push(prevText);
        } else {
          prevText = wrapWord(prevText, width, font).shift();
          res.push(prevText);
        }

        text = text.substring(prevText.length).trimStart();
        prevText = '';
        i = 1;
        continue;
      }
    }

    ++i;
  }

  return res;
}
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/DelaySignal.js


/**
 * @extends EventEmitter
 * @constructor
 */

function DelaySignal() {
  HTML5_EventEmitter.call(this);
  this.signals = {};
  this.to = this.NO_WAIT;
  this.execSignal = this.execSignal.bind(this);
}

mixClass(DelaySignal, HTML5_EventEmitter);
DelaySignal.NO_WAIT = -1;
DelaySignal.prototype.NO_WAIT = DelaySignal.NO_WAIT;
DelaySignal.prototype.delay = 4;

DelaySignal.prototype.execSignal = function () {
  this.to = this.NO_WAIT;
  var signals = this.signals;
  this.signals = {};

  for (var name in signals) {
    this.fire.apply(this, [name].concat(signals[name]));
  }
};

DelaySignal.prototype.emit = function (name) {
  this.signals[name] = Array.prototype.slice.call(arguments, 1);

  if (this.to === this.NO_WAIT) {
    this.to = setTimeout(this.execSignal, this.delay);
  }

  return this;
};

/* harmony default export */ const HTML5_DelaySignal = (DelaySignal);
;// 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._startDayOfWeek = 0; // getDefaultFirstDayOfWeek();

  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.$dayOfWeek = ChromeCalendar_$('.absol-chrome-calendar-dayofweek', 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_DelaySignal().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.on('keydown', this.eventHandler.keydown);
  this.sync = new Promise(function (rs) {
    thisCal.$attachHook.on('attached', rs);
  });
  this.sync.then(function () {
    thisCal.domSignal.emit('level_change');
    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');
  this.startDayOfWeek = getDefaultFirstDayOfWeek();
}

ChromeCalendar.tag = 'ChromeCalendar'.toLowerCase();

ChromeCalendar.render = function () {
  return ChromeCalendar_({
    "class": ['absol-chrome-calendar'],
    attr: {
      'data-level': 'day',
      tabindex: '1'
    },
    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-month',
            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._isSelectedQuarter = function (date) {
  for (var i = 0; i < this._selectedDates.length; ++i) {
    if (compareMonth(beginOfQuarter(date), beginOfQuarter(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 = [];
    Array.prototype.forEach.call(monthElt.childNodes, function (row) {
      row.on('click', function (event) {
        if (event.target !== this) return;
        var pickedElt = this.firstChild;
        var pickDate = this.firstChild.__date__;
        self.pickDate(pickDate, event);

        if (pickedElt.hasClass('absol-chrome-calendar-not-in-month')) {
          if (pickDate.getDate() < 15) {
            self.viewNexMonth();
          } else {
            self.viewPrevMonth();
          }
        }
      });
    });
    ChromeCalendar_$('.absol-chrome-calendar-week-in-month > div', this.$month, function (elt) {
      monthElt.$cells.push(elt);
      elt.on('click', function (event) {
        var pickedElt = elt;
        var pickDate = this.__date__;

        if (self._level === 'week') {
          pickDate = beginOfWeek(pickDate, false, self._startDayOfWeek);
          pickedElt = elt.parentElement.firstChild;
        }

        self.pickDate(pickDate, event);

        if (pickedElt.hasClass('absol-chrome-calendar-not-in-month')) {
          if (pickDate.getDate() < 15) {
            self.viewNexMonth();
          } else {
            self.viewPrevMonth();
          }
        }
      });
    });
  }

  var currentDate = beginOfWeek(datetime_beginOfMonth(date), false, this._startDayOfWeek);
  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);
  }

  Array.prototype.forEach.call(monthElt.childNodes, function (row) {
    var weekIdx = weekIndexOf(row.firstChild.__date__, false, self._startDayOfWeek);
    row.attr('data-week-idx-text', zeroPadding(1 + weekIdx, 2) + '');
  });
};

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;
  var selectedWeeks = {};

  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');
      selectedWeeks[weekIndexOf(currentDate, false, this._startDayOfWeek)] = true;
    } 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');
    }
  }

  Array.prototype.forEach.call(monthElt.childNodes, function (row) {
    var weekIdx = weekIndexOf(row.firstChild.__date__, false, this._startDayOfWeek);

    if (selectedWeeks[weekIdx]) {
      row.addClass('as-week-selected');
    } else {
      row.removeClass('as-week-selected');
    }
  }.bind(this));
};

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].hasClass('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].hasClass('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":
    case 'week':
      this.viewMonth();
      break;

    case "month":
    case "quarter":
      this.viewYear();
      break;

    case "year":
      this.viewEra(true);
      break;
  }
};

ChromeCalendar.prototype.viewMonth = function () {
  this._updateButtons();

  this.attr('data-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.attr('data-view', 'year');
  this.removeClass('view-month').removeClass('view-era').addClass('view-year');
  this.expandYear(this._viewDate.getFullYear());
  this.$yearScroller.requestUpdateSize();

  if (this._level === 'month' || this._level === 'quarter') {
    this.$titleTime.innerHTML = formatDateString(this._viewDate, 'yyyy');
  }
};

ChromeCalendar.prototype.viewEra = function (animation) {
  this.attr('data-view', 'era');
  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._level === 'quarter') {
    this._viewDate = new Date(year, 0, 1);
    this.$titleTime.innerHTML = formatDateString(this._viewDate, '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;
  }

  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;
        console.log(yc);

        if (tc < t1) {
          thisCal._decadeScrollTimeout = setTimeout(tick, 500);
        } else {
          thisCal._decadeScrollTimeout = -1;
          thisCal.scrollIntoDecadeResolve = null;
          resolve();
        }
      }, 500);
    } 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_week = ChromeCalendar.prototype._updateButtons_day;

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-months',
    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);
          var quarter = Math.floor((i * 4 + j) / 3);
          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'] : []),
            attr: {
              'data-quarter': quarter + ''
            },
            child: {
              text: monthNames[i * 4 + j].substr(0, 3)
            },
            on: {
              click: function click() {}
            },
            props: {
              __date__: date,
              __quarter__: quarter
            }
          };
        })
      };
    }),
    on: {
      click: this.eventHandler.clickMonthsInYear
    }
  });

  res.$monthList = [];
  ChromeCalendar_$('.absol-chrome-calendar-year-month', res, function (e) {
    res.$monthList.push(e);
  });

  function onMouseEnter(event) {
    document.addEventListener('mousemove', onMouseMove);
  }

  function onMouseMove(event) {
    if (!hitElement(res, event)) {
      document.removeEventListener('mousemove', onMouseMove);
      res.attr('data-hover-quarter', undefined);
      return;
    }

    if (typeof event.target.__quarter__ === "number") {
      if (res.attr('data-hover-quarter') !== event.target.__quarter__ + '') res.attr('data-hover-quarter', event.target.__quarter__ + '');
    } else {
      res.attr('data-hover-quarter', undefined);
    }
  }

  res.on('mouseenter', onMouseEnter);

  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');
      }

      if (self._isSelectedQuarter(e.__date__)) {
        e.addClass('as-quarter-selected');
      } else {
        e.removeClass('as-quarter-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 Array)) value = [value];
    value = value.map(function (d) {
      return implicitDate(d);
    }).filter(function (d) {
      return !!d;
    });
    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() {
    var level = this._level;

    var res = this._selectedDates.map(function (d) {
      switch (level) {
        case 'day':
          return beginOfDay(d);

        case 'week':
          return beginOfWeek(d);

        case 'month':
          return datetime_beginOfMonth(d);

        case 'quarter':
          return beginOfQuarter(d);

        case 'year':
          return beginOfYear(d);
      }
    });

    res = res.reduce(function (ac, d) {
      var key = keyStringOf(d);
      if (ac.has[key]) return ac;
      ac.has[key] = d;
      ac.arr.push(d);
      return ac;
    }, {
      has: {},
      arr: []
    }).arr;
    res.sort(function (a, b) {
      return a.getTime() - b.getTime();
    });
    return res;
  }
};
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.hasClass('multi-select');
  }
};
ChromeCalendar.property.level = {
  set: function set(value) {
    value = (value || '') + '';
    value = value.toLowerCase();
    if (['day', 'week', 'quarter', 'month', 'year'].indexOf(value) < 0) value = 'day';
    if (this._level === value) return;
    this.attr('data-level', value);
    this._level = value;
    this.domSignal.emit('level_change');
    if (this._level === 'year') this.domSignal.emit('request_update_picked_years');
  },
  get: function get() {
    return this._level;
  }
};
ChromeCalendar.prototype.dayInWeekTexts = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
ChromeCalendar.property.startDayOfWeek = {
  set: function set(value) {
    value = Math.max(0, Math.min(Math.floor(value || 0), 6));

    if (this._startDayOfWeek !== value) {
      this._startDayOfWeek = value;
      Array.prototype.forEach.call(this.$dayOfWeek.childNodes, function (e, i) {
        e.firstChild.data = this.dayInWeekTexts[(i + value) % 7];
      }.bind(this));
    }

    this._updateMonth(this.$month);
  },
  get: function get() {
    return this._startDayOfWeek;
  }
};
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":
    case 'week':
      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":
    case 'week':
      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(), event);
      break;

    case 'week':
      this.pickDate(beginOfWeek(new Date(), false, this.startDayOfWeek), event);
      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":
    case "week":
      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":
    case "week":
      this._viewDate = date;
      this.viewMonth();
      break;

    case "month":
    case "quarter":
      this.pickMonth(date, event);
      break;

    case "year":
      break;
  }
};

ChromeCalendar.eventHandler.levelChange = function () {
  switch (this._level) {
    case "day":
    case "week":
      this.viewMonth();
      break;

    case "month":
    case "quarter":
      this.viewYear();
      break;

    case "year":
      this.viewEra();
      break;
  }
};

ChromeCalendar.eventHandler.keydown = function (event) {
  console.log(event.key);
};

ChromeCalendar.eventHandler.doubleKey = function (event) {};

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 (element.hasClass('as-read-only')) return;
    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.as-dropdown-box-common-style').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.sponsorElement = 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.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
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.readOnly = 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;
  }
};
CheckboxInput.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
/***
 *
 * @type {CheckboxInput}
 */

CheckboxInput.property.checked = {
  set: function set(value) {
    this.$input.checked = !!value;

    this._updateCheckedClass();
  },
  get: function get() {
    return this.$input.checked;
  }
};
/***
 *
 * @type {CheckboxInput}
 */

CheckboxInput.property.minus = {
  set: function set(value) {
    if (value) {
      this.addClass('as-has-minus');
    } else {
      this.removeClass('as-has-minus');
    }
  },
  get: function get() {
    return this.hasClass('as-has-minus');
  }
};
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 (event) {
  if (this.readOnly) {
    event.preventDefault();
  }

  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']);
  HTML5_OOP.drillProperty(this, this.$input, ['minus']);
  /***
   * @type {boolean}
   * @name checked
   * @memberOf CheckBox#
   */

  /***
   * @type {boolean}
   * @name minus
   * @memberOf CheckBox#
   */
}

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) {
      this.disabled = !(value === 'false' || value === null);
    },
    get: function get() {
      return this.disabled ? 'true' : 'false';
    },
    remove: function remove() {
      this.disabled = false;
    }
  },
  readonly: {
    set: function set(value) {
      this.readOnly = !(value === 'false' || value === null);
    },
    get: function get() {
      return this.readOnly ? 'true' : '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');
    }
  }
};
CheckBox.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
      this.$input.readOnly = true;
    } else {
      this.addClass('as-read-only');
      this.$input.readOnly = false;
    }
  },
  get: function get() {
    return this.$input.readOnly;
  }
};
/***
 *
 * @type {{}|CheckBox}
 */

CheckBox.eventHandler = {};

CheckBox.eventHandler.click = function (event) {
  if (!HTML5_EventEmitter.hitElement(this.$input, event) && !this.readOnly) {
    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/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 new TemplateString({
      parts: []
    });
  }
};

/* harmony default export */ const JSMaker_TemplateString = (TemplateString);
;// CONCATENATED MODULE: ./node_modules/absol/src/Color/Color.js


function Color_Color(rgba) {
  this.rgba = rgba.slice();
}
/***
 *
 * @returns {string}
 */


Color_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('');
};
/***
 *
 * @returns {string}
 */


Color_Color.prototype.toHex8 = function () {
  return this.rgba.map(function (b) {
    b = b * 255 >> 0;
    return (b < 16 ? '0' : '') + b.toString(16);
  }).join('');
};
/***
 *
 * @returns {string}
 */


Color_Color.prototype.toHex3 = function () {
  return this.rgba.slice(0, 3).map(function (b) {
    b = b * 255 / 17 >> 0;
    return b.toString(16);
  }).join('');
};
/***
 *
 * @returns {string}
 */


Color_Color.prototype.toHex4 = function () {
  return this.rgba.map(function (b) {
    b = b * 255 / 17 >> 0;
    return b.toString(16);
  }).join('');
};
/***
 *
 * @returns {number[]}
 */


Color_Color.prototype.toHSLA = function () {
  return Color_Color.rgbaToHSLA(this.rgba);
};
/***
 *
 * @returns {number[]}
 */


Color_Color.prototype.toHSBA = function () {
  return Color_Color.rgbaToHSBA(this.rgba);
};
/***
 *
 * @returns {number[]}
 */


Color_Color.prototype.toHWBA = function () {
  return Color_Color.rgbaToHWBA(this.rgba);
};
/***
 *
 * @returns {number[]}
 */


Color_Color.prototype.toCMYK = function () {
  return Color_Color.rgbToCMYK(this.rgba);
};
/***
 *
 * @returns {Color}
 */


Color_Color.prototype.getHighContrastColor = 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_Color.fromHSB(h, s, b);
};

Color_Color.prototype.getHightContrastColor = Color_Color.prototype.getHighContrastColor;

Color_Color.prototype.getLuminance = function () {
  var a = this.rgba.slice(0, 3).map(function (v) {
    return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
  });
  return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;
};
/***
 *
 * @param {Color} other
 * @returns {number}
 */


Color_Color.prototype.getContrastWith = function (other) {
  var lum1 = this.getLuminance();
  var lum2 = other.getLuminance();
  var brightest = Math.max(lum1, lum2);
  var darkest = Math.min(lum1, lum2);
  return (brightest + 0.05) / (darkest + 0.05);
};
/***
 *
 * @returns {Color}
 */


Color_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_Color([0, 0, 0, 1]) : new Color_Color([1, 1, 1, 1]);
};
/**
 *
 * @returns {Color}
 */


Color_Color.prototype.clone = function () {
  return new Color_Color(this.rgba.slice());
};
/**
 *
 *  ['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}}'],
 *     ['hex6', '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]}})']
 *     ['cmyk', 'toCMYK()', 'hwba({{x[0] * 100%}}, {{x[1] * 100}}%, {{x[2] * 100}}%)']
 */

/****
 *
 * @param {"rgba"|"rgb"|"hsl"|"hsla"|"hsb"|"hsba"|"hex3"|"hex4"|"hex6"|"hex6"|hex8|"hwb"|"hwba"} mode
 * @returns {string}
 */


Color_Color.prototype.toString = function (mode) {
  mode = mode || 'rgba';
  mode = mode.toLocaleLowerCase();
  return Color_Color.templates[mode](this);
};
/***
 *
 * @param notStandard
 * @param {number[]} hsbWeight
 * @returns {Color}
 */


Color_Color.prototype.nearestNamedColor = function (notStandard, hsbWeight) {
  hsbWeight = hsbWeight || [5, 3, 1];
  var hsba = this.toHSBA();
  var bestMatch = null;
  var dist = 1000;
  Object.keys(Color_Color.namedColors).concat(notStandard ? Object.keys(Color_Color.nonStandarNamedColors) : []).forEach(function (name) {
    var c = Color_Color.parse(Color_Color.namedColors[name] || Color_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_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]}})'], ['cmyk', 'toCMYK()', 'cmyk({{x[0] * 100}}%, {{x[1] * 100}}%, {{x[2] * 100}}%)']].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_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_Color.regexes.percent = new RegExp(Color_Color.regexes.decimal.source + '%');
Color_Color.regexes.rgb = new RegExp(['^rgb\\(', Color_Color.regexes.integer.source, ',', Color_Color.regexes.integer.source, ',', Color_Color.regexes.integer.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i');
Color_Color.regexes.rgbPercent = new RegExp(['^rgb\\(', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i'); // Match colors in format rgb(R, G, B, A), e.g. rgb(255, 0, 128, 0.25).

Color_Color.regexes.rgba = new RegExp(['^rgba\\(', Color_Color.regexes.integer.source, ',', Color_Color.regexes.integer.source, ',', Color_Color.regexes.integer.source, ',', Color_Color.regexes.decimal.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i'); // Match colors in format rgb(R%, G%, B%, A), e.g. rgb(100%, 0%, 28.9%, 0.5).

Color_Color.regexes.rgbaPercent = new RegExp(['^rgba\\(', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.decimal.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsla(H, S%, L%), e.g. hsl(100, 40%, 28.9%).

Color_Color.regexes.hsl = new RegExp(['^hsl\\(', Color_Color.regexes.integer.source, '[deg]*', ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsla(H, S%, L%, A), e.g. hsla(100, 40%, 28.9%, 0.5).

Color_Color.regexes.hsla = new RegExp(['^hsla\\(', Color_Color.regexes.integer.source, '[deg]*', ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.decimal.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsb(H, S%, B%), e.g. hsb(100, 40%, 28.9%).

Color_Color.regexes.hsb = new RegExp(['^hsb\\(', Color_Color.regexes.integer.source, '[deg]*', ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsba(H, S%, B%, A), e.g. hsba(100, 40%, 28.9%, 0.5).

Color_Color.regexes.hsba = new RegExp(['^hsba\\(', Color_Color.regexes.integer.source, '[deg]*', ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.decimal.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i');
Color_Color.regexes.hwb = new RegExp(['^hwb\\(', Color_Color.regexes.integer.source, '[deg]*', ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i'); // Match colors in format hsba(H, S%, B%, A), e.g. hsba(100, 40%, 28.9%, 0.5).

Color_Color.regexes.hwba = new RegExp(['^hwba\\(', Color_Color.regexes.integer.source, '[deg]*', ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.decimal.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i');
Color_Color.regexes.cmyk = new RegExp(['^cmyk\\(', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, ',', Color_Color.regexes.percent.source, '\\)$'].join(Color_Color.regexes.whiteSpace.source), 'i');
/***
 *
 * @param {number} code
 * @param {32|24|16|8} bits
 * @returns {Color}
 */

Color_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_Color([r, g, b, a]);
};
/**
 *
 * @param {number} r
 * @param {number} g
 * @param {number} b
 * @returns {Color}
 */


Color_Color.fromRGB = function (r, g, b) {
  return new Color_Color([r, g, b, 1]);
};
/**
 *
 * @param {number} r
 * @param {number} g
 * @param {number} b
 * @param {number} a
 * @returns {Color}
 */


Color_Color.fromRGBA = function (r, g, b, a) {
  return new Color_Color([r, g, b, a]);
};
/***
 *
 * @param {number} h
 * @param {number} s
 * @param {number} l
 * @returns {Color}
 */


Color_Color.fromHSL = function (h, s, l) {
  var rgba = this.hslaToRGBA([h, s, l, 1]);
  return new Color_Color(rgba);
};
/***
 *
 * @param {number} h
 * @param {number} s
 * @param {number} l
 * @param {number} a
 * @returns {Color}
 */


Color_Color.fromHSLA = function (h, s, l, a) {
  var rgba = this.hslaToRGBA([h, s, l, a]);
  return new Color_Color(rgba);
};
/***
 *
 * @param {number} h
 * @param {number} s
 * @param {number} b
 * @returns {Color}
 */


Color_Color.fromHSB = function (h, s, b) {
  var rgba = this.hsbaToRGBA([h, s, b, 1]);
  return new Color_Color(rgba);
};
/***
 *
 * @param {number} h
 * @param {number} s
 * @param {number} b
 * @param {number} a
 * @returns {Color}
 */


Color_Color.fromHSBA = function (h, s, b, a) {
  var rgba = this.hsbaToRGBA([h, s, b, a]);
  return new Color_Color(rgba);
};
/***
 *
 * @param {number} h
 * @param {number} s
 * @param {number} b
 * @returns {Color}
 */


Color_Color.fromHWB = function (h, s, b) {
  var rgba = this.hwbaToRGBA([h, s, b, 1]);
  return new Color_Color(rgba);
};
/***
 *
 * @param {number} h
 * @param {number} s
 * @param {number} b
 * @param {number} a
 * @returns {Color}
 */


Color_Color.fromHWBA = function (h, s, b, a) {
  var rgba = this.hwbaToRGBA([h, s, b, a]);
  return new Color_Color(rgba);
};

Color_Color.fromCMYK = function (c, m, y, k) {
  var rgba = this.cmykToRGB([c, m, y, k]).concat([0]);
  return new Color_Color(rgba);
};
/**
 * @param {String} text
 * @returns {Color}
 */


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) / 255 : parseFloat(v);
    }));
  } 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) / 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) / 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) / (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) / (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) / (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) / (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) / (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) / (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) / (i == 0 ? 360 : i < 3 ? 100 : 1);
    }));
  } else if (this.regexes.cmyk.test(text)) {
    return this.fromCMYK.apply(this, this.regexes.cmyk.exec(text).slice(1).map(function (v, i) {
      return parseFloat(v) / 100;
    }));
  } 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_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_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_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_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_Color.hsbaToText = function (hsba) {
  return 'hsba(' + (hsba[0] * 360 >> 0) + 'deg, ' + (hsba[1] * 100 >> 0) + '%, ' + (hsba[2] * 100 >> 0) + '%, ' + hsba[3].toFixed(3) + ')';
};

Color_Color.hslaToText = function (hsla) {
  return 'hsla(' + (hsla[0] * 360 >> 0) + 'deg, ' + (hsla[1] * 100 >> 0) + '%, ' + (hsla[2] * 100 >> 0) + '%, ' + hsla[3].toFixed(3) + ')';
};

Color_Color.rgbaToText = function (rgba) {
  return 'rgba(' + (rgba[0] * 255 >> 0) + ', ' + (rgba[1] * 255 >> 0) + ', ' + (rgba[2] * 255 >> 0) + ', ' + rgba[3].toFixed(3) + ')';
};

Color_Color.hsbToText = function (hsba) {
  return 'hsb(' + (hsba[0] * 360 >> 0) + 'deg, ' + (hsba[1] * 100 >> 0) + '%, ' + (hsba[2] * 100 >> 0) + '%)';
};

Color_Color.hslToText = function (hsl) {
  return 'hsl(' + (hsl[0] * 360 >> 0) + 'deg, ' + (hsl[1] * 100 >> 0) + '%, ' + (hsl[2] * 100 >> 0) + '%)';
};

Color_Color.rgbToText = function (rgba) {
  return 'rgb(' + (rgba[0] * 255 >> 0) + ', ' + (rgba[1] * 255 >> 0) + ', ' + (rgba[2] * 255 >> 0) + ')';
};

Color_Color.cmykToText = function (cmyk) {
  return 'cmyk(' + cmyk.map(function (x) {
    return x * 100 + '%';
  }).join(', ') + ')';
};

Color_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_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_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_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_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_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_Color.hwbaToHSBA = function (hwba) {
  return [hwba[0], 1 - hwba[1] / (1 - hwba[2]), 1 - hwba[2], hwba[3]];
};

Color_Color.hsbaToHWBA = function (hsla) {
  return [hsla[0], (1 - hsla[1]) * hsla[2], 1 - hsla[2], hsla[3]];
};

Color_Color.rgbaToHWBA = function (rgba) {
  return this.hsbaToHWBA(this.rgbaToHSBA(rgba));
};

Color_Color.hwbaToRGBA = function (hwba) {
  return this.hsbaToRGBA(this.hwbaToHSBA(hwba));
};

Color_Color.cmykToRGB = function (cmyk) {
  var c = cmyk[0];
  var m = cmyk[1];
  var y = cmyk[2];
  var k = cmyk[3];
  c = c * (1 - k) + k;
  m = m * (1 - k) + k;
  y = y * (1 - k) + k;
  var r = 1 - c;
  var g = 1 - m;
  var b = 1 - y;
  return [r, g, b];
};

Color_Color.rgbToCMYK = function (rgb) {
  var r = rgb[0];
  var g = rgb[1];
  var b = rgb[2];
  var c = 1 - r;
  var m = 1 - g;
  var y = 1 - b;
  var k = Math.min(c, Math.min(m, y));
  c = (c - k) / (1 - k);
  m = (m - k) / (1 - k);
  y = (y - k) / (1 - k);
  c = isNaN(c) ? 0 : c;
  m = isNaN(m) ? 0 : m;
  y = isNaN(y) ? 0 : y;
  k = isNaN(k) ? 0 : k;
  return [c, m, y, k];
};

/* harmony default export */ const src_Color_Color = (Color_Color);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Svg.js






/***
 * @extends Dom
 * @param option
 * @constructor
 */

function Svg(option) {
  HTML5_Dom.call(this, option);
  this.svgNS = "http://www.w3.org/2000/svg";
  Object.defineProperties(this.creator, {
    sattachhook: {
      set: function set() {//do nothing
      },
      get: function get() {
        return HTML5_AttachHook;
      }
    }
  });
  delete this.buidDom;
  this.buildSvg = this.create.bind(this);
}

HTML5_OOP.mixClass(Svg, HTML5_Dom);
Svg.prototype.defaultTag = 'g';

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 depthClone = function depthClone(originElt) {
      var newElt = originElt.cloneNode(); //no deep

      if (!originElt.getAttributeNS) return newElt; //is text node

      var style = getComputedStyle(originElt);
      var key, value;

      for (var i = 0; i < style.length; ++i) {
        key = style[i];
        value = style.getPropertyValue(key);

        if (value && value.length > 0 && value !== 'auto') {
          newElt.style.setProperty(key, value);
        }
      }

      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 (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);
      } else if (tagName === 'input') {
        if (originElt.getAttribute('type') === 'radio' || originElt.getAttribute('type') === 'checkbox') {
          if (originElt.checked) {
            newElt.setAttribute('checked', true);
          }
        } else if (originElt.getAttribute('type') === 'text' || !originElt.getAttribute('type') || originElt.getAttribute('type') === 'number') {
          newElt.setAttribute('value', originElt.value);
        }
      }

      if (needCopyStyle) {
        copyStyleRule(originElt, newElt);
      }

      if (needKeepBackgroundColor) {
        try {
          var bgColor = HTML5_AElement.prototype.getComputedStyleValue.call(originElt, 'background-color');

          if (bgColor) {
            bgColor = src_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-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);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tool/BlurTrigger.js

var STATE_INIT = 0;
var STATE_ATTACHED = 1;
var STATE_RELEASED = 2;
var STATE_FIRED = 3;
var STATE_DESTROYED = 4;
/***
 *
 * @param {AElement[]|AElement} eltList
 * @param {"click"|"mousedown"} eventType
 * @param {function} callback
 * @param {number=} initAfter
 * @param {number=} fireDelay
 * @param {*[]=} args
 * @constructor
 */

function BlurTrigger(eltList, eventType, callback, initAfter, fireDelay, args) {
  this.args = args || [];
  this.callback = callback;
  this.eltTargets = eltList || [];
  this.initAfter = initAfter || 0;
  this.fireDelay = fireDelay || 0;
  this.state = STATE_INIT;
  this.eventType = eventType;
  this['ev_mouse'] = this.ev_mouse.bind(this);
  this['ev_blur'] = this.ev_blur.bind(this);

  if (this.initAfter > 0) {
    setTimeout(this._attach.bind(this));
  } else this._attach();
}

BlurTrigger.prototype._attach = function () {
  if (this.state !== STATE_INIT) return;
  document.addEventListener(this.eventType, this.ev_mouse);
  window.addEventListener('blur', this.ev_blur);
  this.state = STATE_ATTACHED;
};

BlurTrigger.prototype._fire = function () {
  if (this.state !== STATE_RELEASED) return;
  this.callback.apply(this, this.args);
  this.state = STATE_FIRED;
};

BlurTrigger.prototype._release = function () {
  if (this.state !== STATE_ATTACHED) return;
  document.removeEventListener(this.eventType, this.ev_mouse);
  window.removeEventListener('blur', this.ev_blur);
  this.state = STATE_RELEASED;
};

BlurTrigger.prototype.destroy = function () {
  if (this.state === 4) return;
  if (this.state === STATE_ATTACHED) this._release();
  this.state = STATE_DESTROYED;
};

BlurTrigger.prototype._prepareFire = function () {
  if (this.fireDelay > 0) {
    setTimeout(this._fire.bind(this), this.fireDelay);
  } else {
    this._fire();
  }
};

BlurTrigger.prototype.ev_mouse = function (event) {
  var hit = false;

  if (this.eltTargets instanceof Array) {
    hit = this.eltTargets.some(function (elt) {
      return hitElement(elt, event);
    });
  } else if (typeof hit === "function") {
    hit = this.eltTargets.call(this, event.target);
  }

  if (!hit) {
    this._release();

    this._prepareFire();
  }
};

BlurTrigger.prototype.ev_blur = function () {
  setTimeout(function () {
    if (this.state !== STATE_ATTACHED) return;
    var tagName = document.activeElement && document.activeElement.tagName || '';
    tagName = tagName.toLowerCase();

    if (tagName === 'iframe') {
      this._release();

      this._prepareFire();
    }
  }.bind(this), 0);
};

/* harmony default export */ const tool_BlurTrigger = (BlurTrigger);
;// 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.sponsorElement = 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'); // ResizeSystem.update();

      if (this.$container.lastChild && this.$container.lastChild.$items) {
        this.$container.lastChild.$items.forEach(function (itemElt) {
          if (itemElt.autoFixParentSize) {
            itemElt.autoFixParentSize();
          }
        });
      }

      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.hasClass('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.sponsorElement = 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.$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 || {});
};

VMenuItem.prototype.autoFixParentSize = 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.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('absol-menu-item-disabled');
    } else {
      this.removeClass('absol-menu-item-disabled');
    }
  },
  get: function get() {
    return this.hasClass('absol-menu-item-disabled');
  }
};
VMenuItem.property.hidden = {
  set: function set(value) {
    if (value) {
      this.addClass('absol-menu-item-hidden');
    } else {
      this.removeClass('absol-menu-item-hidden');
    }
  },
  get: function get() {
    return this.hasClass('absol-menu-item-hidden');
  }
};
/**
 * @extends AElement
 * @constructor
 */

function VMenu() {}
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.disabled;
        item.activeTab = -1;

        if (i == tabIndex && !item.disabled) {
          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 (Dom_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.blurTrigger = null;
  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.property = {};
HMenuItem.property.disabled = VMenuItem.property.disabled;
HMenuItem.property.hidden = VMenuItem.property.hidden;

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 (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 = {
  /***
   * @this HMenu
   * @param tabIndex
   */
  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.disabled;
      item.activeTab = -1;

      if (i == tabIndex && !item.disabled) {
        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) {
      if (this.blurTrigger) {
        this.blurTrigger.destroy();
      }

      this.blurTrigger = new tool_BlurTrigger([this], "click", this.eventHandler.clickSomewhere, 100, 10);
    } else if (lastValue >= 0 && !(this._activeTab >= 0)) {
      if (this.blurTrigger) {
        this.blurTrigger.destroy();
        this.blurTrigger = null;
      }
    }

    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() {
  var _this = this;

  this._items = [];
  this.$attachhook = Menu_({
    tag: 'attachhook',
    props: {
      prevWidth: 0,
      requestUpdateSize: function requestUpdateSize() {
        var newWidth = _this.getBoundingClientRect().width;

        if (newWidth === _this.$attachhook.prevWidth) return;
        _this.$attachhook.prevWidth = newWidth;
        Array.prototype.forEach.call(_this.childNodes, function (elt) {
          if (elt.autoFixParentSize) {
            elt.autoFixParentSize();
          }
        });
      }
    },
    on: {
      attached: function attached() {
        HTML5_ResizeSystem.add(_this.$attachhook);

        _this.$attachhook.requestUpdateSize();
      }
    }
  }).addTo(this);
  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 _this2 = this;

  var thisM = this;

  while (this.lastChild && this.lastChild !== this.$attachhook) {
    this.lastChild.remove();
  }

  while (this.firstChild && this.firstChild !== this.$attachhook) {
    this.firstChild.remove();
  }

  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 (Dom_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;
  });
  this.$attachhook.prevWidth = 0;
  this.$attachhook.requestUpdateSize();
  $$('img', this).filter(function (x) {
    return !!x.getAttribute('src') && !x.classList.contains('absol-vmenu-button-icon');
  }).forEach(function (elt) {
    waitImageLoaded(elt).then(function () {
      return _this2.$attachhook.requestUpdateSize();
    });
  });
};

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, onSelectItem) {
  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.removeEventListener('click', finish);
    document.removeEventListener('touchcancel', finish);
    document.removeEventListener('touchend', finish);
    document.removeEventListener('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: onSelectItem || 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');
    $$('VMenuItem'.toLowerCase(), vmenu).forEach(function (e) {
      if (e.autoFixParentSize) e.autoFixParentSize();
    });
  }, 30);
  setTimeout(function () {
    document.addEventListener('click', finish);
    document.addEventListener('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, onSelectItem) {
      showed = true;
      self.sync = self.sync.then(function () {
        return new Promise(function (rs) {
          setTimeout(function () {
            self.showContextMenu(self._posCurrent.x, self._posCurrent.y, props, onSelectItem);
            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;
    document.addEventListener('touchmove', thisCT.eventHandler.mousemove);
    document.addEventListener('touchend', thisCT.eventHandler.mousefinish);
    document.addEventListener('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);
      document.addEventListener('mousemove', this.eventHandler.mousemove);
      document.addEventListener('mouseup', this.eventHandler.mousefinish);
      document.addEventListener('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) {
    document.removeEventListener('touchmove', this.eventHandler.mousemove);
    document.removeEventListener('touchend', this.eventHandler.mousefinish);
    document.removeEventListener('touchcancel', this.eventHandler.mousefinish);

    if (this._longPressTimeout > 0) {
      clearTimeout(this._longPressTimeout);
      this._longPressTimeout = -1;
    }
  } else {
    document.removeEventListener('mousemove', this.eventHandler.mousemove);
    document.removeEventListener('mouseup', this.eventHandler.mousefinish);
    document.removeEventListener('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);
// 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 = null;
  this._minute = null;
  HTML5_OOP.drillProperty(this, this, 'dayOffset', 'value');
  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 = ACore_$('.as-chrome-time-picker-btn[data-value="AM"]', this).on('click', this.eventHandler.clickAM);
  this.$pmBtn = ACore_$('.as-chrome-time-picker-btn[data-value="PM"]', this).on('click', this.eventHandler.clickPM);
  this.scrollIntoSelected();
  this.hour = null;
  this.minute = null;
  this.s24 = false;
  $$('.as-chrome-time-picker-scroller', this).forEach(this._makeScroller.bind(this));
  /***
   * @memberOf ChromeTimePicker#
   * @type {number}
   * @name min
   */
}

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 = ACore_$('.as-chrome-time-picker-scroller-up', rootElt);
  var downBtn = ACore_$('.as-chrome-time-picker-scroller-down', rootElt);
  var listElt = ACore_$('.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) {
    if (isRealNumber(value)) {
      value = Math.min(23, Math.max(0, Math.floor(value) % 24));
    } else {
      value = null;
    }

    var prevVal = this._hour;

    if (prevVal !== null) {
      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;

    if (prevVal !== null) {
      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');
      }
    } else {
      this.$pmBtn.removeClass('as-selected');
      this.$amBtn.removeClass('as-selected');
    }
  },
  get: function get() {
    return this._hour;
  }
};
ChromeTimePicker.property.minute = {
  set: function set(value) {
    if (isRealNumber(value)) {
      value = Math.min(59, Math.max(0, Math.floor(value) % 60));
    } else {
      value = null;
    }

    var prevVal = this._minute;

    if (prevVal !== null) {
      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;

    if (prevVal !== null) {
      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.value = {
  set: function set(value) {
    if (!isRealNumber(value) && !(value instanceof Date)) {
      value = null;
    }

    if (value && value.getTime) {
      value = value.getTime() - beginOfDay(value).getTime();
      if (!isRealNumber(value)) value = null;
    } else if (isRealNumber(value)) {
      value = Math.min(MILLIS_PER_DAY - 1, Math.max(0, value % MILLIS_PER_DAY));
    }

    if (isRealNumber(value)) {
      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;
    }

    this.domSignal.emit('request_scroll_into_selected');
  },
  get: function get() {
    var res = this._hour * MILLIS_PER_HOUR + this._minute * MILLIS_PER_MINUTE;
    return isRealNumber(res) ? res : null;
  }
};
ChromeTimePicker.property.min = {
  set: function set(value) {},
  get: function get() {}
};
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.hasClass('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 (isRealNumber(this.hour)) {
    if (this.hour < 12) this.hour += 12;
  } else {
    this.hour = 12;
  }

  this.notifyChange(event);
};

ChromeTimePicker.eventHandler.clickAM = function (event) {
  if (isRealNumber(this.hour)) {
    if (this.hour >= 12) this.hour -= 12;
  } else {
    this.hour = 0;
  }

  this.notifyChange(event);
};

absol_acomp_ACore.install(ChromeTimePicker);
/* harmony default export */ const js_ChromeTimePicker = (ChromeTimePicker);
// 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']);
  /***
   * @name followTarget
   * @type {AElement}
   * @memberOf Follower#
   */
}

Follower.prototype.cancelWaiting = function () {
  Array.prototype.forEach.call(this.childNodes, function (elt) {
    if (elt.emit && elt.isSupportedEvent('attached')) {
      elt.cancelWaiting();
    }
  });
};

Follower.prototype.revokeResource = function () {
  this.cancelWaiting();
  this.followTarget = null;
};

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();
  });
};

Follower.prototype.addTo = function (elt) {
  if (elt.addChild) {
    elt.addChild(this);
  } else if (elt.appendChild) {
    elt.appendChild(this);
  }

  if (this.isDescendantOf(document.body)) {
    Array.prototype.forEach.call(this.childNodes, function (elt) {
      if (elt.emit && elt.isSupportedEvent('attached')) {
        elt.resetState();
        elt.emit('attached');
      }
    });
  }

  return this;
};

Follower.prototype.selfRemove = function () {
  Array.prototype.forEach.call(this.childNodes, function (elt) {
    if (elt.emit && elt.isSupportedEvent('attached')) {
      elt.cancelWaiting();
    }
  });
  this.remove();
  return this;
}; //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.prototype.revokeResource = function () {
  this.$attachhook.cancelWaiting();
  this.followTarget = null;

  while (this.lastChild) {
    revokeResource(this.lastChild);
    this.removeChild(this.lastChild);
  }
};

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._lastAnchor = 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/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/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';
  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 = ACore_$('.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 = ACore_$('.as-date-time-input-icon-btn', this).on('click', this.eventHandler.clickPickerBtn);
  this.$clearBtn = ACore_$('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'
      }
    }, {
      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',
  HH: 'H',
  H: 'H'
};
/***
 *
 * @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()
  };
  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.H && isRealNumber(tkDict.H.value)) {
    H = tkDict.H.value;
  } else 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 && (tkDict.a.value === 'AM' || tkDict.a.value === 'PM')) {
    if (equalMin) {}
  } else {
    equalMin = false;
    equalMax = false;
  }

  this.$text.value = this._applyTokenDict(this._format, tkDict);
};

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,
      HH: 0,
      H: 0,
      m: 0,
      mm: 0
    }[token.ident];
    var rqMax = {
      d: 31,
      dd: 31,
      M: 12,
      MM: 12,
      y: 2089,
      yyyy: 2089,
      h: 12,
      hh: 12,
      HH: 23,
      H: 23,
      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.hasClass('as-disabled');
  }
};
DateTimeInput.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');
    }

    this.value = this.value; //update
  },
  get: function get() {
    return this.hasClass('as-must-not-null');
  }
};
DateTimeInput.property.format = {
  set: function set(value) {
    value = value || 'dd/MM/yyyy HH:mm';
    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.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
DateTimeInput.property.text = {
  get: function get() {
    return this.$text.value;
  }
};
DateTimeInput.eventHandler = {};

DateTimeInput.eventHandler.mouseUpInput = function () {
  if (!this.readOnly) {
    this.domSignal.emit('request_auto_select');
  }
};

DateTimeInput.eventHandler.mouseDownInput = function () {
  if (!this.readOnly && document.activeElement === this.$text) {
    this._correctingCurrentToken();
  }
};

DateTimeInput.eventHandler.dblclickInput = function (event) {
  event.preventDefault();
};
/***
 *
 * @param {KeyboardEvent} event
 */


DateTimeInput.eventHandler.keydown = function (event) {
  var kbId = keyboardEventToKeyBindingIdent(event);

  if (this.readOnly) {
    if (!kbId.match(/^arrow/) && !kbId.match(/^ctrl-[ca]/)) {
      event.preventDefault();
    }

    return;
  }

  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 "HH":
          case 'H':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.H = event.key === 'ArrowUp' ? 1 : 12;
            } else {
              this._editingData.H = (value + (event.key === 'ArrowUp' ? 1 : 23)) % 24;
            }

            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;

        case 'HH':
        case 'H':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = STATE_EDITED;

          if (dVal > 2) {
            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;

        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();
  }
};

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.share.pickedValeText);

  if (tkDict.h) {
    tkDict.h.value = 1 + (hour + 11) % 12;

    if (tkDict.a) {
      tkDict.a.value = hour >= 12 ? "PM" : 'AM';
    }
  }

  if (tkDict.H) {
    tkDict.H.value = hour;
  }

  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'
    });

    if (this.share.$calendar.$attachHook) {
      this.share.$calendar.$attachHook.cancelWaiting();
    }

    this.share.$cancelBtn = ACore_({
      tag: 'a',
      "class": 'as-select-list-box-cancel-btn',
      attr: {
        "data-ml-key": 'txt_cancel'
      }
    });
    this.share.$okBtn = ACore_({
      tag: 'a',
      "class": 'as-select-list-box-ok-btn',
      attr: {
        "data-ml-key": 'txt_ok'
      }
    });
    this.share.$follower = ACore_({
      tag: js_Follower.tag,
      "class": ['as-date-time-input-follower', 'as-dropdown-box-common-style'],
      child: [{
        "class": 'as-date-time-input-picker-ctn',
        child: [this.share.$calendar, this.share.$timePicker]
      }, {
        "class": 'as-dropdown-box-footer',
        child: [{
          "class": 'as-dropdown-box-footer-right',
          child: [this.share.$okBtn, this.share.$cancelBtn]
        }]
      }]
    });
    this.share.$follower.cancelWaiting();
  }
};

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.share.$follower.sponsorElement = 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);

  if (this.share.$calendar.$attachHook) {
    this.share.$calendar.$attachHook.emit('attached');
  }

  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 if (tkDict.H && isRealNumber(tkDict.H.value)) {
    this.share.$timePicker.hour = tkDict.H.value;
  } else {
    this.share.$timePicker.hour = null;
  }

  this.share.$timePicker.s24 = !!tkDict.H;

  if (tkDict.m && !isNaN(tkDict.m.value)) {
    this.share.$timePicker.minute = tkDict.m.value;
  } else {
    this.share.$timePicker.minute = null;
  }

  this.share.$timePicker.scrollIntoSelected();
  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.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);
  document.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;
/***
 *
 * @param {Date} date
 * @param level
 * @returns {Date|null}
 */

var dateByLevel = function dateByLevel(date, level) {
  if (!date) return null;

  switch (level) {
    case 'week':
      return beginOfWeek(date);

    case 'month':
      return datetime_beginOfMonth(date);

    case 'quarter':
      return beginOfQuarter(date);

    case 'year':
      return beginOfYear(date);

    case 'date':
    default:
      return beginOfDay(date);
  }
};

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.startDayOfWeek = getDefaultFirstDayOfWeek();
  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 = new HTML5_DelaySignal();
  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'
    }, {
      tag: 'button',
      "class": 'as-date-input-icon-ctn',
      child: 'span.mdi.mdi-calendar'
    }]
  });
};
/**
 * @param {String} text
 */


DateInput2.prototype._verifyFormat = function (text) {
  var regex = new RegExp(DATE_TIME_TOKEN_RGX.source, 'g');
  var tokens = text.match(regex);
  var map = {
    d: ['dd', 'd'],
    M: ['M', 'MM'],
    y: ['yy', 'yyyy'],
    Q: ['Q', 'QQ'],
    w: ['w', 'ww']
  };
  var rules = ['dMy', 'My', 'y', 'wy', 'Qy'].map(function (r) {
    r = r.split('');
    r.sort();
    return r.join('');
  });
  var matched = tokens.reduce(function (ac, cr) {
    Object.keys(map).some(function (key) {
      if (map[key].indexOf(cr) >= 0) {
        ac.push(key);
        return true;
      }

      return false;
    });
    return ac;
  }, []);
  matched.sort();
  matched = matched.join('');
  return rules.indexOf(matched) >= 0;
};

DateInput2.prototype._notifyIfChange = function (event) {
  var oldV = this._explicit(this._lastValue);

  var newV = this._explicit(this._value);

  if (!oldV !== !newV || oldV && newV && compareDate(oldV, newV) !== 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 (tkDict.y && !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 (tkDict.M && !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);
    }
  }

  if (tkDict.w && !isNaN(tkDict.w.value)) {
    if (tkDict.y && !isNaN(tkDict.y.value)) {
      tkDict.w.value = Math.max(1, Math.min(tkDict.w.value, 1 + weekIndexOf(prevDate(new Date(tkDict.y.value + 1, 0, 1)), false, this._startDayOfWeek)));
    }
  }

  this.$text.value = this._applyTokenDict(this._format, tkDict);
};

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,
    w: 1,
    ww: 1,
    Q: 1,
    QQ: 1
  }[token.ident];
  var rqMax = {
    d: 31,
    dd: 31,
    M: 12,
    MM: 12,
    y: 2089,
    yyyy: 2089,
    w: 54,
    ww: 54,
    Q: 4,
    QQ: 4
  }[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;

  if (tkDict.w && tkDict.y) {
    if (isRealNumber(tkDict.w.value) && isRealNumber(tkDict.y.value)) date = weekInYear(y, tkDict.w.value - 1);
  } else if (tkDict.Q && tkDict.y) {
    if (isRealNumber(tkDict.Q.value) && isRealNumber(tkDict.y.value)) date = new Date(y, (tkDict.Q.value - 1) * 3, 1);
  } else {
    date = new Date(y, m, d);
  }

  if (!date || isNaN(date.getTime())) {
    this._value = null;
  } else {
    this._value = date;
  }

  this._updateNullClass();
};

DateInput2.prototype._explicit = function (value) {
  value = value || null;

  if (this.notNull) {
    value = value || new Date();
  } else if (!value) return null;

  var time = value.getTime();
  time = Math.max(this._min.getTime(), time);
  time = Math.min(this._max.getTime(), time);
  return dateByLevel(new Date(time), this.calendarLevel);
};

DateInput2.prototype._applyTokenDict = function (format, dict, debug) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var tokenMap = this.tokenMap;
  var res = format.replace(rgx, function (full, g1, g2, sourceText) {
    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;
  });
  return res;
};

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',
  ww: 'w',
  Q: 'Q',
  QQ: 'Q'
};
/**
 * @type {DateInput2}
 */

DateInput2.eventHandler = {};

DateInput2.eventHandler.keydown = function (event) {
  if (this.readOnly) {
    if (!event.ctrlKey || event.key !== 'c') {
      event.preventDefault();
    }

    return;
  }

  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 'w':
          case 'ww':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.w = event.key === 'ArrowUp' ? 1 : 54;
            } else {
              this._editingData.w = 1 + (value + (event.key === 'ArrowUp' ? 0 : 52)) % 54;
            }

            newTokenText = zeroPadding(this._editingData.w, token.ident.length);
            token.replace(newTokenText, true);
            break;

          case 'Q':
          case 'QQ':
            value = parseInt(token.text);

            if (isNaN(value)) {
              this._editingData.Q = event.key === 'ArrowUp' ? 1 : 4;
            } else {
              this._editingData.Q = 1 + (value + (event.key === 'ArrowUp' ? 0 : 2)) % 4;
            }

            newTokenText = zeroPadding(this._editingData.Q, token.ident.length);
            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 'w':
          case 'ww':
          case 'Q':
          case 'QQ':
            token.replace(zeroPadding(1, 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 'w':
        case 'ww':
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = DateInput2_STATE_EDITED;
          this._editingData.d = dVal;

          if (dVal > 6) {
            this._editNextToken();
          }

          break;

        case 'Q':
        case 'QQ':
          dVal = Math.max(1, Math.min(dVal, 4));
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.state = DateInput2_STATE_EDITED;
          this._editingData.Q = dVal;

          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 'ww':
        case 'w':
          dVal = (parseInt(token.text.split('').pop()) || 0) * 10 + dVal;
          dVal = Math.max(1, Math.min(54, dVal));
          this._editingData.d = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true);

          this._editNextToken();

          break;

        case 'Q':
        case 'QQ':
          dVal = Math.max(1, Math.min(dVal, 4));
          token.replace(zeroPadding(dVal, token.ident.length), true);
          this._editingData.Q = dVal;

          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) {
  var oldV = this._explicit(this._lastValue);

  this.value = value;

  var newV = this._explicit(this._value);

  if (!oldV !== !newV || oldV && newV && compareDate(oldV, newV) !== 0) {
    this.emit('change', {
      type: 'change',
      target: this,
      value: this._value
    }, this);
  }
};

DateInput2.eventHandler.clickCalendarBtn = function () {
  if (this.readOnly) return;

  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._explicit(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(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (full) {
      if (full === 'mm' || full === 'MMM' || full === 'MMMM' || full === 'mmm' || full === 'mmmm') return 'MM';
      if (full === 'm') return 'M';
      return full;
    });

    if (!this._verifyFormat(value)) {
      value = 'dd/MM/yyyy';
      console.error("Invalid date format: " + value);
    }

    this._format = value;
    this._formatTokens = this._format.match(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g')) || [];
    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.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
      this.$input.readOnly = true;
    } else {
      this.removeClass('as-read-only');
      this.$input.readOnly = false;
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
DateInput2.property.text = {
  get: function get() {
    return this.$input.value;
  }
};
DateInput2.property.calendarLevel = {
  /***
   * @memberOf DateInput2
   * @name calendarLevel
   * @type {number}
   */
  get: function get() {
    if (this._formatTokens.indexOf('d') >= 0 || this._formatTokens.indexOf('dd') >= 0) return 'day';
    if (this._formatTokens.indexOf('w') >= 0 || this._formatTokens.indexOf('ww') >= 0) return 'week';
    if (this._formatTokens.indexOf('M') >= 0 || this._formatTokens.indexOf('MM') >= 0) return 'month';
    if (this._formatTokens.indexOf('Q') >= 0 || this._formatTokens.indexOf('QQ') >= 0) return 'quarter';
    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');
    }

    this.value = this.value; //update
  },
  get: function get() {
    return this.hasClass('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', 'as-dropdown-box-common-style']
  });
  if (this.share.$calendar.$attachHook) this.share.$calendar.$attachHook.cancelWaiting();
  this.share.$follower = DateInput2_({
    tag: 'follower',
    "class": 'as-date-input-follower',
    child: this.share.$calendar
  });
  this.share.$follower.cancelWaiting();
};

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.$follower.sponsorElement = this;
  if (this.share.$calendar.$attachHook) this.share.$calendar.$attachHook.emit('attached');
  this.share.$calendar.level = this.calendarLevel;
  this.share.$calendar.startDayOfWeek = this.startDayOfWeek || 0;
  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/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 = (/* unused pure expression or super */ null && (['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];
}
/**
 * @param {number}arg1
 * @param {number=}arg2
 * @also
 * @param {number} arg1
 * @returns {string}
 */

function randomPhrase(arg1, arg2) {
  var limitLength = arguments[arguments.length - 1];
  var minLength = 1;
  if (arguments.length > 1) minLength = arguments[0];
  if (!limitLength) limitLength = 50;
  var length = Math.ceil((Math.random() * (limitLength - minLength) + minLength) / 7);
  return new Array(length).fill(null).map(randomWord).reduce(function (ac, cr) {
    if (ac.length + cr.length < limitLength || ac.length < minLength) {
      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(function (value) {
    return randomPhrase(value);
  }).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(limitLength) {
  if (!limitLength) limitLength = 1000;
  var length = Math.ceil(Math.random() * limitLength / 200);
  return new Array(length).fill(null).map(function (value) {
    return randomSentence(value);
  }).reduce(function (ac, cr) {
    if (ac.length + cr.length < limitLength) {
      ac.parts.push(cr);
    }

    return ac;
  }, {
    parts: [],
    length: 0
  }).parts.join(' ');
}
;// 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.hasClass('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 _this = this;

  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);
  this.on('click', function (event) {
    var toggleBound = _this.$toggleIcon.getBoundingClientRect();

    if (toggleBound.width > 0 && event.clientX <= toggleBound.right) {
      _this.emit('presstoggle', copyEvent(event, {
        target: thisEN,
        type: 'pressremove'
      }), _this);
    } else if (!HTML5_EventEmitter.hitElement(thisEN.$removeIcon, event)) {
      _this.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) {
      var newE;

      if (HTML5_Dom.isDomNode(value)) {
        newE = value;
      } else {
        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.hasClass('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;
  this.name = '';
}
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.hasClass('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.hasClass && child.hasClass('absol-drop-panel')) {
      childBound = child.getBoundingClientRect();
      sumHeight += childBound.height;
    }
  }

  return bound.height - sumHeight;
};

DropPanelStack.prototype.addChild = function (child) {
  var self = this;

  if (child.hasClass('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|absol\.ddns\.net)$/) || location.hostname.match(/^localhost$/)) 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/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;
  }
};
FlexiconInput.property.readOnly = {
  set: function set(value) {
    value = !!value;
    this.$input.readOnly = value;

    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
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
  //adapter

  forwardEvent(this, 'inactive', 'deactive');
}

Frame.tag = 'frame';

Frame.render = function () {
  return Frame_({
    "class": 'absol-frame',
    attr: {
      id: randomIdent(12)
    },
    extendEvent: ['attached', 'detached', 'active', 'inactive'] // inactive 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 = []; //adapt

  forwardEvent(this, 'inactiveframe', 'deactiveframe');
  forwardMethod(this, 'notifyDeactiveFrame', 'notifyInactiveFrame');
}

FrameView.tag = 'frameview';

FrameView.render = function () {
  return FrameView_({
    "class": 'absol-frame-view',
    extendEvent: ['activeframe', 'inactiveframe']
  });
};

FrameView.prototype.addChild = function (elt) {
  if (elt.hasClass && elt.hasClass('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.hasClass && elt.hasClass('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.hasClass && elt.hasClass('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.hasClass('absol-active')) {
        ctnElt.addClass('absol-active');
        this.notifyActiveFrame(elt);
      } // else do nothing

    } else {
      if (ctnElt.hasClass('absol-active')) {
        ctnElt.removeClass('absol-active');
        this.notifyInactiveFrame(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.notifyInactiveFrame = function (frameElt, originEvent) {
  this.emit('inactiveframe', {
    type: 'inactiveframe',
    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);
/* 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.property.preventClosing = {
  set: function set(value) {
    if (value) {
      this.addClass('as-prevent-closing');
    } else {
      this.removeClass('as-prevent-closing');
    }

    if (this.$parent && this.$parent.notifyUpdatePreventClosing) {
      this.$parent.notifyUpdatePreventClosing(this);
    }
  },
  get: function get() {
    return this.hasClass('as-prevent-closing');
  }
};
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.$;
/***
 * @extends AElement
 * @constructor
 */

function TabButton() {
  var thisTB = this;
  this._icon = null;
  this.$extIconCtn = TabButton_$('.as-tab-bar-button-ext-icon-ctn', 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'.toLowerCase();

TabButton.render = function () {
  return TabButton_({
    tag: 'button',
    "class": 'absol-tabbar-button',
    extendEvent: ['close', 'active'],
    id: randomIdent(20),
    child: [{
      "class": 'as-tab-bar-button-ext-icon-ctn'
    }, {
      "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.icon = {
  set: function set(value) {
    value = value || null;
    this._icon = value;
    this.$extIconCtn.clearChild();

    if (this._icon) {
      this.$extIconCtn.addChild(TabButton_(value));
    }
  },
  get: function get() {
    return this._icon;
  }
};
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.hasClass('absol-tabbar-button-modified');
  }
};
TabButton.property.preventClosing = {
  set: function set(value) {
    if (value) {
      this.addClass('as-prevent-closing');
    } else {
      this.removeClass('as-prevent-closing');
    }
  },
  get: function get() {
    return this.hasClass('as-prevent-closing');
  }
};
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.$;
/***
 * @extends HScroller
 * @constructor
 */

function TabBar() {
  this.$parent = null;
  this.$addBtn = TabBar_({
    tag: 'button',
    "class": 'as-tab-bar-add-btn',
    child: 'span.mdi.mdi-plus',
    on: {
      click: function () {
        if (this.$parent) {
          this.$parent.emit('pressaddtab', {
            type: 'pressaddtab',
            target: this.$parent
          }, this.$parent);
        }
      }.bind(this)
    }
  });
  this.addChild(this.$addBtn);
  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;

    if (value.tabIcon) {
      props.icon = value.tabIcon;
    }

    if (value.preventClosing) {
      props.preventClosing = value.preventClosing;
    }
  }

  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();
        }
      }
    }
  });

  this.addChildBefore(tabButton, this.$addBtn);
  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.$parent = this;
  this.$tabbar.on({
    close: TabView.eventHandler.closeTab.bind(thisTV),
    active: TabView.eventHandler.activeTab.bind(thisTV)
  });
  this._frameHolders = [];
  this._history = [];
  forwardEvent(this, 'inactivetab', 'deactivetab');
}

TabView.tag = 'TabView'.toLowerCase();

TabView.render = function () {
  return TabView_({
    "class": 'absol-tabview',
    extendEvent: ['activetab', 'inactivetab', 'removetab', 'requestremovetab', 'pressaddtab'],
    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 needDeactivatedHolder = [];
  var needActiveHolder = [];

  this._frameHolders.forEach(function (holder) {
    if (holder.containerElt.hasClass('absol-tabview-container-hidden')) {
      if (holder.id == id) {
        needActiveHolder.push(holder);
      }
    } else {
      if (holder.id != id) {
        needDeactivatedHolder.push(holder);
      }
    }
  });

  needDeactivatedHolder.forEach(function (holder) {
    holder.containerElt.addClass('absol-tabview-container-hidden');
    holder.tabFrame.emit('inactive', {
      type: 'inactive',
      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,
      from: needDeactivatedHolder[0] && needDeactivatedHolder[0].tabFrame || null,
      to: holder.tabFrame
    }, 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: 'inactive',
          target: holder.tabFrame,
          id: holder.id,
          userActive: !!userActive,
          tabButton: holder.tabButton,
          holder: holder
        };
        if (!holder.containerElt.hasClass('absol-tabview-container-hidden')) holder.tabFrame.emit('inactive', eventData2, holder.tabFrame);
        eventData2.type = 'inactivetab';
        eventData2.target = self;
        if (!holder.containerElt.hasClass('absol-tabview-container-hidden')) self.emit('inactivetab', 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.notifyUpdatePreventClosing = function (elt) {
  var holder = this.findHolder(elt);

  if (holder) {
    holder.tabButton.preventClosing = elt.preventClosing;
  }
};

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 tabIcon = elt.tabIcon;
    var modified = elt.modified;
    var preventClosing = elt.preventClosing;
    var tabButton = self.$tabbar.addTab({
      name: name,
      id: id,
      desc: desc,
      modified: modified,
      tabIcon: tabIcon,
      preventClosing: preventClosing
    });
    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');
    HTML5_OOP.drillProperty(holder, elt, 'preventClosing');
    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.hasClass('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');
  }

  this.addStyle('--single-page-scroller-height', this.$scroller.clientHeight + 'px');
  if (this.isSupportedEvent('sizechange')) this.emit('sizechange', {
    type: 'sizechange',
    target: this
  }, this);
};

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.$;
/**
 * @extends AElement
 * @constructor
 */

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';
  /**
   * @type {number}
   * @name major
   * @memberof VRuler#
   */

  /**
   * @type {number}
   * @name spacing
   * @memberof VRuler#
   */

  /**
   * @type {boolean}
   * @name inverse
   * @memberof VRuler#
   */
}

VRuler.tag = 'vruler';

VRuler.render = function () {
  return VRuler_({
    "class": 'as-vruler'
  });
};

VRuler.prototype.revokeResource = function () {
  this.$measureTarget = null;
  this.$attachHook.cancelWaiting();
  revokeResource(this.$lines);
  revokeResource(this.$numbers);
  this.clearChild();
  this.revokeResource = noop;
};

VRuler.prototype.measureElement = function (elt) {
  if (typeof elt == "string") elt = VRuler_$(elt);
  this.$measureTarget = elt;
  this.update();
};

VRuler.prototype.update = function () {
  console.log('update');
  var fontSize = this.getFontSize() || 14;
  var measureBound;
  var bound = this.getBoundingClientRect();
  if (!bound.width || !bound.height) return;
  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 startOffset = (measureBound[this._valueFloat] - contentBound[this._valueFloat]) * (this.inverse ? -1 : 1) % this._spacing;
  if (startOffset < 0) startOffset += this._spacing;
  var lineIndexOffset = Math.round(((contentBound[this._valueFloat] - measureBound[this._valueFloat]) * (this.inverse ? -1 : 1) + startOffset) / this._spacing);
  var lineCount = Math.floor((contentBound.height - startOffset) / 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 + lineIndexOffset) % this._major == 0) {
      lineElt.addClass('major');
    } else {
      lineElt.removeClass('major');
    }

    lineElt.addStyle(this._valueFloat, startOffset + this._spacing * i - 0.5 + 'px');
  }

  try {
    while (this._viewingLineCount < lineCount) {
      this.$lines[this._viewingLineCount++].addTo(this);
    }

    while (this._viewingLineCount > lineCount) {
      this.$lines[--this._viewingLineCount].remove();
    }
  } catch (e) {}

  var numberCount = Math.floor((lineCount + lineIndexOffset - 1) / this._major) - Math.ceil(lineIndexOffset / this._major) + 1;

  while (this.$numbers.length < numberCount) {
    this.$numbers.push(VRuler_('.as-vruler-major-number'));
  }

  var numberElt;
  var number;
  var majorStartOfset = startOffset;

  if (lineIndexOffset > 0) {
    majorStartOfset += (this._major - lineIndexOffset % this._spacing) * this._spacing;
  } else {
    majorStartOfset += (this._major - (this._spacing + lineIndexOffset % this._spacing)) * this._spacing;
  }

  for (i = 0; i < numberCount; ++i) {
    number = (Math.ceil(lineIndexOffset / 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);
  }

  try {
    while (this._viewingNumberCount > numberCount) {
      this.$numbers[--this._viewingNumberCount].remove();
    }
  } catch (e) {}
};

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);
/* 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 _this = this;

  this.$attachHook = HRuler_('attachhook').on('attached', function () {
    _this.requestUpdateSize = _this.update.bind(_this);
    HTML5_ResizeSystem.add(_this.$attachHook);

    _this.requestUpdateSize();
  }).addTo(this);
  this.$attachHook.requestRevokeResource = this.revokeResource.bind(this);
  this.$lines = [];
  this.$numbers = [];
  this._viewingNumberCount = 0;
  this._viewingLineCount = 0;
  this._spacing = 10;
  this._major = 10;
  this.$measureTarget = null;
  this._valueFloat = 'left';
  /**
   * @type {number}
   * @name major
   * @memberof HRuler#
   */

  /**
   * @type {number}
   * @name spacing
   * @memberof HRuler#
   */

  /**
   * @type {boolean}
   * @name inverse
   * @memberof HRuler#
   */
}

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();
  if (!bound.width || !bound.height) return;
  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 startOffset = (measureBound[this._valueFloat] - contentBound[this._valueFloat]) * (this.inverse ? -1 : 1) % this._spacing;
  if (startOffset < 0) startOffset += this._spacing;
  var lineIndexOffset = Math.round(((contentBound[this._valueFloat] - measureBound[this._valueFloat]) * (this.inverse ? -1 : 1) + startOffset) / this._spacing);
  var lineCount = Math.floor((contentBound.width - startOffset) / this._spacing) + 1;
  lineCount = Math.max(0, lineCount);

  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 + lineIndexOffset) % this._major === 0) {
      lineElt.addClass('major');
    } else {
      lineElt.removeClass('major');
    }

    lineElt.addStyle(this._valueFloat, startOffset + 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 + lineIndexOffset - 1) / this._major) - Math.ceil(lineIndexOffset / this._major) + 1;

  while (this.$numbers.length < numberCount) {
    this.$numbers.push(HRuler_('.as-hruler-major-number'));
  }

  var numberElt;
  var number;
  var majorStartOfset = startOffset;

  if (lineIndexOffset > 0) {
    majorStartOfset += (this._major - lineIndexOffset % this._spacing) * this._spacing;
  } else {
    majorStartOfset += (this._major - (this._spacing + lineIndexOffset % this._spacing)) * this._spacing;
  }

  for (i = 0; i < numberCount; ++i) {
    number = (Math.ceil(lineIndexOffset / 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.prototype.revokeResource = function () {
  this.$attachHook.cancelWaiting();
  this.$measureTarget = null;
  revokeResource(this.$lines);
  revokeResource(this.$numbers);
  this.clearChild();
  this.revokeResource = noop;
};

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/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) {
  type = type || 'text/plain';
  var mineTye = type.split('/').length === 2 ? type : Converter_ext2MineType[type] || 'text/plain';
  return new Blob([text], {
    type: mineTye
  });
}
;// 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 Text_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 Dom.ShareInstance._({
        child: {
          tag: 'br'
        }
      });
    } else {
      return 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-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);
  }

  Text_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();
  Text_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 {
        Text_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;
  Text_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;
  Text_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/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-acomp/js/tokenizeiput/TITextController.js





var EMPTY_2_SPACES = String.fromCharCode(0x2003);
var emojiCSSLoaded = false;

function loadEmojiCSS() {
  if (emojiCSSLoaded) return;
  emojiCSSLoaded = true;
  HTML5_Dom.documentReady.then(function () {
    var styleSheet = {};

    for (var name in EmojiAnimByIdent) {
      styleSheet['.as-emoji-token[data-text="' + name + '"]'] = {
        'background-image': 'url(' + js_EmojiPicker.assetRoot + '/static/x20/' + EmojiAnimByIdent[name][1] + ')'
      };
    }

    buildCss(styleSheet);
  });
}
/***
 *
 * @param {TokenizeHyperInput} elt
 * @constructor
 */


function TITextController(elt) {
  loadEmojiCSS();
  this.elt = elt;
}

TITextController.prototype.setText = function (text) {
  this.elt.clearChild();
  this.elt.addChild(text2ContentElements(text, {
    tagMap: this.elt.tagMap
  }));
  this.elt.addChild(this.elt.$br);
};

TITextController.prototype.getText = function () {
  var nodes = Array.prototype.slice.call(this.elt.childNodes);

  if (isNewLine(nodes[nodes.length - 1])) {
    nodes.pop();
  }

  return nodes.map(function (node) {
    if (isText(node)) {
      return node.data;
    } else if (isToken(node)) {
      return node.getAttribute('data-text') || '';
    } else if (isNewLine(node)) return '\n';
  }).join('');
};
/***
 *
 * @param {Range=} range default: previous selected range
 */


TITextController.prototype.getTextByRange = function (range) {
  range = range || this.elt.selectionCtrl.prevRange;
  if (!range) return this.getText();
  var nodes = Array.prototype.slice.call(this.elt.childNodes);
  if (isNewLine(nodes[nodes.length - 1])) nodes.pop();
  var startCtn = range.startContainer;
  var startOffset = range.startOffset;
  var endCtn = range.endContainer;
  var endOffset = range.endOffset;

  if (startCtn === this.elt) {
    startCtn = this.elt.childNodes[startOffset - 1];
    startOffset = 0;
  } else if (isTokenText(startCtn)) {
    startCtn = startCtn.parentElement;
  }

  if (endCtn === this.elt) {
    endCtn = this.elt.childNodes[endOffset];
    endOffset = 0;
  } else if (isTokenText(endCtn)) {
    endCtn = endCtn.parentElement;
  }

  if (startCtn === endCtn) {
    if (isToken(startCtn)) {
      return startCtn.getAttribute('data-text');
    } else if (isText(startCtn)) {
      return startCtn.data.substring(startOffset, endOffset);
    }

    return '';
  }

  var res = '';
  var node;
  var started = false;

  for (var i = 0; i < nodes.length; ++i) {
    node = nodes[i];

    if (started) {
      if (endCtn === node) {
        if (isToken(endCtn)) {
          res += node.getAttribute('data-text');
        } else if (isText(node)) {
          res += node.data.substring(0, endOffset);
        }

        break;
      } else {
        if (isToken(node)) {
          res += node.getAttribute('data-text');
        } else if (isText(node)) {
          res += node.data;
        } else if (isNewLine(node)) {
          res += '\n';
        }
      }
    } else {
      if (startCtn === node) {
        started = true;

        if (isText(node)) {
          res += node.data.substring(startOffset);
        } else if (isToken(node)) {
          if (startOffset === 0) {
            res += node.getAttribute('data-text');
          }
        }
      }
    }
  }

  return res;
};

TITextController.prototype.applyData = function (text, offset) {
  this.setText(text);
  this.elt.selectionCtrl.setRangeByOffset(offset);
};

TITextController.prototype.insertText = function (text) {
  var range = document.getSelection().getRangeAt(0);
  range.deleteContents();
  this.elt.selectionCtrl.onSelect();
  range = document.getSelection().getRangeAt(0);
  var eltChain = text2ContentElements(text, {
    tagMap: this.elt.tagMap
  });
  var startCtn = range.startContainer;
  var at;

  if (isTokenText(startCtn)) {
    at = startCtn.parentElement;
  } else if (startCtn === this.elt) {
    at = this.elt.childNodes[range.startOffset - 1];
  }

  var newNode;

  while (eltChain.length > 0) {
    newNode = eltChain.shift();

    if (!at) {
      this.elt.addChildBefore(newNode, this.elt.firstChild);
      at = newNode;
    } else if (isText(at) && isText(newNode)) {
      at.data += newNode.data;
    } else {
      this.elt.addChildAfter(newNode, at);
      at = newNode;
    }
  }
};

/* harmony default export */ const tokenizeiput_TITextController = (TITextController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/tiutils.js



function tokenizeMessageText(text) {
  var emojis = EmojiAnimByIdent;
  var splitter = Object.keys(EmojiAnimByIdent).concat(['\n']);
  var tagTokens = text.match(/@\[id:\d+]/g) || [];
  var otherTokens = text.split(/@\[id:\d+]/g);
  var tokens = otherTokens.reduce(function (ac, cr, i) {
    ac.push(cr);
    if (i < tagTokens.length) ac.push(tagTokens[i]);
    return ac;
  }, []);
  tokens = splitter.reduce(function (chain, splitter) {
    return chain.reduce(function (ac, token) {
      var subChain = token.split(splitter);

      for (var i = 0; i < subChain.length; ++i) {
        if (subChain[i]) {
          ac.push(subChain[i]);
        }

        if (i + 1 < subChain.length) {
          ac.push(splitter);
        }
      }

      return ac;
    }, []);
  }, tokens);
  tokens = tokens.map(function (text) {
    var tagId;

    if (text === '\n') {
      return {
        type: 'NEW_LINE'
      };
    } else if (emojis[text]) {
      return {
        type: 'EMOJI',
        value: text
      };
    } else if (text.match(/^@\[id:\d+]$/)) {
      tagId = text.substring(5, text.length - 1);
      return {
        type: "TAG",
        value: tagId
      };
    } else return {
      type: 'TEXT',
      value: text
    };
  });
  return tokens;
}
var isText = function isText(node) {
  return node && node.nodeType === Node.TEXT_NODE;
};
var isNewLine = function isNewLine(node) {
  return node && node.tagName === 'BR';
};
/***
 *
 * @param {Text|AElement}node
 * @returns {null|*}
 */

var getFirstTextNode = function getFirstTextNode(node) {
  if (node.nodeType === Node.TEXT_NODE || node.tagName === 'BR') return node;
  var nodes = node.childNodes;
  var res = null;

  for (var i = 0; i < nodes.length && !res; ++i) {
    res = res || getFirstTextNode(nodes[i]);
  }

  return res;
};
var getLastTextNode = function getLastTextNode(node) {
  if (node.nodeType === Node.TEXT_NODE || node.tagName === 'BR') return node;
  var nodes = node.childNodes;
  var res = null;

  for (var i = nodes.length - 1; i > 0 && !res; --i) {
    res = res || getLastTextNode(node);
  }

  return res;
};
var isTokenText = function isTokenText(node) {
  if (node.nodeType !== Node.TEXT_NODE) return false;
  return isToken(node.parentElement);
};
var isToken = function isToken(node) {
  return node && node.classList && (node.classList.contains('as-emoji-token') || node.classList.contains('as-tag-token'));
};
function findNextTextNode(root, current) {
  var nextTextNode = function nextTextNode(node) {
    var res = null;
    var next = node.nextSibling;

    while (next && !res) {
      res = getFirstTextNode(next);
      next = next.nextSibling;
    }

    if (!res && node.parentElement !== root) {
      res = nextTextNode(node.parentElement);
    }

    return res;
  };

  return nextTextNode(current);
}
function findPrevTextNode(root, current) {
  var prevTextNode = function prevTextNode(node) {
    var res = null;
    var prev = node.previousSibling;

    while (prev && !res) {
      res = getLastTextNode(prev);
      prev = prev.previousSibling;
    }

    if (!res && node.parentElement !== root) {
      res = prevTextNode(node.parentElement);
    }

    return res;
  };

  return prevTextNode(current);
}
function text2ContentElements(text, opt) {
  return tokenizeMessageText(text).map(function (token) {
    var textOfTag;

    switch (token.type) {
      case 'NEW_LINE':
        return ACore_('br');

      case 'EMOJI':
        return ACore_({
          tag: 'span',
          "class": 'as-emoji-token',
          attr: {
            'data-display': EMPTY_2_SPACES,
            'data-text': token.value
          },
          child: {
            text: EMPTY_2_SPACES
          }
        });

      case 'TAG':
        textOfTag = opt.tagMap && opt.tagMap[token.value];
        return ACore_({
          tag: 'span',
          "class": 'as-tag-token',
          attr: {
            'data-text': '@[id:' + token.value + ']',
            'data-display': textOfTag ? '@' + textOfTag : '@[id:' + token.value + ']'
          },
          child: {
            text: textOfTag ? '@' + textOfTag : '@[id:' + token.value + ']'
          }
        });

      case 'TEXT':
      default:
        return ACore_({
          text: token.value
        });
    }
  });
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/messageinput/MessageInputPlugin.js




/***
 * @typedef MessageInputPluginOption
 * @property {string} [id]
 * @property {string|Object|AElement} icon
 * @property {function(_thisAdapter: MessageInputPlugin, _:Dom._, Dom.$):AElement} createContent
 * @property {function(_thisAdapter:MessageInputPlugin):void} onPressTrigger
 * @property {"left"|"right"} popupAlign
 * @property {boolean=} alwaysVisible
 */

/***
 *
 * @param {MessageInput} inputElt
 * @param {MessageInputPluginOption} opt
 * @constructor
 */

function MessageInputPlugin(inputElt, opt) {
  this.opt = opt || {};
  this.inputElt = inputElt;
  this.icon = opt.icon;
  this.id = opt.id || randomIdent(16);
  this.alwaysVisible = !!opt.alwaysVisible;
  this.$icon = null;
  this.$triggerBtn = null;
  this.$content = null;
  this.$popup = null;
  if (opt.createContent) this.createContent = opt.createContent;
  if (opt.onPressTrigger) this.onPressTrigger = opt.onPressTrigger;
  this.autoClose = true;

  if ('autoClose' in opt) {
    this.autoClose = !!opt.autoClose;
  }

  this.popupAlign = opt.popupAlign || 'left';
  this.ev_pressTrigger = this.ev_pressTrigger.bind(this);
  this.ev_pressOut = this.ev_pressOut.bind(this);
}

MessageInputPlugin.prototype.isMessagePlugin = true;

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;
  if (!this.autoClose) return;
  this.closePopup();
};

MessageInputPlugin.prototype.getIconElt = function () {
  if (!this.$icon) this.$icon = ACore_(this.icon);
  return this.$icon;
};

MessageInputPlugin.prototype.getTriggerButton = function () {
  if (!this.$triggerBtn) {
    this.$triggerBtn = ACore_({
      tag: 'button',
      "class": ['as-message-input-plugin-btn', 'as-message-input-plugin-' + this.id],
      child: this.getIconElt(),
      on: {
        click: this.ev_pressTrigger
      }
    });

    if (this.alwaysVisible) {
      this.$triggerBtn.addClass('as-always-visible');
    }
  }

  return this.$triggerBtn;
};

MessageInputPlugin.prototype.createContent = function (_thisAdapter, _, $) {
  return _({
    tag: 'div'
  });
};
/***
 *
 * @type {null|function(_thisAdapter:MessageInputPlugin):void}
 */


MessageInputPlugin.prototype.onPressTrigger = null;

MessageInputPlugin.prototype.getContent = function () {
  if (!this.$content) this.$content = this.createContent(this.inputElt, ACore_, ACore_$);
  return this.$content;
};

MessageInputPlugin.prototype.getPopup = function () {
  if (!this.$popup) {
    this.$popup = ACore_({
      "class": ['as-message-input-external-tools-popup', 'as-align-' + this.popupAlign],
      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);
  this.onOpen();

  if (this.opt.onOpen) {
    this.opt.onOpen.call(this, this.inputElt, ACore_, ACore_$);
  }
};

MessageInputPlugin.prototype.closePopup = function () {
  if (!this.isPopupOpened()) return;

  if (this.opt.onClose) {
    this.opt.onClose.call(this, this.inputElt, ACore_, ACore_$);
  }

  this.onClose();
  this.getPopup().remove();
  document.body.removeEventListener('click', this.ev_pressOut);
};

MessageInputPlugin.prototype.isPopupOpened = function () {
  return !!this.getPopup().parentElement;
};

MessageInputPlugin.prototype.onOpen = noop;
MessageInputPlugin.prototype.onClose = noop;
Object.defineProperty(MessageInputPlugin.prototype, 'contentElt', {
  get: function get() {
    return this.getContent();
  }
});
/* harmony default export */ const messageinput_MessageInputPlugin = (MessageInputPlugin);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/messageinput/MIEmojiPlugin.js



/****
 * @extends MessageInputPlugin
 * @constructor
 */

function MIEmojiPlugin(inputElt) {
  messageinput_MessageInputPlugin.call(this, inputElt, {
    id: 'emoji_picker',
    icon: 'span.mdi.mdi-emoticon-happy-outline'
  });

  for (var key in this) {
    if (key.startsWith('ev_')) {
      this[key] = this[key].bind(this);
    }
  }
}

HTML5_OOP.mixClass(MIEmojiPlugin, messageinput_MessageInputPlugin);

MIEmojiPlugin.prototype.createContent = function () {
  return ACore_('emojipicker') //.addTo(this.$emojiPickerCtn)
  .on('pick', this.ev_PickEmoji);
};

MIEmojiPlugin.prototype.ev_PickEmoji = function (event) {
  var text = this.inputElt.$preInput.value;
  var selected = this._lastInputSelectPosion;
  var newText = text.substr(0, selected.start) + event.key + text.substr(selected.end);
  var newOffset = selected.start + event.key.length;
  this._lastInputSelectPosion = {
    start: newOffset,
    end: newOffset
  };
  this.inputElt.$preInput.focus();
  this.inputElt.$preInput.applyData(newText, newOffset);
  this.inputElt.$preInput.commitChange(newText, newOffset);
  this.inputElt.notifySizeChange();
  this.inputElt.$preInput.focus();
};

MIEmojiPlugin.prototype.onOpen = function () {
  var value = this.inputElt.$preInput.value;
  this._lastInputSelectPosion = this.inputElt.$preInput.getSelectPosition() || {
    start: value.length,
    end: value.length
  };
  this.inputElt.$preInput.focus();
};

/* harmony default export */ const messageinput_MIEmojiPlugin = (MIEmojiPlugin);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/exticons/catalog.json
const catalog_namespaceObject = JSON.parse('["3g2","3ga","3gp","7z","aa","aac","ac","accdb","accdt","ace","adn","ai","aif","aifc","aiff","ait","amr","ani","apk","app","applescript","asax","asc","ascx","asf","ash","ashx","asm","asmx","asp","aspx","asx","au","aup","avi","axd","aze","bak","bash","bat","bin","blank","bmp","bowerrc","bpg","browser","bz2","bzempty","c","cab","cad","caf","cal","cd","cdda","cer","cfg","cfm","cfml","cgi","chm","class","cmd","code-workspace","codekit","coffee","coffeelintignore","com","compile","conf","config","cpp","cptx","cr2","crdownload","crt","crypt","cs","csh","cson","csproj","css","csv","cue","cur","dart","dat","data","db","dbf","deb","default","dgn","dist","diz","dll","dmg","dng","doc","docb","docm","docx","dot","dotm","dotx","download","dpj","ds_store","dsn","dtd","dwg","dxf","editorconfig","el","elf","eml","enc","eot","eps","epub","eslintignore","exe","f4v","fax","fb2","fla","flac","flv","fnt","folder","fon","gadget","gdp","gem","gif","gitattributes","gitignore","go","gpg","gpl","gradle","gz","h","handlebars","hbs","heic","hlp","hs","hsl","htm","html","ibooks","icns","ico","ics","idx","iff","ifo","image","img","iml","in","inc","indd","inf","info","ini","inv","iso","j2","jar","java","jpe","jpeg","jpg","js","json","jsp","jsx","key","kf8","kmk","ksh","kt","kts","kup","less","lex","licx","lisp","lit","lnk","lock","log","lua","m","m2v","m3u","m3u8","m4","m4a","m4r","m4v","map","master","mc","md","mdb","mdf","me","mi","mid","midi","mk","mkv","mm","mng","mo","mobi","mod","mov","mp2","mp3","mp4","mpa","mpd","mpe","mpeg","mpg","mpga","mpp","mpt","msg","msi","msu","nef","nes","nfo","nix","npmignore","ocx","odb","ods","odt","ogg","ogv","ost","otf","ott","ova","ovf","p12","p7b","pages","part","pcd","pdb","pdf","pem","pfx","pgp","ph","phar","php","pid","pkg","pl","plist","pm","png","po","pom","pot","potx","pps","ppsx","ppt","pptm","pptx","prop","ps","ps1","psd","psp","pst","pub","py","pyc","qt","ra","ram","rar","raw","rb","rdf","rdl","reg","resx","retry","rm","rom","rpm","rpt","rsa","rss","rst","rtf","ru","rub","sass","scss","sdf","sed","sh","sit","sitemap","skin","sldm","sldx","sln","sol","sphinx","sql","sqlite","step","stl","svg","swd","swf","swift","swp","sys","tar","tax","tcsh","tex","tfignore","tga","tgz","tif","tiff","tmp","tmx","torrent","tpl","ts","tsv","ttf","twig","txt","udf","vb","vbproj","vbs","vcd","vcf","vcs","vdi","vdx","vmdk","vob","vox","vscodeignore","vsd","vss","vst","vsx","vtx","war","wav","wbk","webinfo","webm","webp","wma","wmf","wmv","woff","woff2","wps","wsf","xaml","xcf","xfl","xlm","xls","xlsm","xlsx","xlt","xltm","xltx","xml","xpi","xps","xrb","xsd","xsl","xspf","xz","yaml","yml","z","zip","zsh"]');
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/messageinput/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 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_$('.as-message-input-pre', 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.$left = MessageInput_$('.as-message-input-left', this);
  this.$right = MessageInput_$('.as-message-input-right', this);
  this.$attachmentCtn = MessageInput_$('.as-message-input-attachment-ctn', this);
  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.$attachhook = MessageInput_('attachhook').addTo(this).on('attached', this.notifySizeChange.bind(this)).on('attached', this._updateSize.bind(this));
  this.on('drop', this.eventHandler.drop).on('dragover', this.eventHandler.dragover);
  HTML5_OOP.drillProperty(this, this.$preInput, 'tagList');
  this.autoSend = false;
  /***
   *
   * @type {MessageInputQuote|null}
   */

  this.quote = null;
  this.addPlugin(new messageinput_MIEmojiPlugin(this));
}

MessageInput.MODE_EDIT = MODE_EDIT;
MessageInput.MODE_NEW = MODE_NEW;

MessageInput.iconAssetRoot = function () {
  if (location.hostname.match(/^.*(\.?absol\.cf|absol\.ddns\.net)$/) || location.hostname === 'localhost') 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'].concat(data.v2 ? ['as-v2'] : []),
    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-left'
      }, {
        "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: "+"
            }
          }]
        }]
      }, (data.v2 ? 'tokenizehyperinput' : 'preinput') + '.as-message-input-pre.absol-bscroller']
    }]
  });
};

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");
  }

  this._updateSize();
};

MessageInput.prototype._updateSize = function () {
  var fs = this.getFontSize() || 14;
  this.addStyle('--right-width', this.$right.getBoundingClientRect().width / fs + 'em');
};

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.hasClass('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;

  if (option.isMessagePlugin) {
    plugin = option;
  } else {
    plugin = new this.PluginConstructor(this, option);
  }

  plugin.idx = this._plugins.length + 1;

  this._plugins.push(plugin);

  this._plugins.sort(function (a, b) {
    var av = typeof a.opt.order === "number" ? a.opt.order : a.idx * 1000;
    var bv = typeof b.opt.order === "number" ? b.opt.order : b.idx * 1000;
    return av - bv;
  });

  var plugins = this._plugins.slice();

  plugins.forEach(function (pl) {
    return pl.getTriggerButton().remove();
  });
  this.$left.addChild(plugins.shift().getTriggerButton());

  while (plugins.length > 0) {
    this.$right.addChildBefore(plugins.shift().getTriggerButton(), this.$right.firstChild);
  }

  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._updateSize();

  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._updateSize();

  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:

  this._updateSize();
};

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');

    this._updateSize();
  },
  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;

    this._updateSize();
  },
  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.hasClass('as-auto-send');
  }
};
MessageInput.property.quote = {
  set: function set(quote) {
    this._quote = quote;

    this._updateQuote();
  },
  get: function get() {
    return this._quote;
  }
};
MessageInput.property.tagMap = {
  set: function set(value) {
    this.$preInput.tagMap = value || {};
    this.$quote.tagMap = value || {};
  },
  get: function get() {
    return this.$preInput.tagMap;
  }
};
absol_acomp_ACore.install(MessageInput);
/* harmony default export */ const messageinput_MessageInput = (MessageInput);
var urlRex = /^(firefox|opera|chrome|https|http|wss|ws):\/\/[^\s]+$/;
/***
 *
 * @param {string}text
 * @param {{emojiAssetRoot?:string, staticSize?:number, animSize?:number, tagMap?:{}, lengthLimit?:number, inline?:boolean}=} data
 * @returns {Array}
 */

function parseMessage(text, data) {
  data = data || {};
  data.emojiAssetRoot = data.emojiAssetRoot || js_EmojiPicker.assetRoot;
  data.staticSize = data.staticSize || 20;
  data.animSize = data.animSize || 60;
  var tagMap = data.tagMap || {};
  var tokens = tokenizeMessageText(text).reduce(function (ac, token) {
    if (token.type !== 'TEXT') {
      ac.push(token);
      return ac;
    }

    var urls = token.value.match(/(firefox|opera|chrome|https|http|wss|ws):\/\/[^\s]+/g);
    var splitter = Math.random() + '';
    var normals = token.value.replace(/(firefox|opera|chrome|https|http|wss|ws):\/\/[^\s]+/, splitter).split(splitter);

    for (var i = 0; i < normals.length; ++i) {
      if (i > 0) {
        ac.push({
          type: 'URL',
          value: urls[i - 1]
        });
      }

      ac.push({
        type: 'TEXT',
        value: normals[i]
      });
    }

    return ac;
  }, []);

  if (data.lengthLimit > 0) {
    tokens = tokens.reduce(function (ac, token) {
      if (ac.l >= data.lengthLimit) {
        return ac;
      }

      switch (token.type) {
        case 'TAG':
          ac.l += ('@' + (tagMap[token.value] ? tagMap[token.value] : '[id:' + token.value + ']')).length;
          break;

        case 'EMOJI':
          ac.l += 1;
          break;

        case 'NEW_LINE':
          ac.l += 1;
          break;

        default:
          ac.l += token.value.length;
      }

      if (ac.l > data.lengthLimit) {
        if (token.type === 'TEXT') {
          token.value = token.value.substring(0, Math.max(0, token.value.length - (ac.l - data.lengthLimit) - 3)) + '...';
          ac.tokens.push(token);
        }
      } else {
        ac.tokens.push(token);
      }

      return ac;
    }, {
      l: 0,
      tokens: []
    }).tokens;
  }

  var res = tokens.reduce(function (ac, token) {
    switch (token.type) {
      case 'TAG':
        ac.push({
          tag: 'span',
          "class": 'as-tag-token',
          child: {
            text: '@' + (tagMap[token.value] ? tagMap[token.value] : '[id:' + token.value + ']')
          }
        });
        break;

      case 'EMOJI':
        ac.push({
          tag: 'span',
          "class": 'as-emoji-text',
          child: {
            text: token.value
          }
        });
        ac.push({
          tag: 'img',
          "class": 'as-emoji',
          props: {
            src: data.emojiAssetRoot + '/static/x' + data.staticSize + '/' + EmojiAnimByIdent[token.value][1]
          }
        });
        break;

      case 'NEW_LINE':
        ac.push({
          tag: 'br'
        });
        break;

      case 'URL':
        ac.push({
          tag: 'a',
          "class": 'as-protocal-' + token.value.split(':').shift(),
          child: {
            text: token.value
          },
          props: {
            href: token.value,
            target: '_blank'
          }
        });
        break;

      case 'TEXT':
      default:
        ac.push({
          tag: 'span',
          child: {
            text: token.value
          }
        });
        break;
    }

    return ac;
  }, []);

  if (!data.inline && 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) {
    MessageInput.iconSupportAsync = Promise.resolve(catalog_namespaceObject);
  }

  return MessageInput.iconSupportAsync;
}
function MessageQuote() {
  prepareIcon();
  this._tagMap = {};
  /***
   *
   * @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.hasClass('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.hasClass('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, {
        tagMap: this.tagMap
      });
      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.property.tagMap = {
  set: function set(value) {
    this._tagMap = value || {};
    this.data = this['data'];
  },
  get: function get() {
    return this._tagMap;
  }
};

MessageQuote.eventHandler.clickRemoveBtn = function () {
  this.emit('pressremove', {
    target: this,
    type: 'pressclose'
  }, this);
};

absol_acomp_ACore.install(MessageQuote);
MessageInput.prototype.PluginConstructor = messageinput_MessageInputPlugin;
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/numberinput.css
var numberinput = __webpack_require__(3081);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/numberinput/NITextController.js





/***
 *
 * @param {NumberInput} elt
 * @constructor
 */

function NITextController(elt) {
  var _this = this;

  this.elt = elt;
  /***
   *
   * @type {HTMLInputElement|AElement}
   */

  this.$input = this.elt.$input;
  Object.keys(NITextController.prototype).forEach(function (key) {
    if (key.startsWith('on')) _this[key] = _this[key].bind(_this);
  });
  this.elt.$input.on('keydown', this.onKeyDown).on('paste', this.onKeyDown).on('blur', this.onBlur);
}

NITextController.prototype.estimateWidthBy = function (text) {
  if (this.elt.hasClass('as-pressing')) return;
  var bound = this.elt.getBoundingClientRect();
  var width = Text_measureText(text, this.$input.getComputedStyleValue('font')).width;
  this.elt.addStyle('--text-width', width + 'px');
  var newBound = this.elt.getBoundingClientRect();
  if (newBound.width !== bound.width) HTML5_ResizeSystem.requestUpdateUpSignal(this.elt, true);
};

NITextController.prototype.flushTextToValue = function () {
  var thousandsSeparator = this.elt.thousandsSeparator || '';
  var decimalSeparator = this.elt.decimalSeparator;
  var text = this.$input.value;
  var floatText = text.split(thousandsSeparator).join('').split(decimalSeparator).join('.');
  this.elt._value = parseFloat(floatText);
  if (!isRealNumber(this.elt._value)) this.elt._value = null;
};

NITextController.prototype.flushValueToText = function () {
  var formatter;
  var opt = Object.assign({}, this.elt._format);
  var value = this.elt.value;
  var text, parts;

  if (value === null) {
    text = '';
  } else if (opt.locales === 'none') {
    if (opt.maximumFractionDigits === 20) {
      text = value + '';
    } else if (opt.maximumFractionDigits === opt.minimumIntegerDigits) {
      text = value.toFixed(opt.maximumFractionDigits);
    } else {
      text = value + '';
      parts = text.split('.');
      parts[1] = parts[1] || '';

      if (parts[1].length < opt.minimumIntegerDigits) {
        text = value.toFixed(opt.minimumIntegerDigits);
      }
    }
  } else {
    formatter = new Intl.NumberFormat(this.elt._format.locales, opt);
    text = formatter.format(value);
  }

  this.$input.value = text;
  this.estimateWidthBy(text);
};

NITextController.prototype.reformat = function () {
  var thousandsSeparator = this.elt.thousandsSeparator || '';
  var decimalSeparator = this.elt.decimalSeparator;
  var caretPos = this.$input.selectionEnd;
  var value = this.$input.value;
  var parts = value.split(decimalSeparator);
  var caretWTSPos = value.substring(0, caretPos).split(thousandsSeparator).join('').length;
  parts[0] = parts[0].split('').filter(function (x) {
    return x.match(/[0-9\-]/);
  }).reduce(function (ac, c, i, arr) {
    ac += c;

    if (i + 1 < arr.length && (arr.length - i) % 3 === 1 && arr[i] !== '-') {
      ac += thousandsSeparator;
    }

    return ac;
  }, '');
  if (parts[1]) parts[1] = parts[1].split('').filter(function (x) {
    return x.match(/[0-9]/);
  }).join('');
  var newValue = parts.join(decimalSeparator);
  var newCaretPos = 0;
  var counter = 0;

  for (newCaretPos = 0; newCaretPos < newValue.length && counter < caretWTSPos; ++newCaretPos) {
    if (newValue[newCaretPos].match(/[0-9\-]/) || newValue[newCaretPos] === decimalSeparator) {
      counter++;
    }
  }

  this.$input.value = newValue;
  this.$input.setSelectionRange(newCaretPos, newCaretPos);
  this.estimateWidthBy(newValue);
};

NITextController.prototype.onBlur = function () {
  this.flushValueToText();
  this.elt.notifyChanged({
    by: 'blur'
  });
};
/***
 * @param {KeyboardEvent|ClipboardEvent|{}} event
 * @param {boolean=} event
 */


NITextController.prototype.onKeyDown = function (event, dontInsert) {
  var _this2 = this;

  var key = event.type === 'keydown' ? keyboardEventToKeyBindingIdent(event) : '';

  if (key.length === 1 && !key.match(/[0-9.,\-]/) || key.match(/^shift-.$/)) {
    event.preventDefault();
    return;
  }

  var thousandsSeparator = this.elt.thousandsSeparator;
  var decimalSeparator = this.elt.decimalSeparator;
  var value = this.$input.value;
  var sStart = this.$input.selectionStart;
  var sEnd = this.$input.selectionEnd;
  var sDir = this.$input.selectionDirection;
  var onKeys = {};

  onKeys.unidentified = function () {
    var oldText = _this2.$input.value;
    setTimeout(function () {
      var newText = _this2.$input.value;
      if (oldText === newText) return;
      var key = newText[sStart];
      if (!key) return; //todo

      var fakeEvent = {
        type: 'keydown',
        preventDefault: noop,
        key: key
      };

      if (key.match(/^[0-9.]$/)) {
        _this2.onKeyDown(fakeEvent, true);
      } else {
        _this2.$input.value = oldText;

        _this2.$input.setSelectionRange(sStart, sStart);

        _this2.onKeyDown(fakeEvent);
      }
    }, 10);
  };

  onKeys.process = function () {
    setTimeout(function () {
      _this2.flushTextToValue();
    }, 10);
  };

  onKeys.paste = function () {
    var clipboardData = event.clipboardData || window.clipboardData;
    var pastedData = clipboardData.getData('Text');
    var hasSeparator = value.indexOf(decimalSeparator) >= 0;
    pastedData = pastedData.split('').filter(function (c) {
      if (c.match(/[0-9]/)) return true;

      if (!hasSeparator && c === hasSeparator) {
        hasSeparator = true;
        return true;
      }
    }).join('');
    if (_this2.elt.readOnly) return;

    if (!dontInsert) {
      _this2.$input.value = value.substring(0, sStart) + pastedData + value.substring(sEnd);

      _this2.$input.setSelectionRange(sStart + pastedData.length, sStart + pastedData.length);
    }

    _this2.reformat();

    _this2.flushTextToValue();
  };

  onKeys.arrowleft = function () {
    if (sStart === sEnd) {
      if (value[sStart - 2] === thousandsSeparator) {
        _this2.$input.setSelectionRange(sStart - 2, sStart - 2);
      } else if (sStart > 0) {
        _this2.$input.setSelectionRange(sStart - 1, sStart - 1);
      }
    } else {
      _this2.$input.setSelectionRange(sStart, sStart);
    }
  };

  onKeys['shift-arrowleft'] = function () {
    var newSStart;
    var newSEnd;

    if (sDir === 'backward') {
      newSStart = sEnd;
      newSEnd = sStart - 1;
    } else {
      newSStart = sStart;
      newSEnd = sEnd - 1;
    }

    if (value[newSEnd - 1] === thousandsSeparator) newSEnd--;
    newSEnd = Math.max(0, newSEnd);

    if (newSStart <= newSEnd) {
      _this2.$input.setSelectionRange(newSStart, newSEnd, "forward");
    } else {
      _this2.$input.setSelectionRange(newSEnd, newSStart, "backward");
    }
  };

  onKeys.arrowright = function () {
    if (sStart === sEnd) {
      if (value[sStart] === thousandsSeparator) {
        _this2.$input.setSelectionRange(sStart + 2, sStart + 2);
      } else if (sStart < value.length) {
        _this2.$input.setSelectionRange(sStart + 1, sStart + 1);
      }
    } else {
      _this2.$input.setSelectionRange(sStart, sStart);
    }
  };

  onKeys['shift-arrowright'] = function () {
    var newSStart;
    var newSEnd;

    if (sDir === 'backward') {
      newSStart = sEnd;
      newSEnd = sStart + 1;
    } else {
      newSStart = sStart;
      newSEnd = sEnd + 1;
    }

    if (value[newSEnd - 1] === thousandsSeparator) newSEnd++;
    newSEnd = Math.min(value.length, newSEnd);

    if (newSStart <= newSEnd) {
      _this2.$input.setSelectionRange(newSStart, newSEnd, "forward");
    } else {
      _this2.$input.setSelectionRange(newSEnd, newSStart, "backward");
    }
  };

  onKeys.number = function () {
    if (_this2.elt.readOnly) return;

    if (!dontInsert) {
      _this2.$input.value = value.substring(0, sStart) + key + value.substring(sEnd);

      _this2.$input.setSelectionRange(sStart + 1, sStart + 1);
    }

    _this2.reformat();

    _this2.flushTextToValue();
  };

  onKeys['-'] = function () {
    if (_this2.elt.readOnly) return;
    if (value.indexOf('-') >= 0 || sStart > 0) return;
    _this2.$input.value = '-' + value.substring(sEnd);

    _this2.$input.setSelectionRange(1, 1);

    _this2.reformat();

    _this2.flushTextToValue();
  };

  onKeys.backspace = function () {
    if (_this2.elt.readOnly) return;
    var delStart, delEnd;

    if (sStart === sEnd) {
      if (sStart > 0) {
        delStart = sStart - 1;
        delEnd = sStart;
      }
    } else {
      delStart = sStart;
      delEnd = sEnd;
    }

    if (delStart === undefined || delEnd === undefined) return;
    _this2.$input.value = value.substring(0, delStart) + value.substring(delEnd);

    _this2.$input.setSelectionRange(delStart, delStart);

    _this2.reformat();

    _this2.flushTextToValue();
  };

  onKeys.enter = function () {
    if (_this2.elt.readOnly) return;

    _this2.flushValueToText();

    _this2.$input.setSelectionRange(_this2.$input.value.length, _this2.$input.value.length);

    _this2.elt.notifyChanged({
      by: 'enter'
    });
  };

  onKeys["delete"] = function () {
    if (_this2.elt.readOnly) return;
    var delStart, delEnd;

    if (sStart === sEnd) {
      if (sStart < value.length) {
        delStart = sStart;
        delEnd = sStart + 1;
        if (value[delStart] === thousandsSeparator) delEnd++;
      }
    } else {
      delStart = sStart;
      delEnd = sEnd;
    }

    if (isNaturalNumber(delStart) && isNaturalNumber(delEnd)) {
      _this2.$input.value = value.substring(0, delStart) + value.substring(delEnd);

      _this2.$input.setSelectionRange(delStart, delStart);

      _this2.reformat();

      _this2.flushTextToValue();
    }
  };

  onKeys.decimalSeparator = function () {
    if (_this2.elt.readOnly) return;
    var idx = value.indexOf(decimalSeparator);

    if (idx >= 0) {
      if (idx < sStart) {
        _this2.$input.value = value.substring(0, sStart).replace(decimalSeparator, '') + decimalSeparator + value.substring(sEnd);

        _this2.$input.setSelectionRange(sStart, sStart);
      } else if (idx < sEnd) {
        _this2.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd);

        _this2.$input.setSelectionRange(sStart + 1, sStart + 1);
      } else {
        _this2.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd).replace(decimalSeparator, '');

        _this2.$input.setSelectionRange(sStart + 1, sStart + 1);
      }
    } else {
      _this2.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd);

      _this2.$input.setSelectionRange(sStart + 1, sStart + 1);
    }

    _this2.reformat();

    _this2.flushTextToValue();
  };

  if (key === 'arrowup') {
    if (sStart === 0 && sEnd === 0) {
      this.elt.nextStep();
      event.preventDefault();
      this.$input.setSelectionRange(0, 0);
    }
  } else if (key === 'arrowdown') {
    if (sStart === value.length && sEnd === value.length) {
      this.elt.prevStep();
      event.preventDefault();
      this.$input.setSelectionRange(this.$input.value.length, this.$input.value.length);
    }
  } else if (key === 'ctrl-x') {
    onKeys["delete"]();
  } else if (onKeys[event.type]) {
    event.preventDefault();
    onKeys[event.type]();
  } else if (onKeys[key]) {
    event.preventDefault();
    onKeys[key]();
  } else if (key.match(/^[0-9.]$/)) {
    event.preventDefault();
    onKeys.number();
  } else if (key === decimalSeparator) {
    event.preventDefault();
    onKeys.decimalSeparator();
  }
};

/* harmony default export */ const numberinput_NITextController = (NITextController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/numberinput/NumberInput.js






var NumberInput_ = absol_acomp_ACore._;
var NumberInput_$ = absol_acomp_ACore.$;
/***
 * @typedef NumberInputFormat
 * @property {string} locales
 * @property {string|null} decimalSeparator
 * @property {string|null} thousandSeparator
 */

/***
 * @extends AElement
 * @constructor
 */

function NumberInput() {
  var _this = this;

  /***
   *
   * @type {HTMLInputElement|AElement}
   */
  this.$input = NumberInput_$('input', this); // .on('keyup', this.eventHandler.keyup)
  // .on('paste', this.eventHandler.paste)
  // .on('change', this.eventHandler.change);

  this.$input.value = '0';
  this._prevValue = 0; //to know whenever the value changed

  this._value = 0;
  this._max = Infinity;
  this._min = -Infinity;
  this._step = 1;
  this._format = this._makeDefaultFormat();
  this.$upBtn = NumberInput_$('.absol-number-input-button-up-container button', this).on('mousedown', this.eventHandler.mouseDownBtn.bind(this, 1));
  this.$downBtn = NumberInput_$('.absol-number-input-button-down-container button', this).on('mousedown', this.eventHandler.mouseDownBtn.bind(this, -1));
  this.textCtrl = new numberinput_NITextController(this);
  this.$domSignal = NumberInput_('attachhook').addTo(this);
  this.$domSignal.once('attached', function () {
    _this.textCtrl.estimateWidthBy(_this.$input.value);
  });
  /****
   * @name min
   * @type {number}
   * @memberOf NumberInput#
   */

  /****
   * @name max
   * @type {number}
   * @memberOf NumberInput#
   */

  /****
   * @name value
   * @type {number}
   * @memberOf NumberInput#
   */

  /****
   * @name format
   * @type {NumberInputFormat}
   * @memberOf NumberInput#
   */

  /****
   * @name thousandsSeparator
   * @type {string|null}
   * @memberOf NumberInput#
   */

  /****
   * @name decimalSeparator
   * @type {string|null}
   * @memberOf NumberInput#
   */

  /****
   * @name readOnly
   * @type {boolean}
   * @memberOf NumberInput#
   */

  /****
   * @name disabled
   * @type {boolean}
   * @memberOf NumberInput#
   */
}

NumberInput.tag = 'NumberInput'.toLowerCase();

NumberInput.render = function () {
  return NumberInput_({
    "class": ['absol-number-input', 'as-must-not-null'],
    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.prototype._makeDefaultFormat = function () {
  var res = {
    locales: 'vi-VN',
    maximumFractionDigits: 20,
    minimumFractionDigits: 0
  };

  if (window['systemconfig'] && window['systemconfig']['numberFormatLocales']) {
    res.locales = window['systemconfig']['numberFormatLocales'];
  }

  return res;
};
/*****17 number********/


NumberInput.prototype.nextStep = function () {
  var ofs = 0;

  if (isRealNumber(this.min)) {
    ofs = this.min;
  }

  var idx = nearFloor((this.value - ofs) / this._step, 0.01);
  this._value = Math.min(this._step * (idx + 1) + ofs, this.max);
  this.textCtrl.flushValueToText();
};

NumberInput.prototype.prevStep = function () {
  var ofs = 0;

  if (isRealNumber(this.min)) {
    ofs = this.min;
  }

  var idx = nearFloor((this.value - ofs) / this._step, 0.01);
  this._value = Math.max(this._step * (idx - 1) + ofs, this.min);
  this.textCtrl.flushValueToText();
};

NumberInput.eventHandler = {};

NumberInput.eventHandler.mouseDownBtn = function (dir, event) {
  var _this2 = this;

  if (HTML5_EventEmitter.isMouseRight(event)) return;
  var self = this;
  var pressing = true;
  var timeout = -1;
  var i = 0;
  this.addClass('as-pressing');

  var tick = function tick() {
    if (pressing) {
      if (i === 0 || i >= 4) {
        if (dir > 0) _this2.nextStep();else _this2.prevStep();

        if (i === 0) {
          _this2.notifyChanged({
            by: 'press_button'
          });
        } else {
          _this2.notifyChanged({
            by: 'long_press_button'
          });
        }
      }

      ++i;
      self.__pressingUpTimeout__ = setTimeout(tick, 100);
    }
  };

  var finish = function finish(event) {
    pressing = false;

    _this2.removeClass('as-pressing');

    if (timeout >= 0) {
      clearTimeout(timeout);
      timeout = -1;
    }

    document.removeEventListener('mouseup', finish);
    document.removeEventListener('mouseleave', finish);

    if (event.type === 'mouseup') {
      _this2.$input.focus();
    }

    _this2.notifyChanged({
      originEvent: event,
      by: 'press_button'
    });

    _this2.textCtrl.estimateWidthBy(_this2.$input.value);
  };

  document.addEventListener('mouseup', finish);
  document.addEventListener('mouseleave', finish);
  tick();
};

NumberInput.prototype.notifyChanged = function (option) {
  option = option || {};
  var value = this.value;

  if (this._prevValue !== value) {
    this.emit('change', Object.assign({
      target: this,
      value: value,
      previousValue: this._prevValue
    }, option || {}), this);
    this._prevValue = value;
    this._prevBy = option.by;
  }
};

NumberInput.property = {};
NumberInput.property.value = {
  set: function set(value) {
    if (typeof value === "string") value = parseFloat(value);
    if (typeof value != 'number' || isNaN(value)) value = null;
    this._value = value;
    this._prevValue = this.value;
    this.textCtrl.flushValueToText();
  },
  get: function get() {
    var value = this._value;

    if (value === null) {
      if (this.notNull) {
        value = 0;
      } else {
        return null;
      }
    }

    value = Math.min(this.max, Math.max(value, this.min));

    if (this._format.maximumFractionDigits === 0) {
      return Math.round(value);
    }

    if (this._format.maximumFractionDigits < 20) return numberAutoFixed(value, this._format.maximumFractionDigits);
    return value;
  }
};
NumberInput.property.step = {
  set: function set(value) {
    if (!isRealNumber(value)) value = 1;
    if (value === 0) value = 1;
    value = Math.abs(value);
    this._step = value;
  },
  get: function get() {
    return this._step;
  }
};
NumberInput.property.max = {
  set: function set(value) {
    if (!isRealNumber(value)) {
      value = Infinity;
    }

    this._max = value;
    this._prevValue = this.value;
    this.textCtrl.flushValueToText();
  },
  get: function get() {
    return Math.max(this._max, this._min);
  }
};
NumberInput.property.min = {
  set: function set(value) {
    if (!isRealNumber(value)) {
      value = -Infinity;
    }

    this._min = value;
    this._prevValue = this.value;
    this.textCtrl.flushValueToText();
  },
  get: function get() {
    return Math.min(this._min, this._max);
  }
};
NumberInput.prototype.locales2Format = {
  'vi-VN': {
    decimalSeparator: ',',
    thousandsSeparator: '.'
  },
  'en-US': {
    decimalSeparator: '.',
    thousandsSeparator: ','
  },
  'none': {
    decimalSeparator: '.',
    thousandsSeparator: ''
  }
};
NumberInput.property.decimalSeparator = {
  get: function get() {
    var lF = this.locales2Format[this._format.locales];
    if (lF) return lF.decimalSeparator;
    return '.';
  },
  set: function set() {}
};
NumberInput.property.thousandsSeparator = {
  get: function get() {
    var lF = this.locales2Format[this._format.locales];
    if (lF) return lF.thousandsSeparator;
    return null;
  },
  set: function set() {}
};
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;
  }
};
NumberInput.property.readOnly = {
  set: function set(value) {
    this.$input.readOnly = !!value;
    if (value) this.addClass('as-read-only');else this.removeClass('as-read-only');
  },
  get: function get() {
    return this.$input.readOnly;
  }
};
NumberInput.property.format = {
  /***
   * @this NumberInput
   * @param value
   * @this NumberInput
   */
  set: function set(value) {
    if (value in this.locales2Format) {
      this._format = {
        locales: value,
        maximumFractionDigits: this._format.maximumFractionDigits,
        minimumFractionDigits: this._format.minimumFractionDigits
      };
    } else if (!value) {
      this._format = this._makeDefaultFormat();
    } else {
      this._format = Object.assign(this._makeDefaultFormat(), value);
    } // console.log(this._format)


    this.textCtrl.flushValueToText();
  },
  get: function get() {
    return this._format;
  }
};
NumberInput.property.floatFixed = {
  set: function set(value) {
    if (isNaturalNumber(value) && value >= 0 && value < 20) {
      this._format.maximumFractionDigits = Math.floor(value);
      this._format.minimumFractionDigits = Math.floor(value);
    } else {
      this._format.maximumFractionDigits = 20;
      delete this._format.minimumFractionDigits;
    }

    this.textCtrl.flushValueToText();
  },
  get: function get() {
    if (this._format.maximumFractionDigits === 20) return null;
    return this._format.maximumFractionDigits;
  }
};
NumberInput.property.notNull = {
  set: function set(value) {
    if (value) {
      this.addClass('as-must-not-null');
    } else {
      this.removeClass('as-must-not-null');
    }

    this._prevValue = this.value;
    this.textCtrl.flushValueToText();
  },
  get: function get() {
    return this.hasClass('as-must-not-null');
  }
};
absol_acomp_ACore.install('NumberInput'.toLowerCase(), NumberInput);
/* harmony default export */ const numberinput_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/WindowBox.js


/**
 * @typedef WindowBoxAction
 * @property icon
 * @property name
 *
 */

/***
 * @extends AElement
 * @constructor
 */

function WindowBox() {
  this.$header = ACore_$('.as-window-box-header', this);
  /***
   *
   * @type {WindowBoxAction[]}
   * @private
   */

  this._windowActions = [];
  this.$windowActionButtonCtn = ACore_$('.as-window-box-header-button-ctn', this);
  this._windowIcon = null;
  this.$windowIconCtn = ACore_$('.as-window-box-header-icon-ctn', this);
  /**
   *
   * @type {Text}
   */

  this.$windowTitleText = ACore_$('.as-window-box-header-title', this).firstChild;
  this.$body = ACore_$('.as-window-box-body', this);
  /***
   * @type {WindowBoxAction[]}
   * @name windowActions
   */
}

WindowBox.tag = 'WindowBox'.toLowerCase();

WindowBox.render = function () {
  return ACore_({
    "class": 'as-window-box',
    extendEvent: ['action'],
    child: [{
      "class": 'as-window-box-header',
      child: [{
        "class": 'as-window-box-header-icon-ctn'
      }, {
        "class": 'as-window-box-header-title',
        child: {
          text: ''
        }
      }, {
        "class": "as-window-box-header-button-ctn"
      }]
    }, {
      "class": 'as-window-box-body'
    }]
  });
};

['addChild', 'addChildBefore', 'addChildAfter', 'clearChild', 'findChildBefore', 'findChildAfter'].forEach(function (key) {
  WindowBox.prototype[key] = function () {
    return this.$body[key].apply(this.$body, arguments);
  };
});
WindowBox.property = {};
WindowBox.property.windowTitle = {
  set: function set(value) {
    this.$windowTitleText.data = (value || '') + '';
  },
  get: function get() {
    return this.$windowTitleText.data;
  },
  enumerable: true
};
WindowBox.property.windowIcon = {
  /***
   * @this WindowBox
   * @param value
   */
  set: function set(value) {
    value = value || null;
    this.$windowIconCtn.clearChild();

    if (value) {
      this.$windowIconCtn.addChild(ACore_(value));
    }

    this._windowIcon = value;
  },
  get: function get() {
    return this._windowIcon;
  },
  enumerable: true
};
WindowBox.property.windowActions = {
  set: function set(actions) {
    var self = this;
    this._windowActions = actions || [];
    this.$windowActionButtonCtn.clearChild();

    var buttons = this._windowActions.map(function (action) {
      return ACore_({
        tag: 'button',
        "class": action["class"] || [],
        child: action.icon,
        on: {
          click: function click(event) {
            var eventData = {
              type: 'action',
              target: self,
              action: action,
              originalEvent: event
            };
            HTML5_OOP.drillProperty(eventData, eventData, 'actionData', 'action');
            self.emit('action', eventData, self);
          }
        }
      });
    });

    this.$windowActionButtonCtn.addChild(buttons);
  },
  get: function get() {
    return this._windowActions;
  }
};
absol_acomp_ACore.install(WindowBox);
/* harmony default export */ const js_WindowBox = (WindowBox);
;// 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 self = this;
  this._lastSize = {
    width: 0,
    height: 0
  };
  /***
   *
   * @type {WindowBox}
   */

  this.$windowBox = OnsScreenWindow_$(js_WindowBox.tag, this);
  HTML5_OOP.drillProperty(this, this.$windowBox, 'windowTitle');
  HTML5_OOP.drillProperty(this, this.$windowBox, 'windowActions');
  HTML5_OOP.drillProperty(this, this.$windowBox, 'windowIcon');
  this.$windowBox.on('action', function (event) {
    self.emit('action', event, self);
  });
  this.$header = OnsScreenWindow_({
    tag: js_Hanger.tag,
    elt: this.$windowBox.$header
  });
  this.$header.on('dragstart', this.eventHandler.dragStart.bind(this, this.$header, 'move')); //

  this.$bottomResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom', this);
  this.$bottomResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$bottomResizer, 'bottom')); //

  this.$rightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-right', this);
  this.$rightResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$rightResizer, 'right')); //

  this.$topResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top', this);
  this.$topResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$topResizer, 'top'));
  this.$leftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-left', this);
  this.$leftResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$leftResizer, 'left'));
  this.$bottomRightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-right', this);
  this.$bottomRightResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$bottomRightResizer, 'bottomRight')); //

  this.$bottomLeftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-bottom-left', this);
  this.$bottomLeftResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$bottomLeftResizer, 'bottomLeft')); //

  this.$topLeftResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-left', this);
  this.$topLeftResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$topLeftResizer, 'topLeft'));
  this.$topRightResizer = OnsScreenWindow_$('.absol-onscreen-window-resizer.absol-onscreen-window-resize-top-right', this);
  this.$topRightResizer.on('dragstart', this.eventHandler.dragStart.bind(this, this.$topRightResizer, 'topRight'));
  this.$attachhook = OnsScreenWindow_('attachhook').addTo(this);
  this.$attachhook.requestUpdateSize = this.relocation.bind(this);
  this.$attachhook.on('error', function () {
    HTML5_Dom.addToResizeSystem(this);
  });
}

OnScreenWindow.tag = 'OnScreenWindow'.toLowerCase();

OnScreenWindow.render = function () {
  return OnsScreenWindow_({
    extendEvent: ['sizechange', 'drag', 'relocation', 'action'],
    "class": 'absol-onscreen-window',
    child: [{
      tag: js_WindowBox.tag,
      "class": 'as-window-box'
    }, '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.prototype.moveFators = {
  move: {
    x: 1,
    y: 1,

    /***
     * @this OnScreenWindow
     * @param event
     */
    canMove: function canMove(event) {
      return true;
    },
    cursor: 'move'
  },
  top: {
    y: 1,
    height: -1
  },
  bottom: {
    height: 1,
    cursor: 's-resize'
  },
  bottomRight: {
    height: 1,
    width: 1,
    cursor: 'se-resize'
  },
  bottomLeft: {
    height: 1,
    width: -1,
    x: 1,
    cursor: 'sw-resize'
  },
  topLeft: {
    height: -1,
    width: -1,
    x: 1,
    y: 1,
    cursor: 'nw-resize'
  },
  topRight: {
    height: -1,
    width: 1,
    y: 1,
    cursor: 'ne-resize'
  },
  right: {
    width: 1,
    cursor: 'e-resize'
  },
  left: {
    x: 1,
    width: -1,
    cursor: 'w-resize'
  }
};
/***
 *
 * @type {{}}
 * @memberOf OnScreenWindow#
 */

OnScreenWindow.eventHandler = {};
/***
 * @this OnScreenWindow
 * @param {Hanger} elt
 * @param fN
 * @param event
 */

OnScreenWindow.eventHandler.dragStart = function (elt, fN, event) {
  var factor = this.moveFators[fN];
  if (factor.canMove && !factor.canMove.call(this, event)) return;
  this.movingData = {
    factor: factor,
    screenSize: getScreenSize(),
    modal: OnsScreenWindow_('.absol-onscreen-window-moving-modal').addStyle('cursor', factor.cursor).addTo(document.body),
    elt: elt,
    bound: this.getBoundingClientRect()
  };
  elt.on('drag', this.eventHandler.drag).on('dragend', this.eventHandler.dragEnd);
};
/***
 * @this OnScreenWindow
 * @param event
 */


OnScreenWindow.eventHandler.drag = function (event) {
  var movingData = this.movingData;
  var factor = movingData.factor;
  var bound = movingData.bound;
  var screenSize = movingData.screenSize;
  var dv = event.currentPoint.sub(event.startingPoint);
  var x, y, width, height;

  if (factor.x) {
    x = dv.x * factor.x + bound.left;
    x = Math.min(x, screenSize.width - bound.width);
    x = Math.max(0, x);
    this.addStyle('left', x + 'px');
  }

  if (factor.y) {
    y = dv.y * factor.y + bound.top;
    y = Math.min(y, screenSize.height - bound.height);
    y = Math.max(0, y);
    this.addStyle('top', y + 'px');
  }

  if (factor.width) {
    width = dv.x * factor.width + bound.width;
    this.addStyle('width', width + 'px');
  }

  if (factor.height) {
    height = dv.y * factor.height + bound.height;
    this.addStyle('height', height + 'px');
  }

  this.emit('relocation', {
    type: 'relocation',
    target: this
  }, this);
  this.maybeSizeChange();
};
/***
 * @this OnScreenWindow
 * @param event
 */


OnScreenWindow.eventHandler.dragEnd = function (event) {
  var movingData = this.movingData;
  var elt = movingData.elt;
  elt.off('drag', this.eventHandler.drag).off('dragend', this.eventHandler.dragEnd);
  setTimeout(function () {
    movingData.modal.remove();
  }, 50);
  this.movingData = null;
};

['addChild', 'addChildBefore', 'addChildAfter', 'clearChild', 'findChildBefore', 'findChildAfter'].forEach(function (key) {
  OnScreenWindow.prototype[key] = function () {
    return this.$windowBox[key].apply(this.$windowBox, arguments);
  };
});
OnScreenWindow.property = {};

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.$;
/***
 * @extends AElement
 * @constructor
 */

function PageSelector() {
  this.$pageCount = PageSelector_$('.absol-page-count', this);
  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: 'span',
        child: {
          text: '/ '
        }
      }, {
        tag: 'span',
        "class": 'absol-page-count',
        child: {
          text: '1'
        }
      }]
    }, {
      tag: 'ul',
      "class": 'absol-page-number-buttons',
      child: [{
        tag: 'li',
        "class": "page-first",
        attr: {
          title: 'First'
        },
        child: 'a.mdi.mdi-chevron-double-left'
      }, {
        tag: 'li',
        attr: {
          title: 'Previous'
        },
        "class": 'page-previous',
        child: 'a.mdi.mdi-chevron-left'
      }, {
        tag: 'li',
        attr: {
          title: 'Next'
        },
        "class": 'page-next',
        child: 'a.mdi.mdi-chevron-right'
      }, {
        tag: 'li',
        attr: {
          title: 'Last'
        },
        "class": 'page-last',
        child: 'a.mdi.mdi-chevron-double-right'
      }]
    }]
  });
};

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-text': index + 1
      }
    },
    on: {
      click: PageSelector.eventHandler.clickIndex.bind(this, index)
    }
  });

  this.$buttonContainer.addChildBefore(button, this.$nextBtn);
  return button;
};

PageSelector.prototype.setPageRange = function (pageCount) {
  this._pageRange = pageCount;

  while (this._buttons.length < pageCount) {
    this._buttons.push(this._createButton(this._buttons.length));
  }

  while (this._buttons.length > pageCount) {
    this._buttons.pop().remove();
  }
};

PageSelector.prototype.setStartPage = function (index) {
  this._buttons.forEach(function (e, i) {
    e.firstChild.attr('data-index-text', 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._pageOffset + this._pageRange) 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;
  this.$pageCount.firstChild.data = '' + count;
  this.attr('data-page-count', count);
};

PageSelector.property = {};
PageSelector.property.selectedIndex = {
  set: function set(value) {
    this.selectPage(value, false);
  },
  get: function get() {
    return this._selectedIndex;
  }
};
PageSelector.property.pageCount = {
  set: function set(value) {
    this.setPageCount(value);
  },
  get: function get() {
    return this._pageCount;
  }
};
PageSelector.property.pageOffset = {
  set: function set(value) {
    this.setStartPage(value);
  },
  get: function get() {
    return this._pageOffset;
  }
};
PageSelector.property.pageRange = {
  set: function set(value) {
    this.setPageRange(value);
  },
  get: function get() {
    return this._pageRange;
  }
};

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);
  props = Object.assign({}, props);
  delete props.pageOffset;
  delete props.pageRange;
  delete props.pageCount;
  delete 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/src/AppPattern/VarScope.js
function VarScope(parent) {
  this.parent = parent;
  this.data = {};
}

VarScope.prototype.revoke = function (name) {
  delete this.data[name];
  return this;
};

VarScope.prototype.isDeclared = function (name) {
  return name in this.data;
};
/***
 *
 * @param name
 * @param initValue
 * @param {boolean=} force
 * @return {VarScope}
 */


VarScope.prototype.declare = function (name, initValue, force) {
  if (name in this.data && !force) throw new Error(name + ' is already delared in this scope!');
  this.data[name] = initValue;
  return this;
};

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/Network/XLoader.js
var XLoader = {};
function XLoader_loadScript(url, onComplete, onError) {
  return new Promise(function (resolve, reject) {
    var script = document.createElement("script");
    script.type = "text/javascript";

    if (script.readyState) {
      //IE
      script.onreadystatechange = function () {
        if (script.readyState === "loaded" || script.readyState === "complete") {
          script.onreadystatechange = null;
          onComplete && onComplete();
          resolve();
        }
      };
    } else {
      //Others
      script.onload = function () {
        script.onload = null;
        script.onerror = null;
        onComplete && onComplete();
        resolve();
      };

      script.onerror = function () {
        script.onerror = null;
        script.onload = null;
        script.remove();
        onError && onError();
        reject();
      };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
  });
}
XLoader.loadScript = XLoader_loadScript;
function isImageURLAllowCrossOrigin(url) {
  return new Promise(function (rs, rj) {
    url = url || '';

    if (url.startsWith('data:') || url.startsWith('blob:')) {
      rs(true);
      return;
    }

    var img = new Image(); // img.crossOrigin = "anonymous";

    img.onload = function () {
      var canvas = document.createElement('canvas');
      canvas.width = 10;
      canvas.height = 10;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(this, 0, 0);

      try {
        ctx.getImageData(0, 0, 10, 10);
        rs(true);
      } catch (err) {
        rs(false);
      }
    };

    img.onerror = function (event) {
      rj(event.error || event);
    };

    img.src = url;
  });
}
var blobCache = {};
/***
 *
 * @param {string} url
 * @param {boolean=}noCache
 * @return {*}
 */

function loadToBlobURL(url, noCache) {
  if (blobCache[url]) return blobCache[url];
  blobCache[url] = fetch(url).then(function (res) {
    return res.blob();
  }).then(function (blob) {
    return URL.createObjectURL(blob);
  });
  return blobCache[url];
}
/* harmony default export */ const Network_XLoader = ((/* unused pure expression or super */ null && (XLoader)));
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/PrintSerialHandlers.js







var PrintSerialHandlers_ = HTML5_Dom.ShareInstance._;
var PrintSerialHandlers_$ = HTML5_Dom.ShareInstance.$;
var PrintSerialHandlers_$$ = HTML5_Dom.ShareInstance.$$;
/***
 *
 * @param {AElement|HTMLElement} elt
 * @param {string=} ps
 * @return {*}
 */

function getComputedStyleCache(elt, ps) {
  ps = ps || '';
  var key = '__computedStyleCache__' + ps;
  if (elt[key]) return elt[key];
  elt[key] = ps ? getComputedStyle(elt, ps) : getComputedStyle(elt);
  return elt[key];
}
/***
 *
 * @param {AElement|HTMLElement} elt
 * @param {string} pName
 * @return {string}
 */

function getComputedStyleValueCache(elt, pName) {
  return getComputedStyleCache(elt).getPropertyValue(pName);
}
function computePrintAttr(elt) {
  var style = getComputedStyleCache(elt);
  var fontSize = elt.getFontSize();
  var lineHeight = style.getPropertyValue('line-height');
  if (lineHeight === 'normal') lineHeight = 1.2;else lineHeight = parseFloat(lineHeight.replace('px', '')) / fontSize;
  if (!isNaN(lineHeight)) lineHeight = 1.2;
  var fontWeight = style.getPropertyValue('font-weight');
  var fontStyle = fontWeight === '400' ? 'normal' : 'bold';
  var dirs = ['top', 'right', 'bottom', 'left'];
  var paddingStyle = dirs.map(function (dir) {
    return parseMeasureValue(style.getPropertyValue('padding-' + dir));
  });
  var borderWidthStyle = dirs.map(function (dir) {
    return parseMeasureValue(style.getPropertyValue('border-' + dir + '-width'));
  });
  var contentBound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
  contentBound.x += paddingStyle[3].value + borderWidthStyle[3].value;
  contentBound.y += paddingStyle[0].value + borderWidthStyle[0].value;
  contentBound.width += paddingStyle[1].value + borderWidthStyle[1].value + paddingStyle[3].value + borderWidthStyle[3].value;
  contentBound.height += paddingStyle[2].value + borderWidthStyle[2].value + paddingStyle[0].value + borderWidthStyle[0].value;
  return {
    contentBound: contentBound,
    whiteSpace: style.getPropertyValue('white-space'),
    style: {
      color: style.getPropertyValue('color'),
      fontFamily: style.getPropertyValue('font-family'),
      fontStyle: fontStyle,
      lineHeight: lineHeight,
      fontSize: fontSize,
      align: style.getPropertyValue('text-align')
    }
  };
}
/***
 *
 * @type {PSHandler[]}
 */

var PrintSerialHandlers = [];
PrintSerialHandlers.push({
  id: 'TextNode',
  match: function match(elt) {
    return elt.nodeType === Node.TEXT_NODE;
  },
  exec: function exec(printer, text, scope, stack, accept) {
    var O = printer.O;
    var elt = text.parentElement;
    var bound = Math_Rectangle.fromClientRect(getTextNodeBound(text));
    if (bound.width === 0) return;
    var printAttr = computePrintAttr(elt);
    var txt = text.data;
    var y = -Infinity;
    var c;
    var range;
    var parts = [];
    var cPart;
    var j;
    var delta = printAttr.style.lineHeight * printAttr.style.fontSize / 3;
    var rect;
    var i = 0;

    while (i < txt.length) {
      c = txt[i];

      if (!c.match(/[\s\n]/)) {
        j = i + 1;

        while (j < txt.length) {
          c = txt[j];

          if (c.match(/[\s\n]/)) {
            break;
          } else {
            ++j;
          }
        }

        range = document.createRange();
        range.setStart(text, i);
        range.setEnd(text, j);
        rect = Math_Rectangle.fromClientRect(range.getBoundingClientRect());

        if (Math.abs(rect.y - y) < delta) {
          cPart.end = j;
          cPart.rect = cPart.rect.merge(rect);
        } else {
          cPart = {
            start: i,
            end: j,
            rect: rect
          };
          y = rect.y;
          parts.push(cPart);
        }

        i = j;
      } else {
        ++i;
      }
    }

    parts.forEach(function (part) {
      rect = part.rect;
      rect.x -= O.x;
      rect.y -= O.y;
      rect.width += printAttr.style.fontSize * 1000;
      var lineTxt = txt.substring(part.start, part.end);

      if (printAttr.whiteSpace === 'normal') {
        lineTxt = lineTxt.replace(/[\s\n]+/g, ' ');
      }

      delete printAttr.style.align; //text-node bound

      printer.text(lineTxt, rect, printAttr.style);
    });
  }
});
PrintSerialHandlers.push({
  id: 'Border',
  match: function match(elt, scope, stack) {
    if (scope.isDeclared('borderStyle')) return false;
    var style = getComputedStyleCache(elt);
    var borderColor = style.getPropertyValue('border-color');
    var borderStyle = style.getPropertyValue('border-style');
    var borderWidth = style.getPropertyValue('border-width');
    var borderRadius = style.getPropertyValue('border-radius');
    if (borderStyle === 'none' || borderWidth === '0px') return false;
    scope.declare('borderStyle', {
      width: parseFloat(borderWidth.replace('px', '')),
      radius: parseMeasureValue(borderRadius),
      color: borderColor
    });
    return true;
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var borderStyle = scope.get('borderStyle');
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    var rect = bound.clone();
    var strokeWidth = borderStyle.width;

    if (elt.tagName === 'TD' || elt.tagName === 'TH') {
      rect.x -= printer.O.x;
      rect.y -= printer.O.y;
    } else {
      rect.x -= printer.O.x - strokeWidth / 2;
      rect.y -= printer.O.y - strokeWidth / 2;
      rect.width -= strokeWidth;
      rect.height -= strokeWidth;
    }

    var radius = borderStyle.radius;
    var rounded;

    if (radius) {
      switch (radius.unit) {
        case '%':
          rounded = [radius.value * rect.width / 100, radius.value * rect.height / 100];
          break;

        case 'px':
          rounded = radius.value;
          break;
      }
    }

    printer.rect(rect, {
      stroke: borderStyle.color,
      rounded: rounded,
      strokeWidth: strokeWidth
    });
    return true;
  }
});
PrintSerialHandlers.push({
  id: 'BackgroundImage',
  match: function match(elt, scope, stack) {
    return elt.getComputedStyleValue('background-image') !== 'none';
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var style = getComputedStyleCache(elt);
    var backgroundSize = style.getPropertyValue('background-size');
    var url = style.getPropertyValue('background-image').trim().replace('url("', '').replace('")', '');
    var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    var borderRadius = ['top-left', 'top-right', 'bottom-right', 'bottom-left'].map(function (key) {
      return parseMeasureValue(style.getPropertyValue('border-' + key + '-radius'));
    });
    var image = isImageURLAllowCrossOrigin(url).then(function (result) {
      /***
       *
       * @type {HTMLCanvasElement}
       */
      var canvas = document.createElement('canvas');
      var width = rect.width;
      var height = rect.height;
      canvas.width = width;
      canvas.height = height;
      var image = new Image();
      image.crossOrigin = 'anonymous';
      image.src = result ? url : 'https://absol.cf/crossdownload.php?file=' + encodeURIComponent(url);
      var ctx = canvas.getContext('2d');
      var isRect = borderRadius.every(function (x) {
        return x.value === 0;
      });
      var x, y, r;
      var eclipses = [];
      var points = [];

      if (!isRect) {
        r = borderRadius[0];
        x = r.unit === '%' ? r.value / 100 * width : r.value;
        y = 0;
        points.push([x, y]);
        r = borderRadius[1];
        x = r.unit === '%' ? (1 - r.value / 100) * width : width - r.value;
        points.push([x, y]);

        if (r.value > 0) {
          y = r.unit === '%' ? r.value / 100 * height : r.value;
          eclipses.push([x, y, width - x, y, 0, -Math.PI / 2, 0]);
          x = width;
          points.push([x, y]);
        } else {
          x = width;
        }

        r = borderRadius[2];
        y = r.unit === '%' ? (1 - r.value / 100) * height : height - r.value;
        points.push([x, y]);

        if (r.value > 0) {
          x = r.unit === '%' ? (1 - r.value / 100) * width : width - r.value;
          eclipses.push([x, y, width - x, height - y, 0, 0, Math.PI / 2]);
          y = height;
          points.push([x, y]);
        } else {
          y = height;
        }

        r = borderRadius[3];
        x = r.unit === '%' ? r.value / 100 * width : r.value;
        points.push([x, y]);

        if (r.value > 0) {
          y = r.unit === '%' ? (1 - r.value / 100) * height : height - r.value;
          eclipses.push([x, y, x, height - y, 0, Math.PI / 2, Math.PI]);
          x = 0;
          points.push([x, y]);
        } else {
          x = 0;
        }

        r = borderRadius[0];
        y = r.unit === '%' ? r.value / 100 * height : r.value;
        points.push([x, y]);

        if (r.value > 0) {
          x = r.unit === '%' ? r.value / 100 * width : r.value;
          eclipses.push([x, y, x, y, 0, Math.PI, Math.PI * 3 / 2]);
        }

        ctx.beginPath();
        points.forEach(function (p, i) {
          if (i === 0) ctx.moveTo(p[0], p[1]);else ctx.lineTo(p[0], p[1]);
        });
        ctx.closePath();
        ctx.fillStyle = 'red';
        ctx.fill();
        eclipses.forEach(function (e) {
          ctx.beginPath();
          ctx.ellipse(e[0], e[1], e[2], e[3], e[4], e[5], e[6]);
          ctx.fill();
        });
        ctx.globalCompositeOperation = 'source-in';
      }

      return new Promise(function (rs) {
        image.onload = function () {
          var scale;
          var nW;
          var nH; //todo: handle more

          switch (backgroundSize) {
            case 'cover':
              scale = Math.max(width / image.naturalWidth, height / image.height);
              nW = image.naturalWidth * scale;
              nH = image.naturalHeight * scale;
              ctx.drawImage(image, 0, 0, nW, nH);
              break;

            case 'auto':
            default:
              ctx.drawImage(image, 0, 0);
          }

          rs(canvas);
        };

        image.onerror = function () {
          console.error('can not load ', image.src);
          rs(null);
        };
      });
    })["catch"](function (err) {
      console.error(err);
    });
    printer.image(image, rect);
    return true;
  }
});
PrintSerialHandlers.push({
  id: 'BreakInside',
  match: function match(elt, scope, stack) {
    return getComputedStyleValueCache(elt, 'break-inside') === 'avoid';
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    printer.rect(rect, {});
    return true;
  }
});
PrintSerialHandlers.push({
  id: 'MDI_FA',
  match: function match(elt, scope, stack) {
    return elt.classList && (elt.classList.contains('mdi') || elt.classList.contains('fab') || elt.classList.contains('far') || elt.classList.contains('fas') || elt.classList.contains('material-icons'));
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var style = elt.classList.contains('material-icons') ? getComputedStyleCache(elt) : getComputedStyleCache(elt, '::before');
    var content = elt.classList.contains('material-icons') ? elt.innerHTML : style.getPropertyValue('content');
    content = content.replace('"', '');
    var font = style.getPropertyValue('font');
    var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    if (rect.width * rect.height === 0) return;
    var canvas = document.createElement('canvas');
    canvas.width = rect.width;
    canvas.height = rect.height;
    var ctx = canvas.getContext('2d');
    ctx.font = font;
    ctx.textBaseline = "top";
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    ctx.fillStyle = style.getPropertyValue('color');
    ctx.fillText(content, 0, 0);
    printer.image(canvas, rect);
  }
});
PrintSerialHandlers.push({
  id: 'Img',
  match: function match(elt) {
    return elt.tagName && elt.tagName.toLowerCase() === 'img' && elt.src && elt.naturalWidth;
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    if (bound.width === 0) return;
    var rect = bound.clone();
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    printer.image(elt, rect);
  }
});
PrintSerialHandlers.push({
  id: 'Canvas',
  match: function match(elt) {
    return elt.tagName && elt.tagName.toLowerCase() === 'canvas';
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    if (bound.width === 0) return;
    var rect = bound.clone();
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    printer.image(elt, rect);
  }
});
PrintSerialHandlers.push({
  id: 'SVG',
  match: function match(elt) {
    return elt.tagName && elt.tagName.toLowerCase() === 'svg';
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    if (bound.width === 0) return;
    var rect = bound.clone();
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    var res = HTML5_Svg.svgToCanvas(elt.__origin__)["catch"](function (err) {
      console.error(err);
    });
    res.elt = elt;
    printer.image(res, rect);
  }
});
PrintSerialHandlers.push({
  id: 'TextInput',
  match: function match(elt, scope, stack) {
    return elt.tagName === 'INPUT' && (elt.attr('type') === 'text' || elt.attr('type') === 'number' || !elt.attr('type'));
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var O = printer.O;
    var style = getComputedStyleCache(elt);
    var paddingLeft = parseMeasureValue(style.getPropertyValue('padding-left'));
    var paddingTop = parseMeasureValue(style.getPropertyValue('padding-top'));
    var paddingBottom = parseMeasureValue(style.getPropertyValue('padding-bottom'));
    var borderLeftWidth = parseMeasureValue(style.getPropertyValue('border-left-width'));
    var borderTopWidth = parseMeasureValue(style.getPropertyValue('border-top-width'));
    var borderBottomWidth = parseMeasureValue(style.getPropertyValue('border-top-width'));
    var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    var fontSize = elt.getFontSize();
    var lineHeight = style.getPropertyValue('line-height');
    if (lineHeight === 'normal') lineHeight = 1.2;else lineHeight = parseFloat(lineHeight.replace('px', '')) / fontSize;
    if (!isNaN(lineHeight)) lineHeight = 1.2;
    var fontWeight = style.getPropertyValue('font-weight');
    var fontStyle = fontWeight === '400' ? 'normal' : 'bold';
    rect.width = 700;
    rect.x += borderLeftWidth.value + paddingLeft.value - O.x;
    rect.height -= borderTopWidth.value + borderBottomWidth.value + paddingTop.value + paddingBottom.value;
    rect.y += borderTopWidth.value + paddingTop.value - O.y;
    var centerY = rect.centerPoint().y;
    rect.y = centerY - fontSize * lineHeight / 2;
    rect.height = fontSize * lineHeight;
    printer.text(elt.value, rect, {
      fontFamily: style.getPropertyValue('font-family'),
      fontStyle: fontStyle,
      fontSize: fontSize,
      lineHeight: lineHeight
    });
  }
});
PrintSerialHandlers.push({
  id: 'BreakPage',
  match: function match(elt) {
    return elt.hasClass && elt.hasClass('as-page-break');
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    printer.pageBreak(rect.A());
  }
});
PrintSerialHandlers.push({
  id: '*',
  match: function match() {
    return true;
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    if (elt.getComputedStyleValue('display') === 'none') return;

    if (elt.childNodes) {
      Array.prototype.forEach.call(elt.childNodes, function (child) {
        return accept(child);
      });
    }
  }
});
/* harmony default export */ const Print_PrintSerialHandlers = (PrintSerialHandlers);
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/PrintSerializer.js
function PrintSerializer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PrintSerializer_typeof = function _typeof(obj) { return typeof obj; }; } else { PrintSerializer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PrintSerializer_typeof(obj); }








/***
 * @typedef {Object} PSHandler
 * @property {string} id
 * @property {function(elt:AElement, scope: VarScope, stack:Array<AElement>):boolean} match
 * @property {function(printer: PaperPrinter,elt:AElement|Text, scope: VarScope, stack:Array<{elt: AElement|Text, scope:VarScope}>, accept: function():void):(boolean|void)} exec - return true if run other handle
 *
 */

/***
 *
 * @constructor
 */

function PrintSerializer() {
  /***
   * @type {Array<PSHandler>}
   */
  this.handlers = this.handlers.slice();
}

PrintSerializer.prototype.handlers = Print_PrintSerialHandlers;
/***
 *
 * @param {PaperPrinter} printer
 * @param {AElement|AElementNS|Text} elt
 * @param {VarScope} scope
 * @param {Array<{elt: AElement|Text, scope:VarScope}>} stack
 */

PrintSerializer.prototype.accept = function (printer, elt, scope, stack) {
  var _this = this;

  if (elt.nodeType === Node.ELEMENT_NODE) HTML5_Dom.ShareInstance.$(elt);
  var handler;
  var matched, cont;

  for (var i = 0; (!matched || cont) && i < this.handlers.length; ++i) {
    handler = this.handlers[i];
    matched = handler.match(elt, scope, stack);

    if (matched) {
      cont = handler.exec(printer, elt, scope, stack, function (elt1) {
        _this.accept(printer, elt1, new AppPattern_VarScope(scope), stack.concat([{
          elt: elt,
          scope: scope
        }]));
      });
    }
  }
};
/***
 *
 * @param {Array<AElement> | AElement | Array<{elt: AElement, opt:Object}>} docList
 * @param printer
 * @param onProcess
 * @return {Promise<Awaited<unknown>[]>}
 */


PrintSerializer.prototype.serialize = function (docList, printer, _onProcess) {
  var _this2 = this;

  var $ = HTML5_Dom.ShareInstance.$;
  if (!(docList instanceof Array)) docList = [docList];
  docList = docList.map(function (doc) {
    if (typeof doc === "string") {
      return {
        elt: $(doc)
      };
    } else if (Dom_isDomNode(doc)) {
      return {
        elt: $(doc)
      };
    } else if (PrintSerializer_typeof(doc) === "object" && doc) {
      if (typeof doc.elt === "string") doc.elt = $(doc.elt);
      if (doc.elt && Dom_isDomNode(doc.elt)) return doc;
    } else return null;
  }).filter(function (it) {
    return !!it;
  });
  var sync = [];
  var processInfo = {
    state: 'RENDER_DOM',
    total: {
      all: 0,
      text: 0,
      image: 0
    },
    dom: {
      text: 0,
      image: 0
    },
    onProcess: function onProcess() {
      _onProcess && _onProcess(processInfo);
    }
  };
  printer.processInfo = processInfo;
  var contentChildList = docList.map(function (doc) {
    var elt = doc.elt;
    return depthClone(elt, function (originElt, copyElt) {
      copyElt.__idx__ = processInfo.total.all;
      copyElt.__origin__ = originElt;
      processInfo.total.all++;
      var parent, fontWeight, style;
      var done = false;

      if (originElt.nodeType === Node.TEXT_NODE) {
        processInfo.total.text++;
        sync.push(new Promise(function (rs) {
          setTimeout(function () {
            parent = originElt.parentElement;

            if (!copyElt.__fontWeight__) {
              style = getComputedStyle(parent);
              fontWeight = parseInt(style.getPropertyValue('font-weight')); //not support other style

              copyElt.__fontWeight__ = fontWeight;

              if (fontWeight <= 400) {
                copyElt.parentElement.style.setProperty('font-weight', 'normal');
              } else if (fontWeight > 400) {
                copyElt.parentElement.style.setProperty('font-weight', 'bold');
              }

              processInfo.dom.text++;
            }

            processInfo.dom.text++;
            rs();
          }, 0);
        }));
      } else if (originElt.tagName && originElt.tagName.toLowerCase() === 'canvas') {
        copyElt.getContext('2d').drawImage(originElt, 0, 0);
      } else if (originElt.tagName === 'IMG' && !originElt.classList.contains('absol-attachhook') && originElt.src) {
        processInfo.total.image++;
        sync.push(isImageURLAllowCrossOrigin(originElt.src).then(function (result) {
          var newElt;

          if (!result) {
            newElt = copyElt.cloneNode();
            newElt.__idx__ = copyElt.__idx__;
            newElt.__origin__ = copyElt.__origin__;
            ;
            copyElt.parentElement.replaceChild(newElt, copyElt);
            return loadToBlobURL('https://absol.cf/crossdownload.php?file=' + encodeURIComponent(originElt.src)).then(function (url) {
              return newElt.src = url;
            }).then(function () {
              return waitImageLoaded(newElt, 10000);
            }).then(function () {
              if (!done) {
                processInfo.dom.image++;
                processInfo.onProcess();
                done = true;
              }
            });
          } else {
            return waitImageLoaded(copyElt, 10000).then(function () {
              if (!done) {
                processInfo.dom.image++;
                processInfo.onProcess();
                done = true;
              }
            });
          }
        }, function (err) {
          console.error(err);

          if (!done) {
            processInfo.dom.image++;
            processInfo.onProcess();
            done = true;
          }
        }));
      } else if (originElt.tagName === 'INPUT') {
        if (originElt.getAttribute('type') === 'text' || !originElt.getAttribute('type') || originElt.getAttribute('type') === 'number') {
          copyElt.value = originElt.value;
        } else if (originElt.getAttribute('type') === 'radio') {
          copyElt.setAttribute('name', (copyElt.getAttribute('name') || randomIdent()) + '_for_print');
          copyElt.checked = originElt.checked;
        }
      }
    });
  });

  var content = HTML5_Dom.ShareInstance._({
    style: {
      width: 794 - 57 * 2 + 'px',
      //WIDTH: 1123 - 57*2
      display: 'inline-block',
      overflow: 'visible'
    },
    "class": 'as-printer-content',
    child: contentChildList
  });

  var scroller = HTML5_Dom.ShareInstance._({
    "class": 'as-printer',
    style: {
      'text-size-adjust': 'none',
      '-webkit-text-size-adjust': 'none',
      '-moz-text-size-adjust': 'none',
      '-ms-text-size-adjust': 'none',
      position: 'fixed',
      top: '10px',
      bottom: '10px',
      left: '10px',
      overflow: 'scroll',
      width: '794px',
      // maxWidth: '90vw',
      background: 'white',
      // zIndex: 1000,
      opacity: '0',
      zIndex: '-100',
      visibility: 'hidden',
      pointerEvents: 'none'
    },
    child: content
  }).addTo(document.body);

  sync.push(new Promise(function (rs) {
    setTimeout(rs, 50);
  }));
  return Promise.all(sync).then(function () {
    processInfo.state = "SERIALIZE";
    processInfo.onProcess();
    docList.forEach(function (doc, i) {
      printer.O = Math_Rectangle.fromClientRect(contentChildList[i].getBoundingClientRect()).A();
      printer.addSubDocument(printer.O, doc.opt);

      _this2.accept(printer, contentChildList[i], new AppPattern_VarScope(), []);
    });
  }).then(function () {
    scroller.remove();
    processInfo.onProcess = noop;
    return printer;
  });
};
/***
 *
 * @param {PSHandler} handler
 * @returns {this}
 */


PrintSerializer.prototype.addHandler = function (handler) {
  this.handlers.unshift(handler);
  return this;
};
/***
 *
 * @param {PSHandler} handler
 * @param {string} bf
 * @returns {this}
 */


PrintSerializer.prototype.addHandlerBefore = function (handler, bf) {
  var idx = this.handlers.findIndex(function (value) {
    return value.id === bf;
  });

  if (idx >= 0) {
    this.handlers.splice(idx, 0, handler);
  }

  return this;
};
/***
 *
 * @param {PSHandler} handler
 * @param {string} at
 * @returns {this}
 */


PrintSerializer.prototype.addHandlerAfter = function (handler, at) {
  var idx = this.handlers.findIndex(function (value) {
    return value.id === at;
  });

  if (idx >= 0) {
    this.handlers.splice(idx + 1, 0, handler);
  }

  return this;
};
/***
 *
 * @param {Array<PSHandler>} handlers
 * @returns {this}
 */


PrintSerializer.prototype.addHandlers = function (handlers) {
  this.handlers.unshift.apply(this.handlers, handlers);
  return this;
};
/***
 *
 * @param {string} id
 * @returns {this}
 */


PrintSerializer.prototype.removeHandler = function (id) {
  var idx = this.handlers.findIndex(function (value) {
    return value.id === id;
  });

  if (idx >= 0) {
    this.handlers.splice(idx, 1);
  }

  return this;
};
/***
 *
 * @param {string} id
 * @returns {PSHandler|null}
 */


PrintSerializer.prototype.getHandler = function (id) {
  var idx = this.handlers.findIndex(function (value) {
    return value.id === id;
  });

  if (idx >= 0) {
    return this.handlers[idx];
  }

  return null;
};

/* harmony default export */ const Print_PrintSerializer = (PrintSerializer);
;// 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); }

/**
 *
 * @param obj
 * @param {string=}indent
 * @param {object=}opt
 * @returns {string}
 */
function generateJSVariable(obj, indent, opt) {
  indent = indent || '';
  var childIndent = indent + '    ';

  if (obj === null) {
    return 'null';
  } else if (obj instanceof Date) {
    return 'new Date(' + obj.getTime() + ')';
  } else if (obj instanceof Array) {
    if (obj.length === 0) return '[]';
    return '[\n' + obj.map(function (it) {
      return childIndent + generateJSVariable(it, childIndent, opt);
    }).join(',\n') + '\n' + indent + ']';
  } else if (obj instanceof Error) {
    return generateJSVariable({
      message: obj.message,
      stack: obj.stack
    });
  } 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, opt);
    }).join(',\n') + '\n' + indent + '}';
  } else if (obj === undefined) {
    return 'undefined';
  } else {
    return JSON.stringify(obj);
  }
}
/***
 *
 * @param o
 * @param {Array<{test, replace}>| null=} replacers
 * @returns {*}
 */

function copyJSVariable(o, replacers) {
  var _arguments = arguments;
  var replacer;

  if (replacers && replacers.length > 0) {
    replacer = replacers.find(function (rp) {
      return rp.test.apply(rp, [o].concat(Array.prototype.slice.call(_arguments, 2)));
    });

    if (replacer) {
      return replacer.replace.apply(replacer, [o].concat(Array.prototype.slice.call(arguments, 2)));
    }
  }

  if (o === null) return null;
  if (o === undefined) return undefined;

  var type = generator_typeof(o);

  if (type === "boolean") return o;
  if (o instanceof Date || typeof o.getTime === "function") return new Date(o.getTime());
  if (type === "number") return o;
  if (type === "string") return o + '';

  if (typeof o.map === "function") {
    return o.map(function (it, i) {
      return copyJSVariable(it, replacers, i, o);
    });
  }

  if (type === "object" && o.constructor === Object) {
    return Object.keys(o).reduce(function (ac, cr) {
      ac[cr] = copyJSVariable(o[cr], replacers, cr, o);
      return ac;
    }, {});
  }

  return o;
}
function replaceDateStringJSVariable(o) {
  return copyJSVariable(o, [{
    test: function test(x) {
      return typeof x === "string" && x.match(/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)\s+([a-zA-Z]{3})\s+[\d\s:]+GMT[\d+]+\s*\([^)]+\)$/) && !isNaN(new Date(x).getTime());
    },
    replace: function replace(x) {
      return new Date(x);
    }
  }]);
}
/***
 *
 * @param a
 * @param b
 * @return {boolean}
 */

function isJSVariableEqual(a, b) {
  if (a === b) return true; //1

  var tA = generator_typeof(a);

  var tB = generator_typeof(b);

  if (tA !== tB) return false; //2

  if (!a !== !b) return false;
  if (tA === 'string') return false; //because 1 & 2

  if (tA === "number") {
    if (isNaN(a) && isNaN(b)) return true; //because 2

    return false; //because 1
  }

  var aIsDate = a instanceof Date;
  var bIsDate = b instanceof Date;
  if (aIsDate !== bIsDate) return false;
  if (aIsDate) return isJSVariableEqual(a.getTime(), b.getTime());
  var aIsArray = a instanceof Array;
  var bIsArray = a instanceof Array;
  if (aIsArray !== bIsArray) return false;
  var i;

  if (aIsArray) {
    if (a.length !== b.length) return false;

    for (i = 0; i < a.length; ++i) {
      if (!isJSVariableEqual(a[i], b[i])) return false;
    }

    return true;
  } //object


  if (a.equals) return a.equals(b);
  var aKeys = Object.keys(a);
  var bKeys = Object.keys(b);
  aKeys.sort();
  bKeys.sort();
  if (!isJSVariableEqual(aKeys, bKeys)) return false;

  for (i = 0; i < aKeys.length; ++i) {
    if (!isJSVariableEqual(a[aKeys[i]], b[aKeys[i]])) return false;
  }

  return true;
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/PaperPrinter.js







var fontIdOf = function fontIdOf(fontName) {
  if (fontName.toLowerCase().indexOf('arial') >= 0) return 'arial';
  if (fontName.toLowerCase().indexOf('times') >= 0) return 'times';
  if (fontName === "Material Design Icons") return 'MDI_6_7_96';
  return fontName;
};

var P2D = 72 / 96;

var color2RGB255 = function color2RGB255(color) {
  try {
    color = src_Color_Color.parse(color + '');
    return color.rgba.slice(0, 3).map(function (x) {
      return x * 255 >> 0;
    });
  } catch (e) {
    return null;
  }
};

function PaperPrinter_PaperPrinter(opt) {
  var _this = this;

  this.opt = Object.assign(copyJSVariable(this.defaultOptions), opt);
  this.objects = [];
  this.processInfo = {
    state: "STAND_BY"
  };
  this.subDocs = null;
  this.pdfDoc = null;
  this.pageFormat = null;
  this.computedPages = 0;
  this.sync = this.ready().then(function () {
    _this.processInfo.state = 'READY';
  });
}

PaperPrinter_PaperPrinter.prototype.defaultOptions = {
  size: 'a4',
  margin: {
    top: 57,
    left: 57,
    bottom: 57,
    right: 57
  },
  footer: null,
  header: null,
  paddingEven: true,
  lastPagePaddingEven: false
};
PaperPrinter_PaperPrinter.prototype.share = {
  jsPDFUrl: 'https://absol.cf/vendor/jspdf.umd.js',
  jsPDF: null,
  readySync: null,
  fonts: [{
    url: 'https://absol.cf/vendor/fonts/arial.ttf',
    fileName: 'arial.ttf',
    name: 'arial',
    style: 'normal'
  }, {
    url: 'https://absol.cf/vendor/fonts/arialbd.ttf',
    fileName: 'arialbd.ttf',
    name: 'arial',
    style: 'bold'
  }, {
    url: 'https://absol.cf/vendor/fonts/ariali.ttf',
    fileName: 'ariali.ttf',
    name: 'arial',
    style: 'italic'
  }, {
    url: 'https://absol.cf/vendor/fonts/arialbi.ttf',
    fileName: 'arialbi.ttf',
    name: 'arial',
    style: 'bold_italic'
  }, {
    url: 'https://absol.cf/vendor/fonts/times.ttf',
    fileName: 'times.ttf',
    name: 'times',
    style: 'normal'
  }, {
    url: 'https://absol.cf/vendor/fonts/timesbd.ttf',
    fileName: 'timesbd.ttf',
    name: 'times',
    style: 'bold'
  }, {
    url: 'https://absol.cf/vendor/fonts/timesi.ttf',
    fileName: 'timesi.ttf',
    name: 'times',
    style: 'italic'
  }, {
    url: 'https://absol.cf/vendor/fonts/timesbi.ttf',
    fileName: 'timesbi.ttf',
    name: 'times',
    style: 'bold_italic'
  }]
};

PaperPrinter_PaperPrinter.prototype.ready = function () {
  var _this2 = this;

  var sync;

  if (!this.share.readySync) {
    sync = this.share.fonts.map(function (font) {
      return fetch(font.url).then(function (res) {
        return res.blob();
      }).then(function (blob) {
        var reader = new window.FileReader();
        return new Promise(function (rs) {
          reader.onload = function () {
            rs(this.result);
          };

          reader.readAsDataURL(blob);
        });
      }).then(function (b64Url) {
        var idx = b64Url.indexOf('base64,');
        return b64Url.substring(idx + 'base64,'.length);
      }).then(function (b64) {
        font.content = b64;
      });
    });

    if (window.jspdf) {
      this.share.jsPDF = window.jspdf.jsPDF;
    } else {
      sync.push(XLoader_loadScript(this.share.jsPDFUrl).then(function () {
        _this2.share.jsPDF = window.jspdf.jsPDF;
      }));
    }

    this.share.readySync = Promise.all(sync);
  }

  return this.share.readySync;
};
/***
 *
 * @param at
 * @param opt
 */


PaperPrinter_PaperPrinter.prototype.addSubDocument = function (at, opt) {
  this.objects.push({
    type: 'sub_document',
    at: at,
    opt: opt
  });
};
/***
 *
 * @param {string} text
 * @param {Vec2 | Rectangle} pos
 * @param {Object=}style
 */


PaperPrinter_PaperPrinter.prototype.text = function (text, pos, style) {
  this.objects.push({
    type: 'text',
    pos: pos,
    text: text,
    style: style || {}
  });
  return this;
};
/***
 *
 * @param {string} text
 * @param {Vec2} start
 * @param {Vec2} end
 * @param {Object=}style
 */


PaperPrinter_PaperPrinter.prototype.line = function (start, end, style) {
  this.objects.push({
    type: 'line',
    start: start,
    end: end,
    style: style || {}
  });
  return this;
};
/***
 *
 * @param {Vec2} at
 * @param {boolean=} paddingEven
 */


PaperPrinter_PaperPrinter.prototype.pageBreak = function (at, paddingEven) {
  this.objects.push({
    type: 'page_break',
    at: at,
    paddingEven: !!paddingEven
  });
  return this;
};
/***
 *
 * @param {Rectangle}rect
 * @param {Object=}style
 */


PaperPrinter_PaperPrinter.prototype.rect = function (rect, style) {
  this.objects.push({
    type: 'rect',
    rect: rect,
    style: style || {}
  });
};
/***
 *
 * @param {HTMLCanvasElement|AElement |Image} image
 * @param {Rectangle}rect
 * @param {Object=}style
 */


PaperPrinter_PaperPrinter.prototype.image = function (image, rect, style) {
  this.objects.push({
    type: 'image',
    rect: rect,
    style: style || {},
    image: image
  });
  return this;
};

PaperPrinter_PaperPrinter.prototype.boundOf = function (objectData) {
  return this.measures[objectData.type](objectData);
};

PaperPrinter_PaperPrinter.prototype.computeObjects = function () {
  var _this3 = this;

  var objects = this.objects.slice();

  if (!objects[0] || objects[0].type !== 'sub_document') {
    objects.unshift({
      type: 'sub_document',
      at: Math_Vec2.ZERO
    });
  }

  this.subDocs = objects.reduce(function (ac, obj) {
    switch (obj.type) {
      case 'sub_document':
        ac.push({
          objects: [obj]
        });
        break;

      default:
        ac[ac.length - 1].objects.push(obj);
        break;
    }

    return ac;
  }, []);
  this.subDocs.forEach(function (doc, i) {
    doc.objects.forEach(function (o, i) {
      o.idx = i;
      o.bound = _this3.boundOf(o);
    });
    var newDocCmd = doc.objects.shift();
    doc.objects.sort(function (a, b) {
      return a.bound.y - b.bound.y;
    });
    doc.opt = Object.assign(copyJSVariable(_this3.opt), newDocCmd.opt || {});
    doc.objects.unshift(newDocCmd);
    doc.startPage = i > 0 ? _this3.subDocs[i - 1].startPage + _this3.subDocs[i - 1].pages.length : _this3.computedPages;
    if (_this3.opt.paddingEven && doc.startPage % 2 > 0) doc.startPage++;
    var pageContentHeight = 1123 - doc.opt.margin.top - doc.opt.margin.bottom;
    doc.pages = doc.objects.reduce(function (ac, cr) {
      var page = ac[ac.length - 1];

      if (cr.bound.height > pageContentHeight) {
        page.object.push(cr);
      } else {
        if (cr.bound.y + cr.bound.height - page.y > pageContentHeight || cr.type === 'page_break') {
          page = {
            y: cr.bound.y,
            objects: [cr]
          };
          ac.push(page);
        } else {
          page.objects.push(cr);
        }
      }

      return ac;
    }, [{
      objects: [],
      y: 0
    }]);
    doc.pages.forEach(function (page) {
      return page.objects.sort(function (a, b) {
        return a.idx - b.idx;
      });
    });
    _this3.computedPages = doc.startPage + doc.pages.length;
  });
};

PaperPrinter_PaperPrinter.prototype.getDoc = function () {
  var _this4 = this;

  if (this.docSync) return this.docSync;
  this.docSync = this.sync.then(function () {
    if (_this4.pdfDoc) return _this4.pdfDoc;
    var jsPDF = jspdf.jsPDF;
    _this4.pdfDoc = new jsPDF({
      orientation: 'p',
      unit: 'px',
      format: 'a4',
      putOnlyUsedFonts: true,
      floatPrecision: 16,
      dpi: 300,
      hotfixes: ["px_scaling"]
    });

    _this4.share.fonts.forEach(function (font) {
      _this4.pdfDoc.addFileToVFS(font.fileName, font.content);

      _this4.pdfDoc.addFont(font.fileName, font.name, font.style);
    });

    return _this4.pdfDoc;
  });
  this.sync = this.docSync;
  return this.docSync;
};

PaperPrinter_PaperPrinter.prototype.flush = function () {
  var _this5 = this;

  this.sync = this.getDoc().then(function (pdfDoc) {
    _this5.computeObjects();

    var subDocs = _this5.subDocs;
    _this5.subDocs = null; //reset

    var onProcess = _this5.opt.onProcess;
    var processInfo = _this5.processInfo;
    processInfo.pdf = {
      all: subDocs.reduce(function (ac, sD) {
        return ac + sD.objects.length;
      }, 0),
      done: 0
    };

    processInfo.onProcess = function () {
      onProcess && onProcess(processInfo);
    };

    processInfo.state = 'RENDER_PDF';
    return subDocs.reduce(function (sync, doc, i) {
      return sync.then(function () {
        var startPage = doc.startPage;

        while (pdfDoc.getNumberOfPages() <= startPage) {
          pdfDoc.addPage();
        }

        return doc.pages.reduce(function (docSync, page, i) {
          return docSync.then(function () {
            if (pdfDoc.getNumberOfPages() <= startPage + i) {
              pdfDoc.addPage();
            }

            pdfDoc.setPage(startPage + i + 1);
            page.O = new Math_Vec2(_this5.opt.margin.left, _this5.opt.margin.top - page.y);
            return page.objects.reduce(function (pageSync, obj) {
              return pageSync.then(function () {
                var type = obj.type;

                var res = _this5.pdfHandlers[type](page, pdfDoc, obj);

                processInfo.pdf.done++;

                if (res && res.then) {
                  res.then(function () {
                    return processInfo.onProcess();
                  });
                }

                return res;
              });
            }, Promise.resolve()).then(function () {
              pdfDoc.setTextColor(0, 0, 0);
              pdfDoc.setFontSize(14 * P2D);
              pdfDoc.setFont('arial', 'normal');
              pdfDoc.text(i + 1 + '/' + doc.pages.length, 794 - 25, 1123 - 25, {
                align: 'right'
              });

              if (typeof doc.opt.footer === 'string') {
                pdfDoc.text(doc.opt.footer, 25, 1123 - 25, {
                  align: 'left'
                });
              }
            });
          });
        }, Promise.resolve()).then(function () {
          if (_this5.opt.lastPagePaddingEven) {
            while (pdfDoc.getNumberOfPages() % 2 > 0) {
              pdfDoc.addPage();
            }
          }
        });
      });
    }, Promise.resolve());
  });
  return this.sync;
};

PaperPrinter_PaperPrinter.prototype.exportAsPDF = function () {
  var _this6 = this;

  return this.flush().then(function () {
    return _this6.pdfDoc;
  });
};

PaperPrinter_PaperPrinter.prototype.pdfHandlers = {
  text: function text(context, doc, data) {
    var fontFamily = data.style.fontFamily;
    var lineHeight = data.style.lineHeight || 1.2;
    var color = color2RGB255(data.style.color) || [0, 0, 0];
    doc.setTextColor(color[0], color[1], color[2]);
    var fontSize = data.style.fontSize || 14;
    var textPos = data.pos.A().add(context.O);
    doc.setLineHeightFactor(lineHeight);
    doc.setFontSize(fontSize * P2D);
    doc.setFont(fontIdOf(fontFamily), data.style.fontStyle);
    var style = {
      baseline: 'top',
      maxWidth: data.pos.width
    };

    if (data.style.align) {
      //todo: check align
      style.align = {
        start: 'left',
        end: 'right',
        center: 'center'
      }[data.style.align] || 'left';
    }

    doc.text(data.text, textPos.x, textPos.y + fontSize * (lineHeight - 1) / 2, style);
  },
  rect: function rect(context, doc, data) {
    var fillColor = null;
    var strokeColor = null;
    var strokeWidth = data.style.strokeWidth || 1;
    var rounded = data.style.rounded;
    if (typeof rounded === "number") rounded = [rounded, rounded];

    if (data.style.fill) {
      fillColor = color2RGB255(data.style.fill);
    }

    if (data.style.stroke) {
      strokeColor = color2RGB255(data.style.stroke);
    }

    if (fillColor) doc.setFillColor(fillColor[0], fillColor[1], fillColor[2]);

    if (strokeColor) {
      doc.setLineWidth(strokeWidth);
      doc.setDrawColor(strokeColor[0], strokeColor[1], strokeColor[2]);
    }

    var flat = 'F';
    if (strokeColor && fillColor) flat = 'FD';else if (strokeColor) flat = 'S';else if (fillColor) flat = 'F';else return;
    var O = context.O;
    var A = data.rect.A().add(O);

    if (rounded) {
      doc.roundedRect(A.x, A.y, data.rect.width, data.rect.height, rounded[0], rounded[1], flat);
    } else {
      doc.rect(A.x, A.y, data.rect.width, data.rect.height, flat);
    }
  },
  line: function line(context, doc, data) {
    var fillColor = null;
    var strokeColor = null;
    var strokeWidth = data.style.strokeWidth || 1;

    if (data.style.stroke) {
      strokeColor = color2RGB255(data.style.stroke);
    }

    if (strokeColor) {
      doc.setLineWidth(strokeWidth);
      doc.setDrawColor(strokeColor[0], strokeColor[1], strokeColor[2]);
    }

    var flat = 'S';
    var O = context.O;
    var A = data.start.add(O);
    var B = data.end.add(O);
    doc.line(A.x, A.y, B.x, B.y, flat);
  },
  image: function image(context, doc, data) {
    var handleImage = function handleImage(image) {
      if (!image) return;
      var rect = data.rect.clone();
      rect.x += context.O.x;
      rect.y += context.O.y;
      doc.addImage(image, 'PNG', rect.x, rect.y, rect.width, rect.height);
    };

    if (data.image.then) {
      return data.image.then(handleImage)["catch"](function (err) {});
    } else return handleImage(data.image);
  },
  page_break: function page_break(context, doc, data) {},
  sub_document: function sub_document(context, doc, data) {}
};
PaperPrinter_PaperPrinter.prototype.measures = {
  sub_document: function sub_document(data) {
    return new Math_Rectangle(0, 0, 0, 0);
  },
  rect: function rect(data) {
    return data.rect;
  },
  text: function text(data) {
    return data.pos;
  },
  image: function image(data) {
    return data.rect;
  },
  line: function line(data) {
    return Math_Rectangle.boundingPoints([data.start, data.end]);
  },
  page_break: function page_break(data) {
    return new Math_Rectangle(0, data.at.y, 0, 0);
  }
};
/* harmony default export */ const Print_PaperPrinter = ((/* unused pure expression or super */ null && (PaperPrinter_PaperPrinter)));
;// 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 () {
    FileSaver_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();
  return new Promise(function (resolve) {
    xhr.onload = function () {
      resolve(xhr.status >= 200 && xhr.status < 299);
    };

    xhr.onerror = function () {
      resolve(xhr.status >= 200 && xhr.status < 299);
    };

    xhr.open('HEAD', url, true);
    xhr.send();
  });
}

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) {
      corsEnabled(a.href).then(function (result) {
        if (result) {
          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') {
    corsEnabled(blob).then(function (result) {
      if (result) {
        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 FileSaver_saveAs(blob, name, opts, popup) {
  if ((typeof window === "undefined" ? "undefined" : FileSaver_typeof(window)) !== "object" || window !== self) {
    console.error("FileSaver is not support!");
  } else if ('wkSaveAs' in navigator) {
    navigator.wkSaveAs(blob, name, opts);
  } 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'
  });
  FileSaver_saveAs(blob, name, opts);
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/pdf.js
 // var pdLibUrl = 'https://unpkg.com/pdf-lib/dist/pdf-lib.js';

var pdLibUrl = 'https://absol.cf/vendor/pdf-lib.js';
var libSync = null;

function loadVendorLib() {
  if (libSync) return libSync;

  if ('PDFLib' in window) {
    libSync = Promise.resolve(window.PDFLib);
  } else {
    libSync = loadScript(pdLibUrl).then(function () {
      return window.PDFLib;
    });
  }

  return libSync;
}

function loadPdf(data) {
  if (typeof data === "string") {
    return fetch(data).then(function (res) {
      return res.arrayBuffer();
    }).then(function (buff) {
      return loadPdf(buff);
    });
  } else if (data instanceof ArrayBuffer) {
    return PDFLib.PDFDocument.load(data);
  } else return null;
}

function mergePdfs(pdfsToMerges, onProcess) {
  var processInfo = {
    all: pdfsToMerges.length,
    loaded: 0,
    merged: 0
  };
  return loadVendorLib().then(function () {
    var pdfSync = pdfsToMerges.map(function (it) {
      return loadPdf(it).then(function (r) {
        processInfo.loaded++;
        onProcess && onProcess(processInfo);
        return r;
      });
    });
    pdfSync.push(PDFLib.PDFDocument.create());
    return Promise.all(pdfSync);
  }).then(function (pdfs) {
    var mergedPdf = pdfs.pop();
    return pdfs.reduce(function (sync, pdf) {
      return mergedPdf.copyPages(pdf, pdf.getPageIndices()).then(function (copiedPages) {
        return sync.then(function () {
          return copiedPages;
        });
      }).then(function (copiedPages) {
        copiedPages.forEach(function (page) {
          mergedPdf.addPage(page);
        });
        processInfo.merged++;
        onProcess && onProcess(processInfo);
      });
    }, Promise.resolve()).then(function () {
      return mergedPdf;
    });
  }).then(function (mergedPdf) {
    return mergedPdf;
  });
}
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/printer.js
function printer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { printer_typeof = function _typeof(obj) { return typeof obj; }; } else { printer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return printer_typeof(obj); }





var ShareSerializer = new Print_PrintSerializer();

/***
 *
 * @param elt
 * @param fileName
 * @param {function(processInfo):void=} onProcess
 * @returns {Promise<*>}
 */

/**
 * @type {((elt:AElement, fileName: string, onProcess: function(processInfo):void) => Promise ) & ((elt:AElement, opt: object, onProcess: function(processInfo):void) => Promise) }
 */

function downloadAsPDF(docList, arg2, onProcess) {
  var opt = {
    fileName: 'exports.pdf.js'
  };
  if (typeof arg2 === 'string') opt.fileName = arg2;else Object.assign(opt, arg2);
  var $ = Dom.ShareInstance.$;
  if (!(docList instanceof Array)) docList = [docList];
  docList = docList.map(function (doc) {
    if (typeof doc === "string") {
      return {
        elt: $(doc)
      };
    } else if (isDomNode(doc)) {
      return {
        elt: $(doc)
      };
    } else if (printer_typeof(doc) === "object" && doc) {
      if (typeof doc.elt === "string") doc.elt = $(doc.elt);
      if (doc.elt && isDomNode(doc.elt)) return doc;
    } else return null;
  }).filter(function (it) {
    return !!it;
  }).map(function (doc) {
    var elt = docList[0];

    if (elt.fmComponent) {
      if (!doc.opt) doc.opt = {};

      if (!doc.opt.margin) {
        doc.opt.margin = {
          top: elt.fmComponent.style.paddingTop || 57,
          left: elt.fmComponent.style.paddingLeft || 57,
          bottom: elt.fmComponent.style.paddingBottom || 57,
          right: elt.fmComponent.style.paddingRight || 57
        };
      }
    }

    return doc;
  });
  var serializer = ShareSerializer;
  opt.onProcess = typeof onProcess === "function" ? onProcess : function () {};
  var printer = new PaperPrinter(opt);
  return serializer.serialize(docList, printer, opt.onProcess).then(function (printer) {
    return printer.exportAsPDF();
  }).then(function (doc) {
    saveAs(doc.output('blob'), opt.fileName);
  });
}


;// 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.value = '';
  this.historyIndex = -1;
  this.changePendingEvent = null;
  this.commitChange('', 0);
}

PreInput.tag = 'preinput';

PreInput.render = function () {
  return PreInput_({
    tag: 'pre',
    "class": 'as-preinput',
    attr: {
      contenteditable: 'true'
    },
    child: 'br'
  });
};

PreInput.prototype.notifyChange = function (data, originalEvent) {
  this.emit('change', Object.assign({
    type: 'change',
    target: this,
    originalEvent: originalEvent || this.changePendingEvent
  }, data));
  this.changePendingEvent = null;
};

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.select = function (offset) {
  if (document.activeElement !== this) this.focus();
  this.applyData(this.value, offset);
};

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.notifyChange({
    value: record.text,
    action: 'undo',
    record: record
  });
};

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.notifyChange({
    value: record.text,
    action: 'redo',
    record: record
  });
};
/**
 *
 * @param text
 * @param offset
 * @param {Event=} event
 */


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.notifyChange({
      value: record.text,
      action: 'commit',
      record: record
    });
  }
};
/**
 *
 * @param text
 * @param offset
 * @param {Event=} event
 */


PreInput.prototype.waitToCommit = function (text, offset, event) {
  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, parent) {
  if (!node) return '';

  if (node.nodeType === 3) {
    return node.data;
  }

  var res = '';

  if ((node.tagName === 'BR' || node.tagName === 'br') && parent && parent.lastChild !== node) {
    return '\n';
  } else if ((node.tagName === 'DIV' || node.tagName === 'div') && parent && parent.firstChild !== node) {
    res += '\n';
  }

  var thisInput = this;
  return res + Array.prototype.map.call(node.childNodes, function (cNode, index, arr) {
    return thisInput.stringOf(cNode, node);
  }).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) {
  this.changePendingEvent = 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) {
  this.changePendingEvent = 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.hasClass('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.hasClass('as-disabled');
  }
};
PreInput.property.readOnly = {
  set: function set(value) {
    value = !!value;
    if (value === this.hasClass('as-read-only')) return;

    if (value) {
      this.addClass('as-read-only');
      this.attr({
        contenteditable: undefined,
        oncut: 'return false',
        onpaste: 'return false',
        onkeydown: 'if(event.metaKey) return true; return false;'
      });
    } else {
      this.removeClass('as-read-only');
      this.attr({
        contenteditable: true,
        oncut: undefined,
        onpaste: undefined,
        onkeydown: undefined
      });
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
absol_acomp_ACore.install(PreInput);
/* harmony default export */ const js_PreInput = (PreInput);
/*

ShareSerializer.addHandlerBefore({
    id: 'PreInput',
    match: (elt, scope, stack) => {
        if (elt.nodeType !== Node.ELEMENT_NODE) return false;
        return elt.hasClass('as-preinput') || elt.hasClass('as-tokenize-hyper-input');
    },
    exec: (printer, elt, scope, stack, accept) => {
        var O = printer.O;
        var printAttr = computePrintAttr(elt);
        var rect = printAttr.contentBound;
        rect.x -= O.x;
        rect.y -= O.y;

        printer.text(PreInput.prototype.stringOf(elt), rect, printAttr.style);
        return false;
    }
}, '*');

 */
// 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;
    elt.sponsorElement = 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.getFollower = function () {
  if (!QuickListButton.$follower) QuickListButton.$follower = QuickListButton_('follower.as-quick-list-button-follower');
  QuickListButton.$follower.cancelWaiting();
  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() {
  this.$text = SelectListItem_$('span.absol-selectlist-item-text', this);
  this.$textValue = this.$text.childNodes[0];
  this.$descCtn = SelectListItem_$('.absol-selectlist-item-desc-container', this);
  this.$desc = SelectListItem_$('span.absol-selectlist-item-desc', this.$descCtn);
  this.$descValue = this.$desc.childNodes[0];
  this.$icon = null;
  this._extendClasses = [];
  this._extendStyle = {};
  this._data = "";
  this._level = 0;
  this._icon = null;
  HTML5_OOP.drillProperty(this, this, 'noSelect', 'disabled');
  /***
   * @type {AbsolConstructDescriptor|null}
   * @name icon
   * @memberOf SelectListItem#
   */
}

SelectListItem.tag = 'SelectListItem'.toLowerCase();

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.icon = {
  /***
   * @this SelectListItem
   * @param icon
   */
  set: function set(icon) {
    if (this.$icon) {
      this.$icon.remove();
      this.$icon = null;
    }

    this._icon = icon || null;

    if (this._icon) {
      this.$icon = SelectListItem_(this._icon);
      this.$icon.addClass('as-select-list-icon');
      this.addChildBefore(this.$icon, this.$text);
    }
  },
  get: function get() {
    return this._icon;
  }
};
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;
      this.disabled = false;
      this.icon = null;
    } 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;
      this.disabled = value.disabled || value.noSelect;
      this.icon = value.icon;
    }
  },
  get: function get() {
    return this._data;
  }
};
SelectListItem.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
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.addStyle('--level', value);
  },
  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.hasClass('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.hasClass('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.hasClass('as-selected');
  }
};
absol_acomp_ACore.install(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 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 / 14 + 'em'); //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 / 14 + 'em'); //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);
/***
 *
 * @param {AElement} elt
 * @param opt
 * @constructor
 */

function QuickMenuInstance(elt, opt) {
  this.id = (Math.random() * 10000 >> 0) + '' + new Date().getTime();
  /***
   *
   * @type {"OPEN"|"CLOSE"}
   */

  this.state = 'CLOSE';
  this._willAddClickOut = -1;
  this.elt = elt;
  this.opt = opt;

  for (var key in this) {
    if (key.startsWith('_on')) {
      this[key] = this[key].bind(this);
    }
  }

  this._init();
}

QuickMenuInstance.prototype._init = function () {
  var _this = this;

  this.elt.classList.add('as-quick-menu-trigger');
  if (this.opt.triggerEvent === 'mousedown') QuickMenu_$(this.elt).on('contextmenu', function (event) {
    event.preventDefault();
  }).attr('oncontextmenu', "return false;");

  if (this.opt.triggerEvent) {
    this.elt.addEventListener(this.opt.triggerEvent, this._onClick, true);
  } else this.elt.addEventListener('click', this._onClick, true);

  if (!this.elt.revokeResource) {
    this.elt.revokeResource = function () {
      _this.elt.revokeResource = noop;

      _this.remove();
    };
  }
};

QuickMenuInstance.prototype._deinit = function () {
  if (this.state === "OPEN") this.close();
  this.elt.classList.remove('as-quick-menu-trigger');

  if (this.opt.triggerEvent) {
    this.elt.removeEventListener(this.opt.triggerEvent, this._onClick, true);
  } else {
    this.elt.removeEventListener('click', this._onClick, true);
  }

  this.elt = null;
  this.opt = null;

  for (var key in this) {
    if (key.startsWith('_on')) {
      this[key] = noop;
    }
  }
};

QuickMenuInstance.prototype.getMenuProps = function () {
  var props;

  if (this.opt.getMenuProps) {
    props = this.opt.getMenuProps();
  } else {
    props = this.opt.menuProps;
  }

  props = props || {};
  return Object.assign({
    extendClasses: [],
    extendStyle: {}
  }, props);
};

QuickMenuInstance.prototype.remove = function () {
  this._deinit();
};

QuickMenuInstance.prototype._onClick = function (event) {
  if (this.opt.triggerEvent === 'mousedown') {
    event.preventDefault();
  }

  var event = copyEvent(event, {
    canceled: false,
    cancel: function cancel() {
      this.canceled = true;
    }
  });

  if (this.opt.onClick) {
    this.opt.onClick.call(this, event);
  }

  if (!event.canceled) this.toggle();
};

QuickMenuInstance.prototype._onClickOut = function (event) {
  if (hitElement(this.elt, event) || hitElement(QuickMenu.$elt, event)) return;
  this.close();
};

QuickMenuInstance.prototype.onSelect = function (item) {
  item = item.__originalItem__ || item;
  if (item.items && item.items.length > 0) return;
  if (this.opt.onSelect) this.opt.onSelect(item);
  this.close();
};

QuickMenuInstance.prototype.open = function () {
  var _this2 = this;

  if (QuickMenu.runningInstance === this) return;
  if (this.state !== "CLOSE") return;
  if (QuickMenu.runningInstance) QuickMenu.runningInstance.close();
  QuickMenu.runningInstance = this;
  this.state = 'OPEN';
  this.elt.classList.add('as-quick-menu-attached');
  this._willAddClickOut = setTimeout(function () {
    _this2._willAddClickOut = -1;
    document.addEventListener('click', _this2._onClickOut, false);
    followerElt.updatePosition();
    menuElt.addStyle('visibility', 'visible');
  }, QuickMenu_isMobile ? 33 : 2);
  var anchor = this.getAnchor();
  var followerElt = QuickMenu.$follower;
  var menuElt = QuickMenu.$elt;
  this.originProps = this.getMenuProps();
  this.copyProps = Object.assign({}, this.originProps);
  this.copyProps.items = this.originProps.items || [];
  this.copyProps.items = this.copyProps.items.map(function visit(item) {
    var cpyItem = item;
    if (typeof item === "string") cpyItem = item;else if (item && typeof item.text === "string") {
      cpyItem = Object.assign({
        __originalItem__: item
      }, item);
      if (cpyItem.items && cpyItem.items.map) cpyItem.items = cpyItem.items.map(visit);
    }
    return cpyItem;
  });
  Object.assign(menuElt, this.copyProps);
  followerElt.addClass('absol-active');

  if (anchor === 'modal') {
    followerElt.addClass('as-anchor-modal');
    followerElt.anchor = [];
  } else {
    followerElt.removeClass('as-anchor-modal');
    followerElt.anchor = anchor;
  }

  this._onSizeNeedUpdate();

  QuickMenu.$follower.on('preupdateposition', this._onSizeNeedUpdate);
  followerElt.followTarget = this.elt;
  followerElt.sponsorElement = this.elt;
  menuElt.addStyle('visibility', 'hidden');
  followerElt.addTo(document.body);
  followerElt.addClass('absol-active');

  if (this.opt.onOpen) {
    try {
      this.opt.onOpen.call(this);
    } catch (err) {
      safeThrow_safeThrow(err);
    }
  }
};

QuickMenuInstance.prototype.close = function () {
  if (QuickMenu.runningInstance !== this) return;
  if (this.state !== "OPEN") return;

  if (this.opt.onClose) {
    try {
      this.opt.onClose.call(this);
    } catch (err) {
      safeThrow_safeThrow(err);
    }
  }

  this.state = 'CLOSE';
  this.elt.classList.remove('as-quick-menu-attached');
  QuickMenu.$elt.removeStyle('--available-height');
  var followerElt = QuickMenu.$follower;
  followerElt.addClass('absol-active');
  followerElt.remove();
  QuickMenu.$follower.off('preupdateposition', this._onSizeNeedUpdate);

  if (this._willAddClickOut >= 0) {
    clearTimeout(this._willAddClickOut);
  } else {
    document.removeEventListener('click', this._onClickOut, false);
  }

  QuickMenu.runningInstance = null;
};

QuickMenuInstance.prototype._onSizeNeedUpdate = function () {
  var _this3 = this;

  $$('VMenuItem'.toLowerCase(), QuickMenu.$elt).forEach(function (e) {
    if (e.autoFixParentSize) e.autoFixParentSize();
  });
  var screenSize = getScreenSize();
  var eltBound = this.elt.getBoundingClientRect();
  var outRect = traceOutBoundingClientRect(this.elt);
  var isOut = false;
  if (eltBound.left > outRect.right || eltBound.right < outRect.left || eltBound.top > outRect.bottom || eltBound.bottom < outRect.top) isOut = true;

  if (isOut || !eltBound.width && !eltBound.height) {
    setTimeout(function () {
      _this3.close();
    }, 0);
  }

  var aTop = eltBound.bottom;
  var aBottom = screenSize.height - eltBound.top;
  QuickMenu.$elt.addStyle('--available-height', Math.max(aTop, aBottom) - 10 + 'px');
};

QuickMenuInstance.prototype.toggle = function () {
  if (this.state === "OPEN") {
    this.close();
  } else if (this.state === 'CLOSE') {
    this.open();
  }
};

QuickMenuInstance.prototype.getAnchor = function () {
  var menuAnchors;
  var anchor = this.opt.getAnchor ? this.opt.getAnchor() : this.opt.anchor;

  if (typeof anchor == 'number') {
    menuAnchors = [anchor];
  } else if (anchor instanceof Array) {
    menuAnchors = anchor;
  } else if (anchor === 'modal') {
    menuAnchors = 'modal';
  } else {
    menuAnchors = QuickMenu.PRIORITY_ANCHORS;
  }

  return menuAnchors;
};

QuickMenu.PRIORITY_ANCHORS = [0, 3, 7, 4, 1, 2, 6, 5];
QuickMenu.$elt = QuickMenu_('quickmenu');
/***
 *
 * @type {Follower}
 */

QuickMenu.$follower = QuickMenu_({
  tag: js_Follower.tag,
  "class": 'absol-context-menu-anchor',
  child: QuickMenu.$elt,
  on: {
    preupdateposition: function preupdateposition() {
      var bound = this.getBoundingClientRect();
      var outBound = traceOutBoundingClientRect(this);

      if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
        QuickMenu.close(QuickMenu._session);
      }
    }
  }
});
QuickMenu.$follower.cancelWaiting();
/***
 *
 * @type {null|QuickMenuInstance}
 */

QuickMenu.runningInstance = null;
QuickMenu._session = Math.random() * 10000000000 >> 0;
QuickMenu._menuListener = undefined;
QuickMenu.$elt.on('press', function (event) {
  if (QuickMenu.runningInstance) QuickMenu.runningInstance.onSelect(cleanMenuItemProperty(event.menuItem));
  if (QuickMenu._menuListener) QuickMenu._menuListener(cleanMenuItemProperty(event.menuItem));
});

QuickMenu.show = function (element, menuProps, anchor, menuListener, darkTheme) {
  var instance = new QuickMenuInstance(element, {
    menuProps: menuProps,
    anchor: anchor,
    onSelect: menuListener,
    darkTheme: darkTheme
  });
  instance.open();
};

QuickMenu.close = function (session) {
  if (QuickMenu.runningInstance && QuickMenu.runningInstance.id === session) QuickMenu.runningInstance.close();
};

QuickMenu.showWhenClick = function (element, menuProps, anchor, menuListener, darkTheme) {
  return new QuickMenuInstance(element, {
    menuProps: menuProps,
    anchor: anchor,
    onSelect: menuListener,
    darkTheme: darkTheme
  });
};
/**
 * @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) {
  return new QuickMenuInstance(trigger, adaptor);
};

/* 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.$;
/***
 * @extends AElement
 * @constructor
 */

function QuickPath() {
  this._holders = [];
}
/**
 * @type {QuickPath}
 */


QuickPath.eventHandler = {};
/***
 * @this QuickPath
 * @param event
 */

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);
var radioImageCache = {};
ShareSerializer.addHandlerBefore({
  match: function match(elt, scope, stack) {
    if ((elt.hasClass('absol-radio-icon') || elt.hasClass('as-checkbox-input-check-icon')) && (elt.parentElement.hasClass('absol-radio') || elt.parentElement.hasClass('absol-radio-button') || elt.parentElement.hasClass('as-checkbox-input'))) {
      return true;
    }

    return false;
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var type = elt.hasClass('absol-radio-icon') ? 'radio' : 'check';
    var fontSize = elt.getFontSize();
    var checked = !!elt.parentElement.__origin__.checked;
    var disabled = !!elt.parentElement.__origin__.disabled;
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    if (bound.width === 0) return;
    var rect = bound.clone();
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    var key = type + fontSize + checked + disabled;
    var res;

    if (radioImageCache[key]) {
      res = radioImageCache[key];
    } else {
      res = HTML5_Svg.svgToCanvas(elt.__origin__)["catch"](function (err) {
        console.error(err);
      });
      radioImageCache[key] = res;
    }

    res.elt = elt;
    printer.image(res, rect);
  },
  id: 'Radio'
}, 'SVG');
;// 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({
            status: 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-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.$;
/***
 * @extends Hanger
 * @constructor
 */

function ResizeBox() {
  this.on({
    draginit: this.eventHandler.rbDragInit,
    dragdeinit: this.eventHandler.rbDragDeinit
  });
  this.hangon = 3;
  this._mousedownEventData = undefined;
  this._mousemoveEventData = undefined;
  this._lastClickTime = 0;
}

ResizeBox.tag = 'ResizeBox'.toLowerCase();

ResizeBox.render = function () {
  return ResizeBox_({
    tag: js_Hanger.tag,
    "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.rbDragInit = function (event) {
  if (isMouseRight(event.originEvent)) {
    event.cancel();
    return;
  }

  var target = event.target;
  if (!target.attr) return;
  if (!target.hasClass('as-resize-box-dot') && !target.hasClass('as-resize-box-body')) return;
  var optionNames = event.target.attr('class').match(/body|left|top|right|bottom/g);
  if (optionNames.length === 0) return;
  this._mouseOptionNames = optionNames;
  this._mouseOptionDict = this._mouseOptionNames.reduce(function (ac, cr) {
    ac[cr] = true;
    return ac;
  }, {});
  this.on({
    drag: this.eventHandler.rbDrag,
    dragend: this.eventHandler.rbDragEnd,
    dragstart: this.eventHandler.rbDragStart
  });
  this._dragged = false;
};

ResizeBox.eventHandler.rbDragDeinit = function (event) {
  this.off({
    drag: this.eventHandler.rbDrag,
    dragend: this.eventHandler.rbDragEnd,
    dragstart: this.eventHandler.rbDragStart
  });
  var now = new Date().getTime();

  if (!this._dragged) {
    if (now - this._lastClickTime < 400) {
      this.emit('dblclick', Object.assign({}, event, {
        type: 'dblclick'
      }), this);
      this._lastClickTime = 0;
    } else {
      this.emit('click', Object.assign({}, event, {
        type: 'click'
      }), this);
      this._lastClickTime = now;
    }
  }
};

ResizeBox.eventHandler.rbDrag = function (event) {
  if (this._mousedownEventData.option.body && !this.canMove) return;
  this._dragged = true;
  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',
    begin: true
  };
  this.emit('moving', this._mousemoveEventData, this);
};

ResizeBox.eventHandler.rbDragStart = function (event) {
  event.preventDefault();
  this._optionNames = event.target.attr('class').match(/body|left|top|right|bottom/g);
  this._dragged = true;
  ResizeBox_$(document.body).addClass('as-resize-box-overiding').addClass(this._optionNames.join('-'));

  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'
  };
  this.emit('beginmove', this._mousedownEventData, this);
};

ResizeBox.eventHandler.rbDragEnd = function (event) {
  document.body.classList.remove('as-resize-box-overiding');
  document.body.classList.remove(this._optionNames.join('-'));
  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);
};

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.hasClass('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.hasClass('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.hasClass('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/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\"  viewBox=\"0 0 100 100\" preserveAspectRatio=\"xMidYMid\">\r\n    <g><circle cx=\"73.801\" cy=\"68.263\" fill=\"#e15b64\" r=\"4\">\r\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>\r\n    </circle><circle cx=\"68.263\" cy=\"73.801\" fill=\"#f47e60\" r=\"4\">\r\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>\r\n    </circle><circle cx=\"61.481\" cy=\"77.716\" fill=\"#f8b26a\" r=\"4\">\r\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>\r\n    </circle><circle cx=\"53.916\" cy=\"79.743\" fill=\"#abbd81\" r=\"4\">\r\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>\r\n    </circle><circle cx=\"46.084\" cy=\"79.743\" fill=\"#849b87\" r=\"4\">\r\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>\r\n    </circle><circle cx=\"38.519\" cy=\"77.716\" fill=\"#6492ac\" r=\"4\">\r\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>\r\n    </circle><circle cx=\"31.737\" cy=\"73.801\" fill=\"#637cb5\" r=\"4\">\r\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>\r\n    </circle><circle cx=\"26.199\" cy=\"68.263\" fill=\"#6a63b6\" r=\"4\">\r\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>\r\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>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/mdi_store_marker_outline.tpl
/* harmony default export */ const mdi_store_marker_outline = ("<svg viewBox=\"0 0 24 24\">\r\n    <path fill=\"currentColor\" d=\"M20 6H4V4H20V6M14.3 12C13.5 12.96 13 14.18 13 15.5C13 16.64 13.43 17.86 14 19V20H4V14H3V12L4 7H20L20.7 10.5C20.04 10.18 19.32 10 18.56 10L18.36 9H5.64L5.04 12H14.3M12 14H6V18H12V14M22 15.5C22 18.1 18.5 22 18.5 22S15 18.1 15 15.5C15 13.6 16.6 12 18.5 12S22 13.6 22 15.5M19.7 15.6C19.7 15 19.1 14.4 18.5 14.4S17.3 14.9 17.3 15.6C17.3 16.2 17.8 16.8 18.5 16.8S19.8 16.2 19.7 15.6Z\" />\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/font_color.tpl
/* harmony default export */ const font_color = ("<svg height=\"100%\" width=\"100%\" viewBox=\"0,0,2048,2048\" focusable=\"false\">\r\n<path style=\"fill:currentColor\" shape-rendering=\"optimizeQuality\" type=\"path\" class=\"as-font-color-text\"  d=\"M 1504 1408 l -156 -392 h -603 l -152 392 h -145 l 536 -1408 h 132 l 533 1408 m -602 -1236 h -4 l -254 725 h 515 m 744 639 v 512 h -2048 v -512 z\"></path>\r\n<path shape-rendering=\"optimizeQuality\" type=\"path\" class=\"as-font-color-contract\" d=\"M 2048 1536 v 512 h -2048 v -512 m 1920 128 h -1792 v 256 h 1792 z\"></path>\r\n<path shape-rendering=\"optimizeQuality\" type=\"path\" class=\"as-font-color-value\" d=\"M 1984 1984 h -1920 v -384 h 1920 z\"></path>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/insert_col_left.tpl
/* harmony default export */ const insert_col_left = ("<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <path style=\"fill:currentColor\" d=\"M20 3c.552 0 1 .448 1 1v16c0 .552-.448 1-1 1h-6c-.552 0-1-.448-1-1V4c0-.552.448-1 1-1h6zm-1 2h-4v14h4V5zM6 7c2.761 0 5 2.239 5 5s-2.239 5-5 5-5-2.239-5-5 2.239-5 5-5zm1 2H5v1.999L3 11v2l2-.001V15h2v-2.001L9 13v-2l-2-.001V9z\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/insert_col_right.tpl
/* harmony default export */ const insert_col_right = ("<svg width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <path style=\"fill:currentColor\" d=\"M10 3c.552 0 1 .448 1 1v16c0 .552-.448 1-1 1H4c-.552 0-1-.448-1-1V4c0-.552.448-1 1-1h6zM9 5H5v14h4V5zm9 2c2.761 0 5 2.239 5 5s-2.239 5-5 5-5-2.239-5-5 2.239-5 5-5zm1 2h-2v1.999L15 11v2l2-.001V15h2v-2.001L21 13v-2l-2-.001V9z\"/>\r\n</svg>");
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/icons.css
var icons = __webpack_require__(8934);
;// 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);
function InsertColLeftIcon() {
  return absol_acomp_ACore._(insert_col_left);
}
InsertColLeftIcon.tag = 'InsertColLeftIcon'.toLowerCase();
absol_acomp_ACore.install(InsertColLeftIcon);
function InsertColRightIcon() {
  return absol_acomp_ACore._(insert_col_right);
}
InsertColRightIcon.tag = 'InsertColRightIcon'.toLowerCase();
absol_acomp_ACore.install(InsertColRightIcon);
function MdiStoreMarkerOutline() {
  return absol_acomp_ACore._(mdi_store_marker_outline);
}
MdiStoreMarkerOutline.tag = 'mdi-store-marker-outline';
absol_acomp_ACore.install(MdiStoreMarkerOutline);
function FontColorIcon() {
  this._value = '#000000';
  this.$contract = ACore_$('.as-font-color-contract', this);
  this.$value = ACore_$('.as-font-color-value', this);
  this.value = 'cyan';
}
FontColorIcon.tag = 'FontColorIcon'.toLowerCase();

FontColorIcon.render = function () {
  return ACore_(font_color);
};

FontColorIcon.property = {};
FontColorIcon.property.value = {
  set: function set(value) {
    var cValue;

    if (typeof value === "string") {
      try {
        cValue = src_Color_Color.parse(value);
        value = cValue.toString('hex6');
      } catch (err) {
        value = "#000000";
        cValue = src_Color_Color.parse(value);
      }
    } else if (value instanceof src_Color_Color) {
      cValue = value;
      value = value.toString('hex6');
    } else {
      value = "#000000";
      cValue = src_Color_Color.parse(value);
    }

    this._value = value;
    var hColor = cValue.getContrastYIQ();
    this.$contract.addStyle('fill', hColor.toString("hex6"));
    this.$value.addStyle('fill', this._value.toString('hex6'));
  },
  get: function get() {
    return this._value;
  }
};
;// 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) {
        safeThrow_safeThrow(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-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: HTML5_LanguageSystem.getText('txt_search') || 'Search...'
        }
      }
    }, {
      "class": 'absol-search-text-button-container',
      child: {
        tag: 'button',
        child: ['find-ico', 'times-circle-ico', {
          tag: SpinnerIco.tag,
          style: {
            margin: 0
          }
        }]
      }
    }]
  });
};

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.property.waiting = {
  set: function set(value) {
    value = value || false;
    this._waiting = value;

    if (value) {
      this.addClass('as-waiting');
    } else {
      this.removeClass('as-waiting');
    }
  },
  get: function get() {
    return this._waiting || false;
  }
};

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);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectMenu2.js







absol_acomp_ACore.creator["dropdown-ico"] = function () {
  return ACore_(['<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() {
  this._value = null;
  this._lastValue = null;
  this.$holderItem = ACore_$('.absol-selectmenu-holder-item', this);
  this.$viewItem = ACore_$('.absol-selectmenu-holder-item selectlistitem', this);
  /***
   *
   * @type {SelectListBox}
   */

  this.$selectlistBox = ACore_({
    tag: 'selectlistbox',
    props: {
      anchor: [1, 6, 2, 5],
      strictValue: true
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition
    }
  });
  if (this.$selectlistBox.cancelWaiting) this.$selectlistBox.cancelWaiting();
  this.widthLimit = this.$selectlistBox.widthLimit;
  this.addStyle('--as-width-limit', this.$selectlistBox.widthLimit + 'px');
  var firstCheckView = false;
  var this1 = this;

  var checkView = function checkView() {
    if (this1.isDescendantOf && this1.isDescendantOf(document.body)) {
      setTimeout(checkView, 5000);
      firstCheckView = true;
    } else if (firstCheckView) {
      setTimeout(checkView, 1000);
    } else {
      if (this1.$selectlistBox.searchMaster) this1.$selectlistBox.searchMaster.destroy();
    }
  };

  setTimeout(checkView, 3000);
  this.$selectlistBox.on('pressitem', this.eventHandler.selectListBoxPressItem);
  this.$selectlistBox.followTarget = this;
  this.$selectlistBox.sponsorElement = this;
  HTML5_OOP.drillProperty(this, this.$selectlistBox, 'enableSearch');
  HTML5_OOP.drillProperty(this, this, 'selectedvalue', 'value');
  this.strictValue = true;
  this._lastValue = "NOTHING_VALUE";
  this._isFocus = false;
  this.isFocus = false;
  this.on('mousedown', this.eventHandler.click, true);
  /***
   * @name items
   * @type {[]}
   * @memberOf SelectMenu#
   */
}

SelectMenu.tag = 'selectmenu';

SelectMenu.render = function () {
  return ACore_({
    "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 ('selectedvalue' in props) {
    props.value = props.selectedvalue;
  }

  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.revokeResource = function () {// return;
  // this.$selectlistBox.revokeResource();
};

SelectMenu.prototype.selfRemove = function () {
  var _this = this;

  setTimeout(function () {
    if (!_this.parentElement) _this.revokeResource();
  }, 100);
  this.remove();
};

SelectMenu.prototype.updateItem = function () {
  var value = this._explicit(this._value);

  var selectedItems = this.$selectlistBox.findDisplayItemsByValue(value);
  var data;

  if (selectedItems.length >= 1) {
    data = selectedItems[0].item;
    this.$viewItem.data = data;

    if (data.text && utils_measureText(data.text + '', '14px arial').width - 30 > this.widthLimit) {
      this.$viewItem.attr('title', data.text);
    } else this.$viewItem.attr('title', null);
  } else {
    this.$viewItem.data = {
      text: '',
      value: null
    };
    this.$viewItem.attr('title', null);
  }
};

SelectMenu.prototype.findItemsByValue = function (value) {
  return this.$selectlistBox.findItemsByValue(value);
};

SelectMenu.prototype._explicit = function (value) {
  var items = this.$selectlistBox.findItemsByValue(value);

  if (items.length > 0 || !this.strictValue || this.items.length === 0) {
    return value;
  } else {
    return this.items[0].value;
  }
};

SelectMenu.property = {};
SelectMenu.property.items = {
  set: function set(items) {
    items = items || [];
    this.$selectlistBox.items = items;
    this.addStyle('--select-list-estimate-width', this.$selectlistBox._estimateWidth / 14 + 'em');
    this.addStyle('--select-list-desc-width', this.$selectlistBox._estimateDescWidth / 14 + 'em');
    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._explicit(this._value);
  }
};
/***
 *
 * @type {SelectMenu|{}}
 */

SelectMenu.property.isFocus = {
  set: function set(value) {
    if (value && (this.disabled || this.readOnly)) return;
    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) {
      this.$selectlistBox.addTo(document.body); // 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 () {
        thisSM.$selectlistBox.focus();
        document.addEventListener('click', thisSM.eventHandler.bodyClick);
      }, 100);
      this.$selectlistBox.viewListAtFirstSelected();
    } else {
      document.removeEventListener('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.hasClass('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;
  }
};
SelectMenu.property.strictValue = {
  set: function set(value) {
    if (value) {
      this.attr('data-strict-value', null);
    } else {
      this.attr('data-strict-value', 'false');
    }

    this.updateItem();
  },
  get: function get() {
    return !this.attr('data-strict-value') || this.attr('data-strict-value') !== 'false' && this.attr('data-strict-value') !== '0';
  }
};
SelectMenu.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
/**
 * @type {SelectMenu|{}}
 */

SelectMenu.eventHandler = {};

SelectMenu.eventHandler.click = function (event) {
  if (this.readOnly) return;
  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.hasClass('as-active');
  }
};
absol_acomp_ACore.install(SelectBoxItem);
/* harmony default export */ const js_SelectBoxItem = (SelectBoxItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectlistbox.css
var selectlistbox = __webpack_require__(5929);
;// 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/src/Network/IFrameBridge.js



var TYPE_WORKER = 'WORKER';
var TYPE_IFRAME = 'IFRAME';
var TYPE_IFRAME_MASTER = 'IFRAME_MASTER';
var TYPE_WORKER_MASTER = 'WORKER_MASTER';
/**
 *
 * @param {Worker|HTMLIFrameElement|WorkerGlobalScope|Window=} host
 */

function IFrameBridge(host) {
  var _this = this;

  HTML5_EventEmitter.call(this);
  /***
   *
   * @type {Worker|HTMLIFrameElement|WorkerGlobalScope|Window|WorkerGlobalScope|Window}
   */

  this.host = host || self;
  this.sender = null;
  this.receiver = null;
  this.origin = null;
  this.type = 'NOT_DETECT';
  this.id = "UNSET";
  this.sync = this._detectHost().then(function () {
    return _this._attach();
  });
  this.__azarResolveCallbacks = {};
  this.__azarRejectCallbacks = {};
}

IFrameBridge.TYPE_WORKER = TYPE_WORKER;
IFrameBridge.TYPE_IFRAME = TYPE_IFRAME;
IFrameBridge.TYPE_IFRAME_MASTER = TYPE_IFRAME_MASTER;
IFrameBridge.TYPE_WORKER_MASTER = TYPE_WORKER_MASTER;

IFrameBridge.prototype._detectHost = function () {
  var _this2 = this;

  return new Promise(function (rs) {
    var iframeLoaded = function iframeLoaded() {
      if (_this2.host.removeEventListener) {
        _this2.host.removeEventListener("load", iframeLoaded);
      } else {
        _this2.host.detachEvent("onload", iframeLoaded);
      }

      _this2.sender = _this2.host.contentWindow;
      rs();
    };

    if (_this2.host instanceof Worker) {
      _this2.type = TYPE_WORKER_MASTER;
      _this2.sender = _this2.host;
      _this2.receiver = _this2.host;
    } else if (_this2.host.tagName === 'IFRAME') {
      _this2.type = TYPE_IFRAME_MASTER;
      _this2.receiver = self;
      _this2.id = _this2.host.src;
      _this2.origin = '*';

      if (_this2.host.addEventListener) {
        _this2.host.addEventListener("load", iframeLoaded);
      } else {
        _this2.host.attachEvent("onload", iframeLoaded);
      }
    } else if (IFrameBridge.isInIFrame()) {
      _this2.type = TYPE_IFRAME;
      _this2.sender = window.parent;
      _this2.receiver = _this2.host;
      _this2.id = location.href;
      _this2.origin = '*';
    } else if (IFrameBridge.isInWorker()) {
      _this2.type = TYPE_WORKER;
      _this2.sender = _this2.host;
      _this2.receiver = _this2.host;
    }

    if (_this2.sender) rs();
  });
};

IFrameBridge.prototype._attach = function () {
  if (this.receiver.addEventListener) {
    this.receiver.addEventListener("message", this.__azarMessageListener.bind(this), false);
  } else if (this.receiver.attachEvent) {
    this.receiver.attachEvent("onmessage", this.__azarMessageListener.bind(this));
  } else {
    this.receiver.onmessage = this.__azarMessageListener.bind(this);
  }
};

IFrameBridge.fromIFrame = function (iframe) {
  return new IFrameBridge(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.fromIFrame() ? IFrameBridge.getParentUrl().match(/^(http|https):\/\/[^/]+/) : null;

    if (rootOrigin) {
      rootOrigin = rootOrigin[0];
    } else {
      rootOrigin = origin;
    } // IFrameBridge.shareInstance = new IFrameBridge(self, rootOrigin == origin? undefined: "*" || rootOrigin );


    var host = self;
    IFrameBridge.shareInstance = new IFrameBridge(host, rootOrigin);
  }

  return IFrameBridge.shareInstance;
};

Object.defineProperties(IFrameBridge.prototype, Object.getOwnPropertyDescriptors(HTML5_EventEmitter.prototype));
IFrameBridge.prototype.constructor = IFrameBridge;

IFrameBridge.isInIFrame = function () {
  return !IFrameBridge.isInWorker() && top !== self;
};

IFrameBridge.isInWorker = function () {
  return typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
};

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.bridgeId !== this.id) return;

  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) {
            safeThrow_safeThrow(err);

            this.__azarResolve(data.taskId, null, err);
          }.bind(this));
        } else {
          this.__azarResolve(data.taskId, result);
        }
      } catch (err) {
        safeThrow_safeThrow(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,
    bridgeId: this.id
  };

  if (this.origin) {
    this.sender.postMessage(data, this.origin);
  } else {
    this.sender.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,
      bridgeId: this.id
    };

    if (this.origin) {
      this.sender.postMessage(data, this.origin);
    } else {
      this.sender.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,
      bridgeId: this.id
    };

    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/Network/RemoteThread.tpl
/* harmony default export */ const RemoteThread = ("function safeThrow(error) {\r\n    setTimeout(function () {\r\n        throw  error;\r\n    }, 0);\r\n}\r\n\r\nfunction EventEmitter() {\r\n    if (!this._azar_extendEvents) {\r\n        Object.defineProperty(this, '_azar_extendEvents', {\r\n            enumerable: false,\r\n            value: this._azar_extendEvents || { supported: {}, prioritize: {}, nonprioritize: {} }\r\n        });\r\n        Object.defineProperty(this, '__azar_force', {\r\n            value: true,\r\n            enumerable: false\r\n        });\r\n    }\r\n}\r\n\r\n\r\nEventEmitter.prototype.defineEvent = function (name) {\r\n    if (name instanceof Array) {\r\n        for (var i = 0; i < name.length; ++i)\r\n            this._azar_extendEvents.supported[name[i]] = true;\r\n    }\r\n    else\r\n        this._azar_extendEvents.supported[name] = true;\r\n    return this;\r\n};\r\n\r\nEventEmitter.prototype.isSupportedEvent = function (name) {\r\n    return true;\r\n};\r\n\r\n\r\nEventEmitter.prototype.emit = function (eventName, data) {\r\n    this.fire.apply(this, arguments);\r\n};\r\n\r\nEventEmitter.prototype.fire = function (eventName, data) {\r\n    var others = Array.prototype.slice.call(arguments, 1);\r\n    if (this.isSupportedEvent(eventName)) {\r\n        var listenerList;\r\n        var i;\r\n        if (this._azar_extendEvents.prioritize[eventName]) {\r\n            listenerList = this._azar_extendEvents.prioritize[eventName].slice();\r\n            for (i = 0; i < listenerList.length; ++i) {\r\n                try {\r\n                    listenerList[i].wrappedCallback.apply(this, others);\r\n                } catch (e) {\r\n                   safeThrow(e);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this._azar_extendEvents.nonprioritize[eventName]) {\r\n            listenerList = this._azar_extendEvents.nonprioritize[eventName].slice();\r\n            for (i = 0; i < listenerList.length; ++i) {\r\n                try {\r\n                    listenerList[i].wrappedCallback.apply(this, others);\r\n                } catch (e) {\r\n                    safeThrow(e);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        if (this.dispatchEvent) {\r\n            var event = new Event(eventName);\r\n            data && Object.assign(event, data);\r\n            this.dispatchEvent(event);\r\n        }\r\n        else\r\n            throw new Error(\"Not support event \" + eventName);\r\n    }\r\n    return this;\r\n};\r\n\r\n\r\nEventEmitter.prototype.eventEmittorOnWithTime = function (isOnce, arg0, arg1, arg2) {\r\n    if (typeof arg0 == 'object') {\r\n        for (var key in arg0) {\r\n            this.eventEmittorOnWithTime(isOnce, key, arg0[key]);\r\n        }\r\n        return this;\r\n    }\r\n    else {\r\n        if (typeof arg1 == 'object') {\r\n            return this.eventEmittorOnWithTime(isOnce, arg0, arg1.callback, arg1.cap);\r\n        }\r\n        else {\r\n            var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];\r\n            var eventIndex = -1;\r\n            for (var i = 0; i < eventArr.length; ++i) {\r\n                if (eventArr[i].wrappedCallback == arg1) {\r\n                    eventIndex = i;\r\n                    break;\r\n                }\r\n            }\r\n            if (eventIndex < 0) {\r\n                var event = { isOnce: isOnce, eventName: arg0, callback: arg1, cap: !!arg2 };\r\n                //wrappedCallback will be call\r\n                if (isOnce) {\r\n                    event.wrappedCallback = function () {\r\n                        event.callback.apply(this, arguments);\r\n                        this.off(event.eventName, event.wrappedCallback, event.cap);\r\n                    };\r\n                }\r\n                else {\r\n                    event.wrappedCallback = event.callback;\r\n                }\r\n\r\n                if (!this.isSupportedEvent(arg0)) {\r\n                    if (this.addEventListener) {\r\n                        this.addEventListener(arg0, event.wrappedCallback, !!arg2);\r\n                    }\r\n                    else {\r\n                        this.attachEvent('on' + arg0, arg1, !!arg2);\r\n                    }\r\n                }\r\n\r\n                eventArr.push(event);\r\n                this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = eventArr;\r\n            }\r\n            else {\r\n                console.warn(\"dupplicate event\");\r\n            }\r\n\r\n        }\r\n        return this;\r\n    }\r\n};\r\n\r\n\r\nEventEmitter.prototype.on = function (arg0, arg1, arg2) {\r\n    this.eventEmittorOnWithTime(false, arg0, arg1, arg2);\r\n    return this;\r\n};\r\n\r\n\r\nEventEmitter.prototype.once = function (arg0, arg1, arg2) {\r\n    this.eventEmittorOnWithTime(true, arg0, arg1, arg2);\r\n    return this;\r\n};\r\n\r\nEventEmitter.prototype.off = function (arg0, arg1, arg2) {\r\n    if (typeof arg0 == 'object') {\r\n        for (var key in arg0) {\r\n            this.off(key, arg0[key]);\r\n        }\r\n        return this;\r\n    }\r\n    else {\r\n        if (typeof arg1 == 'object') {\r\n            return this.off(arg0, arg1.callback, arg1.cap);\r\n        }\r\n        else {\r\n            var eventArr = this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] || [];\r\n            var newEventArray = [];\r\n            for (var i = 0; i < eventArr.length; ++i) {\r\n                var event = eventArr[i];\r\n                if (event.wrappedCallback == arg1) {\r\n                    //Dont add to newEventArray\r\n                    if (this.isSupportedEvent(arg0)) {\r\n                    }\r\n                    else {\r\n                        if (this.removeEventListener) {\r\n                            this.removeEventListener(event.eventName, event.wrappedCallback, !!event.cap);\r\n                        }\r\n                        else {\r\n                            this.detachEvent('on' + event.eventName, event.wrappedCallback, !!event.cap);\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    newEventArray.push(event);\r\n                }\r\n            }\r\n            this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = newEventArray;\r\n            return this;\r\n        }\r\n    }\r\n\r\n};\r\n\r\n\r\nvar TYPE_WORKER = 'WORKER';\r\n\r\n/**\r\n *\r\n * @param {Worker|HTMLIFrameElement|WorkerGlobalScope|Window=} host\r\n */\r\nfunction IFrameBridge(host) {\r\n    EventEmitter.call(this);\r\n    /***\r\n     *\r\n     * @type {Worker|HTMLIFrameElement|WorkerGlobalScope|Window|WorkerGlobalScope|Window}\r\n     */\r\n    this.host = host || self;\r\n    this.sender = null;\r\n    this.receiver = null;\r\n    this.origin = null;\r\n    this.type = 'NOT_DETECT';\r\n    this.id = \"UNSET\";\r\n\r\n    this.sync = this._detectHost().then(() => this._attach());\r\n\r\n    this.__azarResolveCallbacks = {};\r\n    this.__azarRejectCallbacks = {};\r\n}\r\n\r\nIFrameBridge.prototype._detectHost = function () {\r\n          this.type = TYPE_WORKER;\r\n          this.sender = this.host;\r\n          this.receiver = this.host;\r\n          return Promise.resolve();\r\n};\r\n\r\n\r\nIFrameBridge.prototype._attach = function () {\r\n    if (this.receiver.addEventListener) {\r\n        this.receiver.addEventListener(\"message\", this.__azarMessageListener.bind(this), false);\r\n    }\r\n    else if (this.receiver.attachEvent) {\r\n        this.receiver.attachEvent(\"onmessage\", this.__azarMessageListener.bind(this));\r\n    }\r\n    else {\r\n        this.receiver.onmessage = this.__azarMessageListener.bind(this);\r\n    }\r\n};\r\n\r\n\r\nIFrameBridge.getInstance = function () {\r\n    if (!IFrameBridge.shareInstance) {\r\n        var origin = location.origin;\r\n        var rootOrigin = IFrameBridge.getParentUrl().match(/^(http|https):\\/\\/[^/]+/);\r\n        if (rootOrigin) {\r\n            rootOrigin = rootOrigin[0];\r\n        }\r\n        else {\r\n            rootOrigin = origin;\r\n        }\r\n\r\n        // IFrameBridge.shareInstance = new IFrameBridge(self, rootOrigin == origin? undefined: \"*\" || rootOrigin );\r\n        var host = self;\r\n        IFrameBridge.shareInstance = new IFrameBridge(host, rootOrigin);\r\n    }\r\n    return IFrameBridge.shareInstance;\r\n};\r\n\r\n\r\nObject.defineProperties(IFrameBridge.prototype, Object.getOwnPropertyDescriptors(EventEmitter.prototype));\r\nIFrameBridge.prototype.constructor = IFrameBridge;\r\n\r\n\r\nIFrameBridge.getParentUrl = function () {\r\n    var parentUrl = (window.location != window.parent.location)\r\n        ? document.referrer\r\n        : document.location.href;\r\n    return parentUrl;\r\n};\r\n\r\nIFrameBridge.prototype.__azarMessageListener = function (event) {\r\n    this.__azarHandleData(event.data);\r\n};\r\n\r\n\r\nIFrameBridge.prototype.__azarHandleData = function (data) {\r\n    if (data.bridgeId !== this.id) return;\r\n    if (data.type) {\r\n        if (data.type == \"INVOKE\") {\r\n            try {\r\n                var result = this.__azarSelfInvoke(data.name, data.params);\r\n                if (result && typeof result.then == 'function') {\r\n                    result.then(function (result) {\r\n                        this.__azarResolve(data.taskId, result);\r\n                    }.bind(this))\r\n                        .catch(function (err) {\r\n                            safeThrow(err);\r\n                            this.__azarResolve(data.taskId, null, err);\r\n                        }.bind(this));\r\n                }\r\n                else {\r\n                    this.__azarResolve(data.taskId, result);\r\n                }\r\n            } catch (err) {\r\n                safeThrow(err);\r\n                this.__azarResolve(data.taskId, null, err);\r\n            }\r\n        }\r\n        else if (data.type == \"INVOKE_RESULT\") {\r\n            if (this.__azarResolveCallbacks[data.taskId]) {\r\n                if (data.error) {\r\n                    this.__azarRejectCallbacks[data.taskId](data.error);\r\n                }\r\n                else {\r\n                    this.__azarResolveCallbacks[data.taskId](data.result);\r\n                }\r\n                delete this.__azarResolveCallbacks[data.taskId];\r\n                delete this.__azarRejectCallbacks[data.taskId];\r\n            }\r\n        }\r\n        else if (data.type == \"EMIT\") {\r\n            this.fire.apply(this, data.params);\r\n        }\r\n        else this.fire('message', data, this);\r\n    }\r\n};\r\n\r\n\r\nIFrameBridge.prototype.__azarResolve = function (taskId, result, error) {\r\n    var data = {\r\n        type: \"INVOKE_RESULT\",\r\n        taskId: taskId,\r\n        result: result,\r\n        error: error,\r\n        bridgeId: this.id\r\n    };\r\n\r\n    if (this.origin) {\r\n        this.sender.postMessage(data, this.origin);\r\n    }\r\n    else {\r\n        this.sender.postMessage(data);\r\n    }\r\n};\r\n\r\n\r\nIFrameBridge.prototype.__azarSelfInvoke = function (name, params) {\r\n    if (typeof this[name] == 'function') {\r\n        return this[name].apply(this, params);\r\n    }\r\n    else {\r\n        return this[name];\r\n    }\r\n};\r\n\r\n\r\nIFrameBridge.prototype.emit = function () {\r\n    var params = [];\r\n    params.push.apply(params, arguments);\r\n    this.sync.then(function () {\r\n        var data = {\r\n            type: \"EMIT\",\r\n            params: params,\r\n            bridgeId: this.id\r\n        };\r\n        if (this.origin) {\r\n            this.sender.postMessage(data, this.origin);\r\n        }\r\n        else {\r\n            this.sender.postMessage(data);\r\n        }\r\n    }.bind(this));\r\n    return this;\r\n};\r\n\r\n\r\nIFrameBridge.prototype.invoke = function (name) {\r\n    var params = [];\r\n    params.push.apply(params, arguments);\r\n    params.shift();\r\n    return this.sync.then(function () {\r\n        var indent = randomIdent(32);\r\n        var data = {\r\n            type: 'INVOKE',\r\n            params: params,\r\n            taskId: indent,\r\n            name: name,\r\n            bridgeId: this.id\r\n        };\r\n        if (this.origin) {\r\n            this.host.postMessage(data, this.origin);\r\n        }\r\n        else {\r\n            this.host.postMessage(data);\r\n        }\r\n        return new Promise(function (resolve, reject) {\r\n            this.__azarResolveCallbacks[indent] = resolve;\r\n            this.__azarRejectCallbacks[indent] = reject;\r\n        }.bind(this));\r\n    }.bind(this));\r\n};\r\n\r\nIFrameBridge.prototype.importScriptURLs = function () {\r\n    return this.invoke.apply(this, ['_receiveScriptURLs'].concat(Array.prototype.slice.call(arguments)));\r\n};\r\n\r\nIFrameBridge.prototype.importScript = function (code) {\r\n    var blob = new Blob([code], { type: 'application/javascript' });\r\n    var url = URL.createObjectURL(blob);\r\n    return this.importScriptURLs(url);\r\n};\r\n\r\n\r\nIFrameBridge.prototype.createMethod = function (name, fx) {\r\n    this[name] = function () {\r\n        return this.invoke.apply(this, [name].concat(Array.prototype.slice.call(arguments)));\r\n    };\r\n    return this.invoke.apply(this, ['_receiveMethod', name, fx.toString()]);\r\n};\r\n\r\n\r\nIFrameBridge.prototype._receiveScriptURLs = function () {\r\n    if (self.importScripts) {\r\n        self.importScripts.apply(self, arguments);\r\n    }\r\n};\r\n\r\n\r\nIFrameBridge.prototype._receiveMethod = function (name, code) {\r\n    this[name] = (new Function('return ' + code))();\r\n};\r\n\r\n\r\nvar IFrameBridge_prototype_descriptors = Object.getOwnPropertyDescriptors(IFrameBridge.prototype);\r\ndelete IFrameBridge_prototype_descriptors.constructor;\r\n\r\nObject.defineProperties(self, IFrameBridge_prototype_descriptors);\r\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-acomp/js/list/ListSearchFactor.js
function ListSearchFactor_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { ListSearchFactor_typeof = function _typeof(obj) { return typeof obj; }; } else { ListSearchFactor_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return ListSearchFactor_typeof(obj); }

function ListSearchFactor(global) {
  /***
   * @typedef SelectionItem2
   * @property {String} text
   * @property {String} desc
   * @property {String} __text__
   * @property {String} __nvnText__
   * @property {Array<String>} __words__
   * @property {Array<String>} __nvnWords__
   * @property {object} __wordDict__
   * @property {object} __nvnWordDict__
   * @module SelectionItem2
   */
  function revokeResource(o) {
    if (!o) return;
    var oc, ocs;
    var keys, key;

    if (Array.isArray(o)) {
      while (o.length) {
        oc = o.pop();

        try {
          revokeResource(oc);
        } catch (err) {}
      }
    } else if (o.removeResource) {
      o.removeResource();
    } else if (ListSearchFactor_typeof(o) === "object") {
      keys = [];
      ocs = [];

      for (key in o) {
        keys.push(key);
      }

      while (keys.length) {
        key = keys.pop();
        ocs.push(o[keys]);

        try {
          delete o[key];
        } catch (err) {}
      }

      while (ocs.length) {
        try {
          revokeResource(ocs.pop());
        } catch (err) {}
      }
    }

    ocs = undefined;
    oc = undefined;
    keys = undefined;
    key = undefined;
    o = undefined;
  }

  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, "");
  }

  function harmonicMean(a, b) {
    return 2 / (1 / a + 1 / 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);
  }

  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)];
  }

  var EXTRA_MATCH_SCORE = 9;
  var NVN_EXTRA_MATCH_SCORE = 8;
  var EQUAL_MATCH_SCORE = 10;
  var WORD_MATCH_SCORE = 3;
  var HAS_WORD_SCORE = 30;
  var HAS_NVN_WORD_SCORE = 29;
  /***
   *
   * @param {SelectionItem2} 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().toLowerCase();

    var __nvnText__ = nonAccentVietnamese(__text__);

    item.__words__ = __text__.split(spliter);
    item.__text__ = item.__words__.join(' ');

    item.__words__.sort();

    item.__wordDict__ = item.__words__.reduce(function (ac, cr, i) {
      ac[cr] = i + 1;
      return ac;
    }, {});
    item.__nvnWords__ = __nvnText__.split(spliter);
    item.__nvnText__ = item.__nvnWords__.join(' ');

    item.__nvnWords__.sort();

    item.__nvnWordDict__ = item.__nvnWords__.reduce(function (ac, cr, i) {
      ac[cr] = i + 1;
      return ac;
    }, {});
    return item;
  }

  function isItemMustIncluded(queryItem, item) {
    if (!queryItem) return true;

    if (item.__nvnText__.indexOf(queryItem.__nvnText__) >= 0) {
      return true;
    }

    var dict1 = queryItem.__nvnWordDict__;
    var dict2 = item.__nvnWordDict__;

    for (var i in dict1) {
      for (var j in dict2) {
        if (j.indexOf(i) < 0) return false;
      }
    }

    return true;
  }

  function calcItemMatchScore(queryItem, item) {
    var score = 0;
    if (!item.__text__) return 0;
    var hwScore = 0;
    var i;

    for (i = 0; i < queryItem.__words__.length; ++i) {
      if (item.__wordDict__[queryItem.__words__[i]]) {
        hwScore += HAS_WORD_SCORE;
      } else if (item.__nvnWordDict__[queryItem.__nvnWords__[i]]) {
        hwScore += HAS_NVN_WORD_SCORE;
      }
    }

    score = hwScore;

    if (item.__text__ === queryItem.__text__) {
      score += EQUAL_MATCH_SCORE;
    }

    var extraIndex = item.__text__.indexOf(queryItem.__text__);

    if (extraIndex >= 0) {
      score += EXTRA_MATCH_SCORE;
    }

    extraIndex = item.__nvnText__.indexOf(queryItem.__nvnText__);

    if (extraIndex >= 0) {
      score += EXTRA_MATCH_SCORE;
    }

    var n = Math.max(queryItem.__words__.length + 1, 1);
    score = Math.max(score, wordsMatch(queryItem.__words__, item.__words__) / n * 2 * WORD_MATCH_SCORE, wordsMatch(queryItem.__nvnWords__, item.__nvnWords__) / n * 2 * WORD_MATCH_SCORE);
    return score;
  }

  function scoreCmp(a, b) {
    if (b.score === a.score) {
      if (b.item.__nvnText__ > a.item.__nvnText__) return -1;
      return 1;
    }

    return b.score - a.score;
  }

  function keyStringOf(o) {
    var type = ListSearchFactor_typeof(o);

    var keys;

    if (o && type === "object") {
      if (o.getTime) {
        return 'd(' + o.getTime() + ')';
      } else if (o.length && o.map) {
        return 'a(' + o.map(function (val) {
          return keyStringOf(val);
        }).join(',') + ')';
      } else {
        keys = Object.keys(o);
        keys.sort();
        return 'o(' + keys.map(function (key) {
          return key + ':' + keyStringOf(o[key]);
        }).join(',') + ')';
      }
    } else {
      return type[0] + '(' + o + ')';
    }
  }

  function matchFilter(item, filter) {
    if (!filter) return true;
    var keys = item.keys;
    if (!keys) return false;

    for (var i in filter) {
      if (!keyCmp(keys[i], filter[i])) return false;
    }

    return true;
  }

  function toComparable(x) {
    if (!x) return x;

    var type = ListSearchFactor_typeof(x);

    if (type === 'string') return x;
    if (type === "number") return x;
    if (type === "boolean") return x;
    if (type.getTime) return type.getTime();
    return x;
  }

  function keyCmp(itemKey, filterKey) {
    if (itemKey === filterKey) return true;
    if (!itemKey !== !filterKey) return false;
    if (!itemKey || !filterKey) return false;
    var filterKeyString = keyStringOf(filterKey);

    function withFilter(x) {
      var xString = keyStringOf(x);
      var res = xString === filterKeyString;

      if (!res && ListSearchFactor_typeof(filterKey) === "object") {
        if (filterKey.some) {
          res = filterKey.some(function (y) {
            return keyStringOf(y) === x;
          });
        } else if ('min' in filterKey || 'max' in filterKey) {
          res = true;

          if ('min' in filterKey) {
            res = res && toComparable(x) >= toComparable(filterKey.min);
          }

          if ('max' in filterKey) {
            res = res && toComparable(x) <= toComparable(filterKey.max);
          }
        }
      }

      return res;
    }

    if (itemKey.some) {
      return itemKey.some(withFilter);
    } else return withFilter(itemKey);
  }

  function Slave() {
    this.items = [];
  }

  Slave.prototype.revokeResource = function () {
    revokeResource(this.items);
    this.items = undefined;
  };

  Slave.prototype.processItems = function (items) {
    this.items = items;
    this.items.forEach(function visit(item) {
      prepareSearchForItem(item);
      if (item.items) item.items.forEach(visit);
    });
  };

  Slave.prototype.callQuery = function (query) {
    prepareSearchForItem(query);
    var minScore = Infinity;
    var maxScore = -Infinity;
    var scoreHolders = this.items.map(function visit(item) {
      var res = {};
      res.score = calcItemMatchScore(query, item);
      res.mustIncluded = isItemMustIncluded(query, item);
      res.value = item.value;
      res.maxChildScore = -Infinity;

      if (item.items) {
        res.child = item.items.map(visit);
        res.maxChildScore = res.child.reduce(function (ac, cr) {
          return Math.max(ac, cr.maxChildScore, cr.score);
        }, res.maxChildScore);
      }

      minScore = Math.min(minScore, res.score);
      maxScore = Math.max(maxScore, res.score);
      return res;
    });
    var threshold = maxScore - (maxScore - minScore) / 4;
    if (maxScore < 3) threshold = maxScore - (maxScore - minScore) / 8;
    var resDict = scoreHolders.reduce(function rValue(ac, cr) {
      if (Math.max(cr.maxChildScore, cr.score) >= threshold || cr.mustIncluded) ac[cr.value] = [cr.score, cr.maxChildScore];
      if (cr.child) cr.child.reduce(rValue, ac);
      return ac;
    }, {});
    return resDict;
  };

  var slaves = {};

  global.transferSearchItems = function (id, items) {
    if (!slaves[id]) slaves[id] = new Slave();
    slaves[id].processItems(items);
  };

  global.callQuery = function (id, query) {
    if (slaves[id]) return slaves[id].callQuery(query);
    return null;
  };

  global.destroySlave = function (id) {
    revokeResource(slaves);
    delete slaves[id];
  };
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/ListSearchMaster.js





function ListSearchMaster() {
  this.prepare();
  this.id = randomIdent(8);
  this.cache = {};
}

ListSearchMaster.prototype.share = {
  worker: null
};

ListSearchMaster.prototype.prepare = function () {
  if (this.share.worker) return;
  this.share.worker = new Network_Thread({
    methods: {
      init: ListSearchFactor
    },
    extendCode: 'init(this)'
  });
};

ListSearchMaster.prototype.transfer = function (items) {
  this.cache = {};
  return this.share.worker.invoke('transferSearchItems', this.id, items);
};

ListSearchMaster.prototype.query = function (query) {
  var key = calcDTQueryHash(query);

  if (!this.cache[key]) {
    this.cache[key] = this.share.worker.invoke('callQuery', this.id, query);
  }

  return this.cache[key];
};

ListSearchMaster.prototype.destroy = function () {
  this.cache = {};
  this.share.worker.invoke('destroySlave', this.id);
};

/* harmony default export */ const list_ListSearchMaster = (ListSearchMaster);
;// 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;
var calcWidthLimit = function calcWidthLimit() {
  var width = getScreenSize().width;

  if (Detector_BrowserDetector.isMobile) {
    width -= 20;
  } else {
    width = width * 0.9 - 250;
  }

  return Math.min(width, 1280);
};

var makeSearchItem = function makeSearchItem(it, idx2key) {
  var res = {
    value: idx2key.length
  };
  var valueKey;
  res.text = it.text + '';
  if (it.desc) res.text += it.desc;
  valueKey = keyStringOf(it.value);
  it.valueKey = valueKey;
  idx2key.push(valueKey);

  if (it.items && it.items.length > 0 && it.items.map) {
    res.items = it.items.map(function (cIt) {
      return makeSearchItem(cIt, idx2key);
    });
  }

  return res;
};
/***
 * @extends Follower
 * @constructor
 */


function SelectListBox() {
  this._initDomHook();

  this._initControl();

  this._initScroller();

  this._initProperty();
  /***
   * @name strictValue
   * @type {boolean}
   * @memberOf SelectListBox#
   */

  /***
   * @name enableSearch
   * @type {boolean}
   * @memberOf SelectListBox#
   */

}

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'],
    props: {
      anchor: [1, 6, 2, 5]
    }
  });
};

SelectListBox.prototype.toLoadNextY = 200;
SelectListBox.prototype.preLoadN = 3;
SelectListBox.prototype.itemHeightMode = [20, 30];
SelectListBox.prototype.itemHeight = 20;

SelectListBox.prototype.revokeResource = function () {
  if (this.searchMaster) {
    this.searchMaster.destroy();
    this.searchMaster = null;
  }

  revokeResource(this._items); // var n = items.length;

  this._items = undefined;
  revokeResource(this.idx2key);
  this.idx2key = undefined;
  revokeResource(this.key2idx);
  this.key2idx = undefined;
  revokeResource(this.searchingItems);
  this.searchingItems = undefined;
  revokeResource(this._itemNodeHolderByValue);
  this._itemNodeHolderByValue = undefined; // this._filteredItems = [];// not need , only use when search

  revokeResource(this._preDisplayItems);
  this._preDisplayItems = undefined;
  revokeResource(this._displayItems);
  this._displayItems = undefined;
  revokeResource(this._searchCache);
  this._searchCache = undefined;
};

SelectListBox.prototype._initDomHook = function () {
  if (this.$attachhook) this.$attachhook.cancelWaiting();
  this.domSignal = new HTML5_DelaySignal();
  this.domSignal.on('viewListAt', this.viewListAt.bind(this));
  this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this));
  this.domSignal.on('viewListAtCurrentScrollTop', this.viewListAtCurrentScrollTop.bind(this));
  /**
   *
   * @type {ListSearchMaster|null}
   */

  this.searchMaster = null;
  this.widthLimit = calcWidthLimit();
  this.addStyle('--as-width-limit', this.widthLimit + 'px');
};

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;
  var data;

  for (var i = 0; i < n; ++i) {
    itemElt = pageElt.childNodes[i];
    data = this._displayItems[offset + i];

    if (data && data !== true && data.text) {
      if (!data.textLength) data.textLength = utils_measureText(data.text + '', '14px arial').width;

      if (data.textLength > this.widthLimit - 5) {
        itemElt.attr('title', data.text);
      } else itemElt.attr('title', null);
    } else {
      itemElt.attr('title', null);
    }

    itemElt.data = data;
    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) {
  var _this = this;

  if (!this.isDescendantOf(document.body)) {
    this.$attachhook.once('attached', function () {
      _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);
  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 / 14 + 'em');

    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) {
  var _this2 = this;

  text = text.trim().replace(/\s\s+/, ' ');
  if (text.length === 0) return Promise.resolve(this._items);
  this.prepareSearch();
  this._searchCache[text] = this._searchCache[text] || this.searchMaster.query({
    text: text
  }).then(function (searchResult) {
    if (!searchResult) return;

    var scoreOf = function scoreOf(it) {
      var idx = _this2.key2idx[it.valueKey];
      var sc = searchResult[idx];
      if (!sc) return -Infinity;
      return Math.max(sc[0], sc[1]) * 1000000 - idx;
    };

    var makeList = function makeList(originItems) {
      var items = originItems.filter(function (it) {
        var idx = _this2.key2idx[it.valueKey];
        if (searchResult[idx]) return true;
        return false;
      }).map(function (it) {
        var cpItem = Object.assign({}, it);
        if (it.items) cpItem.items = makeList(it.items);
        return cpItem;
      });
      items.sort(function (a, b) {
        return scoreOf(b) - scoreOf(a);
      });
      return items;
    };

    return makeList(_this2._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 / 14 + 'em'
  });
};

SelectListBox.prototype.focus = function () {
  if (this.enableSearch) this.$searchInput.focus();
};

SelectListBox.prototype.footerMinWidth = 0;

SelectListBox.prototype._updateItems = function () {
  this._hasIcon = this._items.some(function hasIcon(it) {
    var res = !!it.icon;

    if (!res && it.items) {
      res = it.items.some(hasIcon);
    }

    return res;
  });

  if (this._hasIcon) {
    this.itemHeight = this.itemHeightMode[1];
  } else {
    this.itemHeight = this.itemHeightMode[0];
  }

  this._preDisplayItems = this._itemsToNodeList(this._items);
  this._searchCache = {};
  var estimateSize = measureListSize(this._itemNodeList);
  estimateSize.width = Math.min(this.widthLimit || Infinity, estimateSize.width);
  this._estimateSize = estimateSize;
  this._estimateWidth = estimateSize.width;
  this._estimateDescWidth = estimateSize.descWidth;

  if (this._hasIcon) {
    this._estimateWidth += 32;
    this.addClass('as-has-icon');
  } else {
    this.removeClass('as-has-icon');
  }

  this.addStyle('--select-list-estimate-width', Math.max(this.footerMinWidth, this._estimateWidth) / 14 + 'em');
  this.addStyle('--select-list-desc-width', this._estimateDescWidth / 14 + 'em');

  this._updateDisplayItem();

  this.transferSearchDataIfNeed();
};

SelectListBox.prototype.transferSearchDataIfNeed = function () {
  var _this3 = this;

  if (!this.searchMaster) return;
  this.idx2key = [];
  this.searchingItems = this._items.map(function (it) {
    return makeSearchItem(it, _this3.idx2key);
  });
  this.key2idx = this.idx2key.reduce(function (ac, cr, i) {
    ac[cr] = i;
    return ac;
  }, {});
  this.searchMaster.transfer(this.searchingItems);
};

SelectListBox.prototype.prepareSearch = function () {
  if (!this.searchMaster) {
    this.searchMaster = new list_ListSearchMaster();
    this.transferSearchDataIfNeed();
  }
};
/***
 *
 * @param value
 * @returns {{idx: number, item:{text:string, value:number|string}}[]}
 */


SelectListBox.prototype.findDisplayItemsByValue = function (value) {
  return (this._displayItemHolderByValue[value] || []).slice();
};

SelectListBox.prototype._implicit = function (values) {
  if (!(values instanceof Array)) {
    if (values === null || values === undefined) values = [];else values = [values];
  }

  return values.reduce(function (ac, cr) {
    if (!ac.dict[cr]) {
      ac.dict[cr] = true;
      ac.result.push(cr);
    }

    return ac;
  }, {
    result: [],
    dict: {}
  }).result;
};

SelectListBox.prototype._explicit = function (values) {
  if (this.strictValue) {
    return values.filter(function (value) {
      return !!this._itemNodeHolderByValue[value];
    }.bind(this));
  } else {
    return values.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 || [];
    if (!(items instanceof Array)) items = [];
    items = copySelectionItemArray(items, {
      removeNoView: true,
      removeNewLine: true
    });
    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 = this._implicit(values);
    this._values = values;
    this._valueDict = values.reduce(function (ac, cr) {
      ac[cr + ''] = true;
      return ac;
    }, {});

    this._updateDisplayItem();

    this.viewListAtCurrentScrollTop();
    if (this._pageOffsets[this.preLoadN] > this._pageOffsets[0]) this._updateSelectedItem();
  },
  get: function get() {
    return this._explicit(this._values);
  }
};
SelectListBox.property.strictValue = {
  set: function set(value) {
    if (value) {
      this.addClass('as-strict-value');
    } else {
      this.removeClass('as-strict-value');
    }
  },
  get: function get() {
    return this.hasClass('as-strict-value');
  }
};
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.hasClass('as-enable-search');
  }
};
/***
 *
 * @type {SelectListBox|{}}
 */

SelectListBox.eventHandler = {};
/*
*
* @param {MouseEvent} event
*/

SelectListBox.eventHandler.click = function (event) {
  if (event.target === this) this.notifyPressOut();
};
/***
 * @this SelectListBox
 */


SelectListBox.eventHandler.searchModify = function () {
  var _this4 = this;

  var text = this.$searchInput.value;
  var searchSession = Math.random() + '';
  this._searchSession = searchSession;
  this.searchItemByText(text).then(function (searchedItems) {
    if (searchSession !== _this4._searchSession) return;
    _this4._preDisplayItems = _this4._itemsToNodeList(searchedItems);
    _this4._displayItems = _this4._filterDisplayItems(_this4._preDisplayItems);

    _this4.$content.addStyle({
      'height': _this4._displayItems.length * _this4.itemHeight / 14 + 'em'
    });

    _this4._updateItemNodeIndex();

    _this4.viewListAt(0);

    _this4.$listScroller.scrollTop = 0;

    _this4.updatePosition();
  });
};

SelectListBox.eventHandler.scroll = function () {
  var itemHeight = this.itemHeight * SelectListBox_$(document.body).getFontSize() / 14;
  var scrollerBound = this.$listScroller.getBoundingClientRect();

  var topIdx = this._findFirstPageIdx();

  if (!this.$listPages[topIdx]) return;
  var screenSize = getScreenSize();
  var maxItem = Math.ceil(Math.max(window.screen.height, screenSize.height) / itemHeight);
  var topBound = this.$listPages[topIdx].getBoundingClientRect();

  var botIdx = this._findLastPageIdx();

  if (!this.$listPages[botIdx]) return;
  var botBound;
  botBound = this.$listPages[botIdx].getBoundingClientRect();

  if (topBound.top > scrollerBound.top || topBound.bottom < scrollerBound.bottom) {
    this.viewListAt(Math.floor(this.$listScroller.scrollTop / 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] * 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] * 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/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.$selectlistBox.sponsorElement = 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.hasClass('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.hasClass('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/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)] / int_harmonicMean(m, n);
}
/**
 *
 * @param {Array<String>} sq1
 * @param {Array<String>} sq2
 * @param {number=} matchWordPow
 */

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(int_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/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 = stringFormat_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 (stringFormat_nonAccentVietnamese(b.text) > stringFormat_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(stringFormat_nonAccentVietnamese(text), stringFormat_nonAccentVietnamese(filterText))) / 2;
      if (stringFormat_nonAccentVietnamese(text).replace(/s/g, '').toLowerCase().indexOf(stringFormat_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 (stringFormat_nonAccentVietnamese(b.text) > stringFormat_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.hasClass('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.hasClass('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 = stringFormat_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 (stringFormat_nonAccentVietnamese(b.text) > stringFormat_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(stringFormat_nonAccentVietnamese(text), stringFormat_nonAccentVietnamese(filterText))) / 2;
      if (stringFormat_nonAccentVietnamese(text).replace(/s/g, '').toLowerCase().indexOf(stringFormat_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 (stringFormat_nonAccentVietnamese(b.text) > stringFormat_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.hasClass('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.hasClass('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');
  this.on('click', function (event) {
    if (this.readOnly) event.preventDefault();
  }, true);
}

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;
    }
  },
  readOnly: CheckBoxInput.property.readOnly
};
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/TSLMoveTool.js
/***
 *
 * @param {TableScroller} elt
 * @constructor
 */




function TSLMoveTool(elt) {
  var _this = this;

  this.elt = elt;
  this.$table = null;
  Object.keys(TSLMoveTool.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) {
      _this[key] = _this[key].bind(_this);
    }
  });
  this.init();
}

TSLMoveTool.prototype.init = function () {
  this.elt = ACore_({
    tag: js_Hanger,
    elt: this.elt,
    on: {
      predrag: this.ev_preDrag,
      dragstart: this.ev_dragStart,
      drag: this.ev_drag,
      dragend: this.ev_dragEnd
    }
  });
};

TSLMoveTool.prototype.onAttachTable = function () {};

TSLMoveTool.prototype.ev_preDrag = function (event) {
  var e = event.target;
  var isOK = false;

  while (e && e.tagName !== 'TABLE') {
    if (e.classList && e.classList.contains('as-drag-zone')) {
      isOK = true;
      break;
    }

    e = e.parentElement;
  }

  if (isOK) {
    event.preventDefault();
  } else {
    event.cancel();
  }
};

TSLMoveTool.prototype._findRowIdx = function (y) {
  var newY = Math_Rectangle.fromClientRect(this.elt.$originTableBody.getBoundingClientRect()).y;
  var oldY = this.dragData.bodyBound.y;
  var dy = newY - oldY;
  var yArr = this.dragData.rowBounds.map(function (rect) {
    return rect.y + dy + rect.height / 2;
  });
  if (this.dragData.rowBounds.length === 0) yArr.push(0);
  var low = 0;
  var high = yArr.length - 1;
  var mid0, mid1;

  while (low < high) {
    mid0 = low + high >> 1;
    mid1 = mid0 + 1;

    if (Math.abs(y - yArr[mid0]) < Math.abs(y - yArr[mid1])) {
      high = mid0;
    } else {
      low = mid1;
    }
  }

  return low;
};

TSLMoveTool.prototype.ev_dragStart = function (event) {
  var t = this.findRow(event.target);
  if (!t) return;
  this.elt.addClass('as-dragging');
  this.dragData = Object.assign({}, t);
  this.dragData.copy.addClass('as-dragging');
  this.dragData.original.addClass('as-dragging');
  var rowBound = Math_Rectangle.fromClientRect(this.dragData.original.getBoundingClientRect());
  var bodyBound = Math_Rectangle.fromClientRect(this.elt.$originTableBody.getBoundingClientRect());
  this.dragData.mouseOffset = event.currentPoint.sub(rowBound.A());
  this.dragData.rowIdx = Array.prototype.indexOf.call(this.elt.$originTableBody.childNodes, this.dragData.original);
  this.dragData.newRowIdx = this.dragData.rowIdx;
  this.dragData.rowBound = rowBound;
  this.dragData.bodyBound = bodyBound;
  this.dragData.rowOffset = rowBound.A().sub(bodyBound.A());
  this.dragData.rowBounds = Array.prototype.map.call(this.elt.$originTableBody.childNodes, function (elt) {
    return Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
  });
};

TSLMoveTool.prototype.ev_drag = function (event) {
  var _this2 = this;

  if (!this.dragData) return;
  var bodyBound = Math_Rectangle.fromClientRect(this.elt.$originTableBody.getBoundingClientRect());
  var rowA = bodyBound.A().add(this.dragData.rowOffset);
  var rowTransformed = event.currentPoint.sub(this.dragData.mouseOffset);
  var transform = rowTransformed.sub(rowA);
  var originalRow = this.dragData.original;
  originalRow.addStyle('transform', "translate(0, ".concat(transform.y, "px )"));
  this.dragData.copy.addStyle('transform', "translate(0, ".concat(transform.y, "px )"));
  this.dragData.hiddenCells = Array.prototype.filter.call(this.dragData.original.childNodes, function (e) {
    return e.tagName === 'TD';
  }).slice(0, this.elt.fixedCol);
  this.dragData.hiddenCells.forEach(function (e) {
    return ACore_$(e).addClass('as-transparent-fix');
  });

  var newIdx = this._findRowIdx(rowTransformed.y + this.dragData.rowBound.height / 2);

  this.dragData.newRowIdx = newIdx;
  var rows = this.elt.$originTableBody.childNodes;
  var curIdx = this.dragData.rowIdx; // var copyRows = this.elt.$f

  var rowBound = this.dragData.rowBound;
  rows.forEach(function (elt, i) {
    if (elt === originalRow) return;

    var copyElt = _this2.elt.leftCopyRows[elt.getAttribute('data-id')];

    var dy = 0;

    if (i >= Math.min(newIdx, curIdx) && i <= Math.max(newIdx, curIdx)) {
      if (i > curIdx && i <= newIdx) {
        dy = -rowBound.height;
      } else if (i >= newIdx && i < curIdx) {
        dy = rowBound.height;
      }
    }

    elt.addStyle('transform', "translate(0, ".concat(dy, "px)"));
    copyElt.addStyle('transform', "translate(0, ".concat(dy, "px)"));
  });
};

TSLMoveTool.prototype.ev_dragEnd = function (event) {
  var _this3 = this;

  this.dragData.original.removeStyle('transform');
  this.dragData.copy.removeStyle('transform');
  this.dragData.copy.removeClass('as-dragging');
  this.dragData.original.removeClass('as-dragging');
  this.elt.removeClass('as-dragging');
  this.elt.removeClass('as-has-new-pos');
  this.dragData.hiddenCells.forEach(function (e) {
    return e.removeClass('as-transparent-fix');
  });
  var rows = this.elt.$originTableBody.childNodes;
  rows.forEach(function (elt) {
    var copyElt = _this3.elt.leftCopyRows[elt.getAttribute('data-id')];

    elt.addStyle('transform', 'translate(0, 0)');
    copyElt.addStyle('transform', 'translate(0, 0)');
  });
  var at, copyAt;

  if (this.dragData.newRowIdx !== this.dragData.rowIdx) {
    at = rows[this.dragData.newRowIdx];
    copyAt = this.elt.leftCopyRows[at.attr('data-id')];

    if (this.dragData.rowIdx < this.dragData.newRowIdx) {
      ACore_$(at.parentElement).addChildAfter(this.dragData.original, at);
      ACore_$(copyAt.parentElement).addChildAfter(this.dragData.copy, copyAt);
    } else {
      ACore_$(at.parentElement).addChildBefore(this.dragData.original, at);
      ACore_$(copyAt.parentElement).addChildBefore(this.dragData.copy, copyAt);
    }

    this.elt.reindexRows();
    this.elt.emit('orderchange', {
      target: this.elt,
      from: this.dragData.rowIdx,
      to: this.dragData.newRowIdx
    }, this.elt);
  }
};

TSLMoveTool.prototype.findRow = function (fromElt) {
  var e = fromElt;
  var rowElt;

  while (e) {
    if (e.tagName === 'TR') {
      rowElt = e;
      break;
    }

    e = e.parentElement;
  }

  if (!rowElt) return null;
  var id = rowElt.getAttribute('data-id');
  return {
    original: ACore_$(this.elt.originalRows[id]),
    copy: ACore_$(this.elt.leftCopyRows[id])
  };
};

/* harmony default export */ const tablescroller_TSLMoveTool = (TSLMoveTool);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tablescroller/TableScroller.js







var TableScroller_$ = absol_acomp_ACore.$;
var TableScroller_ = absol_acomp_ACore._;

var sliceCellArray = function sliceCellArray(cells, start, end) {
  if (typeof start !== "number") start = 0;
  if (typeof end !== "number") end = Infinity;
  var res = [];
  cells = cells.slice();
  var cell, colSpan;
  var n = 0;

  while (cells.length > 0) {
    cell = cells.shift();
    colSpan = parseInt(cell.getAttribute('colspan') || '1') || 1;
    n += colSpan;
    if (n > start && n <= end) res.push(cell);
  }

  return res;
};
/***
 * @extends {AElement}
 * @constructor
 */


function TableScroller() {
  this.$originCtn = TableScroller_$('.as-table-scroller-origin-table-ctn', this);
  this.$originTable = undefined;
  this.$originContent = undefined;
  this.$fixedYHeaderScroller = TableScroller_$('.as-table-scroller-fixed-y-header-scroller', this);
  this.$fixedYHeader = TableScroller_$('.as-table-scroller-fixed-y-header', this);
  this.$fixedXYHeader = TableScroller_$('.as-table-scroller-fixed-xy-header', this);
  this.$fixXCol = TableScroller_$('.as-table-scroller-fixed-x-col', this);
  this.$attachHook = TableScroller_$('attachhook', this);
  this.$attachHook.requestUpdateSize = this.updateContentSize.bind(this);
  this.requestUpdateSize = this.updateContentSize.bind(this);
  this.$attachHook.on('attached', function () {
    HTML5_Dom.addToResizeSystem(this);
  });
  this.$domSignal = TableScroller_('attachhook');
  this.appendChild(this.$domSignal);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  this.domSignal.on('requestUpdateContent', this.updateContent.bind(this));
  this.$vscrollbar = TableScroller_$('.absol-table-scroller-vscrollbar-container vscrollbar', this);
  this.$hscrollbar = TableScroller_$('.absol-table-scroller-hscrollbar-container hscrollbar', this);
  this.$vscroller = TableScroller_$('.as-table-scroller-vertical-scroller', this);
  this.$hscroller = TableScroller_$('.as-table-scroller-horizontal-scroller', this);
  this.$leftLine = TableScroller_$('.absol-table-scroller-left-line', this).addStyle('display', 'none');
  this.$headLine = TableScroller_$('.absol-table-scroller-head-line', this);
  this.scrollCtr = new ScrollController(this);
  this.moveTool = new tablescroller_TSLMoveTool(this);
  this._swappedPairs = [];
  this.originalRows = {};
  this.leftCopyRows = {};
  /***
   * @name fixedCol
   * @type {number}
   * @memberOf TableScroller#
   */
}

TableScroller.tag = 'TableScroller'.toLowerCase();

TableScroller.render = function () {
  return TableScroller_({
    "class": 'absol-table-scroller',
    extendEvent: ['orderchange', 'preupdatesize', 'sizeupdated'],
    child: [{
      "class": 'absol-table-scroller-content',
      child: [{
        "class": 'as-table-scroller-vertical-scroller',
        child: [{
          "class": 'as-table-scroller-horizontal-scroller-viewport',
          child: [{
            "class": 'as-table-scroller-fixed-x-col-ctn',
            child: {
              tag: 'table',
              "class": 'as-table-scroller-fixed-x-col'
            }
          }, {
            "class": 'as-table-scroller-horizontal-scroller',
            child: [{
              "class": 'as-table-scroller-origin-table-ctn'
            }]
          }]
        }]
      }, {
        "class": 'as-table-scroller-fixed-y-header-ctn',
        child: {
          "class": 'as-table-scroller-fixed-y-header-scroller',
          child: {
            tag: 'table',
            "class": 'as-table-scroller-fixed-y-header'
          }
        }
      }, {
        "class": 'as-table-scroller-fixed-xy-header-ctn',
        child: {
          tag: 'table',
          "class": 'as-table-scroller-fixed-xy-header'
        }
      }, '.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 = ['body .absol-table-scroller {', '    --scrollbar-width: ' + (size.width + 0) + 'px', '}'].join('\n');
  HTML5_Dom.updateResizeSystem();
  setTimeout(HTML5_Dom.updateResizeSystem.bind(HTML5_Dom), 30); // css load delay
});
TableScroller.eventHandler = {};

TableScroller.prototype.clearChild = function () {
  this.$fixXCol.clearChild();
  this.$fixedYHeader.clearChild();
  this.$fixedXYHeader.clearChild();
  this.$originTable = null;
  return this;
};

TableScroller.prototype.addChild = function (elt) {
  if (this.$originTable) {
    throw new Error('Only one table is accepted!');
  }

  this.$originContent = elt;
  this.$originTable = TableScroller_$('table', this.$originContent);
  this.$originCtn.addChild(this.$originTable);
  this.requestUpdateContent();
};

TableScroller.prototype._revertWrapped = function () {
  var pair;

  while (this._swappedPairs.length > 0) {
    pair = this._swappedPairs.pop();
    swapChildrenInElt(pair[0], pair[1]);
  }
};

TableScroller.prototype._makeDataIdent = function () {
  var _this = this;

  this.originalRows = {};
  Array.prototype.slice.call(this.$originTableBody.childNodes).forEach(function (elt, i) {
    var id;

    if (elt.tagName === 'TR') {
      id = elt.getAttribute('data-id') || randomIdent(12) + '_' + i;
      elt.setAttribute('data-id', id);
      _this.originalRows[id] = TableScroller_$(elt);
    } else {
      elt.remove();
    }
  });
};

TableScroller.prototype._updateFixedYHeader = function () {
  var _this2 = this;

  var head = TableScroller_$(this.$originTableThead.cloneNode(false));
  var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, function (elt) {
    return elt.tagName === 'TR';
  }).map(function (tr) {
    var copyTr = TableScroller_$(tr.cloneNode(false));
    copyTr.$origin = tr;
    var cells = Array.prototype.filter.call(tr.childNodes, function (elt) {
      return elt.tagName === 'TH' || elt.tagName === 'TD';
    }).map(function (td) {
      return TableScroller_$(Object.assign(td.cloneNode(true), {
        $origin: td
      }));
    });
    copyTr.addChild(cells);
    sliceCellArray(cells, _this2.fixedCol).forEach(function (elt) {
      swapChildrenInElt(elt, elt.$origin);

      _this2._swappedPairs.push([elt, elt.$origin]);
    });
    return copyTr;
  });
  head.addChild(headRows);
  this.$fixedYHeader.clearChild().addChild(head);
  this.$fixedYHeader.attr('class', this.$originTable.attr('class')).addClass('as-table-scroller-fixed-y-header');
};

TableScroller.prototype._updateFixedYHeaderSize = function () {
  var bound = this.$originTable.getBoundingClientRect();
  this.$fixedYHeader.addStyle('width', bound.width + 'px');
  Array.prototype.forEach.call(this.$fixedYHeader.firstChild.firstChild.childNodes, function (elt) {
    var bound = elt.$origin.getBoundingClientRect();
    elt.addStyle('width', bound.width + 'px');

    if (bound.width + bound.height === 0) {
      elt.addStyle('display', 'none');
    } else {
      elt.removeStyle('display');
    }
  });
  this.$headLine.addStyle('top', this.$fixedYHeader.getBoundingClientRect().height - 1 + 'px').addStyle('max-width', bound.width + 'px');
};

TableScroller.prototype._updateFixedXCol = function () {
  var _this3 = this;

  this.$fixXCol.clearChild();
  var head = TableScroller_$(this.$originTableThead.cloneNode(false));
  var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, function (elt) {
    return elt.tagName === 'TR';
  }).map(function (tr) {
    var copyTr = TableScroller_$(tr.cloneNode(false));
    copyTr.$origin = tr;
    var cells = Array.prototype.filter.call(tr.childNodes, function (elt) {
      return elt.tagName === 'TH' || elt.tagName === 'TD';
    });
    cells = sliceCellArray(cells, 0, _this3.fixedCol).map(function (td) {
      return TableScroller_$(Object.assign(td.cloneNode(true), {
        $origin: td
      }));
    });
    copyTr.addChild(cells);
    return copyTr;
  });
  head.addChild(headRows);
  var body = TableScroller_$(this.$originTableBody.cloneNode());
  var rows = Array.prototype.filter.call(this.$originTableBody.childNodes, function (elt) {
    return elt.tagName === 'TR';
  }).map(function (tr) {
    var copyTr = TableScroller_$(tr.cloneNode(false));
    copyTr.$origin = tr;
    var id = copyTr.attr('data-id');
    _this3.leftCopyRows[id] = copyTr;
    var cells = Array.prototype.filter.call(tr.childNodes, function (elt) {
      return elt.tagName === 'TH' || elt.tagName === 'TD';
    });
    cells = sliceCellArray(cells, 0, _this3.fixedCol).map(function (td) {
      return TableScroller_$(Object.assign(td.cloneNode(true), {
        $origin: td
      }));
    });
    cells.forEach(function (elt) {
      swapChildrenInElt(elt, elt.$origin);

      _this3._swappedPairs.push([elt, elt.$origin]);
    });
    copyTr.addChild(cells);
    return copyTr;
  });
  body.addChild(rows);
  this.$fixXCol.addChild(head).addChild(body);
  this.$fixXCol.attr('class', this.$originTable.attr('class')).addClass('as-table-scroller-fixed-x-col');
};

TableScroller.prototype._updateFixedXColSize = function () {
  if (this.fixedCol === 0) return;
  var bound = this.$originTable.getBoundingClientRect();
  this.$fixXCol.addStyle('height', bound.height + 'px');
  Array.prototype.forEach.call(this.$fixXCol.firstChild.childNodes, function (elt) {
    elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px');
  });
  Array.prototype.forEach.call(this.$fixXCol.firstChild.firstChild.childNodes, function (elt) {
    elt.addStyle('width', elt.$origin.getBoundingClientRect().width + 'px');
  });
  Array.prototype.forEach.call(this.$fixXCol.lastChild.childNodes, function (elt) {
    elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px');
  });
};

TableScroller.prototype._updateFixedXYHeader = function () {
  var _this4 = this;

  var head = TableScroller_$(this.$originTableThead.cloneNode(false));
  var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, function (elt) {
    return elt.tagName === 'TR';
  }).map(function (tr) {
    var copyTr = TableScroller_('tr');

    copyTr.$origin = tr;
    var cells = Array.prototype.filter.call(tr.childNodes, function (elt) {
      return elt.tagName === 'TH' || elt.tagName === 'TD';
    });
    cells = sliceCellArray(cells, 0, _this4.fixedCol).map(function (td) {
      return TableScroller_$(Object.assign(td.cloneNode(true), {
        $origin: td
      }));
    });
    copyTr.addChild(cells);
    cells.forEach(function (cell) {
      swapChildrenInElt(cell, cell.$origin);

      _this4._swappedPairs.push([cell, cell.$origin]);
    });
    return copyTr;
  });
  head.addChild(headRows);
  this.$fixedXYHeader.clearChild().addChild(head);
  this.$fixedXYHeader.attr('class', this.$originTable.attr('class')).addClass('as-table-scroller-fixed-xy-header');
};

TableScroller.prototype._updateFixedXYHeaderSize = function () {
  Array.prototype.forEach.call(this.$fixedXYHeader.firstChild.childNodes, function (elt) {
    elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px');
  });
  Array.prototype.forEach.call(this.$fixedXYHeader.firstChild.firstChild.childNodes, function (elt) {
    elt.addStyle('width', elt.$origin.getBoundingClientRect().width + 'px');
  });
  this.$leftLine.addStyle('left', this.$fixedXYHeader.getBoundingClientRect().width - 1 + 'px');
};

TableScroller.prototype.updateContent = function () {
  var _this5 = this;

  if (!this.$originTable) return;

  this._revertWrapped();

  this.$originTableThead = TableScroller_$('thead', this.$originTable);
  this.$originTableBody = TableScroller_$('tbody', this.$originTable);

  this._makeDataIdent();

  this._updateFixedYHeader();

  this._updateFixedXCol();

  this._updateFixedXYHeader();

  this.reindexRows();
  this.updateContentSize();
  requestAnimationFrame(function () {
    _this5.updateContentSize();
  });
};

TableScroller.prototype._updateScrollStatus = function () {
  var bound = this.getBoundingClientRect();
  var tableBound = this.$originTable.getBoundingClientRect();

  if (bound.width < tableBound.width) {
    this.addClass('as-scroll-horizontal');
    this.$vscrollbar.outerHeight = bound.height - 17;
  } else {
    this.$vscrollbar.outerHeight = bound.height;
    this.removeClass('as-scroll-horizontal');
  }

  if (bound.height < tableBound.height) {
    this.addClass('as-scroll-vertical');
    this.$hscrollbar.outerWidth = bound.width - 17;
  } else {
    this.$hscrollbar.outerWidth = bound.width;
    this.removeClass('as-scroll-vertical');
  }

  var paddingBottom = this.getComputedStyleValue('--tvs-scroll-padding-bottom');
  paddingBottom = parseFloat((paddingBottom || '0px').replace('px', ''));
  this.$vscrollbar.innerHeight = tableBound.height + paddingBottom;
  this.$hscrollbar.innerWidth = tableBound.width;
};

TableScroller.prototype.updateContentSize = function () {
  if (!this.$originTable) return;

  this._updateScrollStatus();

  this._updateFixedYHeaderSize();

  this._updateFixedXColSize();

  this._updateFixedXYHeaderSize();
};

TableScroller.prototype.reindexRows = function () {
  if (!this.$originTableBody) return;
  Array.prototype.filter.call(this.$originTableBody.childNodes, function (elt) {
    return elt.tagName === 'TR';
  }).forEach(function (elt, i) {
    if (elt.$idx === null) return;
    elt.$idx = elt.$idx || TableScroller_$('.as-table-scroller-row-index', elt) || null;
    if (elt.$idx) elt.$idx.attr('data-idx', i + 1);
  });
  Array.prototype.forEach.call(this.$fixXCol.lastChild.childNodes, function (elt, i) {
    if (elt.$idx === null) return;
    elt.$idx = elt.$idx || TableScroller_$('.as-table-scroller-row-index', elt) || null;
    if (elt.$idx) elt.$idx.attr('data-idx', i + 1);
  });
};

TableScroller.prototype.removeRow = function (row) {
  if (TableScroller_$(row).isDescendantOf(this)) {
    row.remove();
    this.requestUpdateContent();
  }

  return this;
};

TableScroller.prototype.addRowBefore = function (row, bf) {
  if (!this.$originTableBody) return this;
  this.$originTableBody.addChildBefore(row, bf);
  this.requestUpdateContent();
  return this;
};

TableScroller.prototype.addRowAfter = function (row, at) {
  if (!this.$originTableBody) return this;
  this.$originTableBody.addChildAfter(row, at);
  this.requestUpdateContent();
  return this;
};

TableScroller.prototype.requestUpdateContent = function () {
  this.domSignal.emit('requestUpdateContent');
};

TableScroller.property = {};
TableScroller.property.fixedCol = {
  set: function set(value) {
    value = value || 0;
    this._fixedCol = value;
    if (value === 0) this.$leftLine.addStyle('display', 'none');else this.$leftLine.removeStyle('display');
    this.requestUpdateContent(); // this.$domSignal.emit('requestUpdateContent');
  },
  get: function get() {
    return this._fixedCol || 0;
  }
};
absol_acomp_ACore.install(TableScroller);
/* harmony default export */ const tablescroller_TableScroller = (TableScroller);
/***
 *
 * @param {TableScroller} elt
 * @constructor
 */

function ScrollController(elt) {
  var _this6 = this;

  this.elt = elt;
  Object.keys(this.constructor.prototype).filter(function (k) {
    return k.startsWith('ev_');
  }).forEach(function (k) {
    return _this6[k] = _this6[k].bind(_this6);
  });
  this.vscrollTarget = null;
  this.hscrollTarget = null;
  this.elt.$vscroller.on('scroll', this.ev_vScrollerScroll);
  this.elt.$vscrollbar.on('scroll', this.ev_vScrollbarScroll);
  this.elt.$hscroller.on('scroll', this.ev_hScrollerScroll);
  this.elt.$hscrollbar.on('scroll', this.ev_hScrollbarScroll);
  this.elt.$fixedYHeaderScroller.on('scroll', this.ev_fixedYHeaderScroll);
}

ScrollController.prototype.ev_vScrollerScroll = function (event) {
  var now = new Date().getTime();
  if (this.vscrollTarget && now - this.vscrollTarget.time < 100 && this.vscrollTarget.elt !== this.elt.$vscroller) return;
  this.elt.$vscrollbar.innerOffset = this.elt.$vscroller.scrollTop;
  this.vscrollTarget = {
    time: now,
    elt: this.elt.$vscroller
  };
};

ScrollController.prototype.ev_vScrollbarScroll = function (event) {
  var now = new Date().getTime();
  if (this.vscrollTarget && now - this.vscrollTarget.time < 100 && this.vscrollTarget.elt !== this.elt.$vscrollbar) return;
  this.elt.$vscroller.scrollTop = this.elt.$vscrollbar.innerOffset;
  this.vscrollTarget = {
    time: now,
    elt: this.elt.$vscrollbar
  };
};

ScrollController.prototype.ev_hScrollerScroll = function (event) {
  var now = new Date().getTime();
  if (this.hscrollTarget && now - this.hscrollTarget.time < 100 && this.hscrollTarget.elt !== this.elt.$hscroller) return;
  this.elt.$hscrollbar.innerOffset = this.elt.$hscroller.scrollLeft;
  this.elt.$fixedYHeaderScroller.scrollLeft = this.elt.$hscroller.scrollLeft;
  this.hscrollTarget = {
    time: now,
    elt: this.elt.$hscroller
  };
};

ScrollController.prototype.ev_fixedYHeaderScroll = function (event) {
  var now = new Date().getTime();
  if (this.hscrollTarget && now - this.hscrollTarget.time < 100 && this.hscrollTarget.elt !== this.elt.$fixedYHeaderScroller) return;
  this.elt.$hscrollbar.innerOffset = this.elt.$fixedYHeaderScroller.scrollLeft;
  this.elt.$hscroller.scrollLeft = this.elt.$fixedYHeaderScroller.scrollLeft;
  this.hscrollTarget = {
    time: now,
    elt: this.elt.$fixedYHeaderScroller
  };
};

ScrollController.prototype.ev_hScrollbarScroll = function (event) {
  var now = new Date().getTime();
  if (this.hscrollTarget && now - this.hscrollTarget.time < 100 && this.hscrollTarget.elt !== this.elt.$hscrollbar) return;
  this.elt.$hscroller.scrollLeft = this.elt.$hscrollbar.innerOffset >> 0;
  this.vscrollTarget = {
    time: now,
    elt: this.elt.$hscrollbar
  };
};
// 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 _this = this;

  var thisTS = this;
  this.$attachHook = TableVScroller_$('attachhook', this);

  this.$attachHook.updateSize = function () {
    _this.updateStyle();

    _this.updateSize();
  };

  this.sync = new Promise(function (rs) {
    thisTS.$attachHook.on('attached', rs);
  });
  this.$viewport = TableVScroller_$('.absol-table-vscroller-viewport', this);
  this.$attachHook.on('attached', 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);
  this.swappedContentPairs = [];
}

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) {
    this.$table = elt.$table || TableVScroller_$('table', elt);

    if (this.$table) {
      this.$viewport.addChild(elt);
      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 () {
  if (!this.$thead) return;
  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;
  var widthStyle;
  var displayStyle;

  for (var i = 0; i < realNodes.length; ++i) {
    if (!realNodes[i].tagName) continue;
    widthStyle = TableVScroller_$(realNodes[i]).getComputedStyleValue('width');
    displayStyle = realNodes[i].getComputedStyleValue('display');

    if (!widthStyle) {
      widthStyle = realNodes[i].getBoundingClientRect().width;

      if (!widthStyle) {
        displayStyle = 'none';
      }

      widthStyle += 'px';
    } // console.trace(getAncestorElementOf(realNodes[i]), widthStyle, displayStyle)


    TableVScroller_$(topNodes[i]).attr('style', realNodes[i].attr('style')).addStyle('width', widthStyle).addStyle('display', displayStyle);
  }

  this.$topTable.removeStyle('display');
};

TableVScroller.prototype.updateContent = function () {
  var _this2 = this;

  this.swappedContentPairs.forEach(function (originElt, copyElt) {
    _this2.swappedContentPairs.push([originElt, copyElt]);
  });
  this.swappedContentPairs = [];
  var elt = this.$table;
  this.$thead = TableVScroller_$('thead', elt);
  this.$tr = TableVScroller_$('tr', this.$thead);
  this.$topThead = depthClone(this.$thead, function (originElt, copyElt) {
    if (originElt.tagName === 'TH') {
      swapChildrenInElt(originElt, copyElt);

      _this2.swappedContentPairs.push([originElt, copyElt]);
    }
  });
  this.$topTr = TableVScroller_$('tr', this.$topThead);
  this.$topTable.clearChild().addChild(this.$topThead).addStyle('display', 'none');
};

TableVScroller.prototype.update = function () {
  if (!this.$table) return;
  this.updateContent();
  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/list/search.js


var UNCASE_MATCH_SCORE = 4;
var UVN_MATCH_SCORE = 3;
var EXTRA_MATCH_SCORE = 9;
var NVN_EXTRA_MATCH_SCORE = 8;
var EQUAL_MATCH_SCORE = 10;
var WORD_MATCH_SCORE = 3;
var HAS_WORD_SCORE = 30;
var HAS_NVN_WORD_SCORE = 29;
/***
 *
 * @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().toLowerCase();

  var __words__ = __text__.split(spliter);

  __text__ = __words__.join(' ');

  var __wordDict__ = __words__.reduce(function (ac, cr, i) {
    ac[cr] = ac[cr] || i + 1;
    return ac;
  }, {});

  var __textNoneCase__ = __text__;

  var __nvnText__ = stringFormat_nonAccentVietnamese(__text__);

  var __nvnTextNoneCase__ = __nvnText__;

  var __nvnWordDict__ = __words__.reduce(function (ac, cr, i) {
    ac[cr] = ac[cr] || i + 1;
    return ac;
  }, {});

  Object.defineProperties(item, {
    __text__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __text__
    },
    __words__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __text__.split(spliter)
    },
    __wordDict__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __wordDict__
    },
    __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)
    },
    __nvnWordDict__: {
      configurable: true,
      enumerable: false,
      writable: true,
      value: __nvnWordDict__
    },
    __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__) return 0;
  var hwScore = 0;
  var i;

  for (i = 0; i < queryItem.__words__.length; ++i) {
    if (item.__wordDict__[queryItem.__words__[i]]) {
      hwScore += HAS_WORD_SCORE;
    } else if (item.__nvnWordDict__[queryItem.__nvnWords__[i]]) {
      hwScore += HAS_NVN_WORD_SCORE;
    }
  }

  score = hwScore;

  if (item.__text__ === queryItem.__text__) {
    score += EQUAL_MATCH_SCORE;
  }

  var extraIndex = item.__text__.indexOf(queryItem.__text__);

  if (extraIndex >= 0) {
    score += EXTRA_MATCH_SCORE;
  }

  extraIndex = item.__nvnText__.indexOf(queryItem.__nvnText__);

  if (extraIndex >= 0) {
    score += EXTRA_MATCH_SCORE;
  }

  var n = Math.max(queryItem.__words__.length + 1, 1);
  score = Math.max(score, wordsMatch(queryItem.__words__, item.__words__), wordsMatch(queryItem.__nvnWords__, item.__nvnWords__)) / n * 2 * WORD_MATCH_SCORE;
  return score;
}

function isItemMustIncluded(queryItem, item) {
  if (!queryItem) return true;

  if (item.__nvnText__.indexOf(queryItem.__nvnText__) >= 0) {
    return true;
  }

  var dict1 = queryItem.__nvnWordDict__;
  var dict2 = item.__nvnWordDict__;

  for (var i in dict1) {
    for (var j in dict2) {
      if (j.indexOf(i) < 0) return false;
    }
  }

  return true;
}
/***
 *
 * @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),
      mustIncluded: isItemMustIncluded(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 || it.mustIncluded;
  }).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);
    var mustIncluded = isItemMustIncluded(queryItem, item);
    gmaxScore = Math.max(score, gmaxScore);
    gminScore = Math.min(score, gminScore);
    var children = (item.items || []).map(function (item) {
      return makeScoreRecursive(item);
    });
    mustIncluded = mustIncluded || children.some(function (c) {
      return c.mustIncluded;
    });
    var maxScore = children.reduce(function (ac, cr) {
      return Math.max(ac, cr.maxScore);
    }, score);
    return {
      score: score,
      maxScore: maxScore,
      item: item,
      children: children,
      mustIncluded: mustIncluded
    };
  }

  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 || node.mustIncluded;
    }).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/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) {
    if (value && (this.disabled || this.readOnly)) return;
    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.hasClass('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.$;
/***
 *
 *  @augments HTMLTextAreaElement
 *  @augments AElement
 *
 * @constructor
 */

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.prototype.updateSize = function () {
  var heightStyle = this._measureHeight(this.value);

  this.addStyle('--content-height', heightStyle);
};

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 heightStyle = this._measureHeight(newText);

  this.addStyle('--content-height', heightStyle);
};

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('--content-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('--content-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._min = 0;
  this._hour = null;
  this._minute = null;
  this._format = 'HH:mm';
  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));
  HTML5_OOP.drillProperty(this, this, 'dayOffset', 'value');
  this.dayOffset = null;
  this.hour = null;
  this.minute = null;
  this.disabled = false;
  this.notNull = true;
  /***
   * @memberOf TimeInput#
   * @name min
   * @type {number}
   */

  /***
   * @memberOf TimeInput#
   * @name s24
   * @type {boolean}
   * @readonly
   */
}

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.value = {
  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";
    value = value || 'HH:mm';
    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.hasClass('as-must-not-null');
  }
};
TimeInput.property.readOnly = {
  set: function set(value) {
    value = !!value;
    if (value) this.addClass('as-read-only');else this.removeClass('as-read-only');
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
TimeInput.property.min = {
  set: function set(value) {
    if (!isRealNumber(value)) value = 0;
    value = Math.floor(value);
    value = Math.max(0, Math.min(MILLIS_PER_DAY, value));
    this._min = value;
  },
  get: function get() {
    return this._min;
  }
};
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) && !hitElement(this.share.$closeBtn, event)) return;

  this._releasePicker();
};

TimeInput.eventHandler.pickerChange = function (event) {
  this._applyValue(event.hour, event.minute);

  this._notifyIfChange(event);

  HTML5_ResizeSystem.requestUpdateSignal();
};
/***
 *
 * @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,
  $closeBtn: 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', 'as-dropdown-box-common-style'],
    child: [this.share.$picker, {
      "class": 'as-dropdown-box-footer',
      child: [{
        "class": 'as-dropdown-box-footer-right',
        child: ['<a data-ml-key="txt_close" class="as-select-list-box-close-btn"></a>']
      }]
    }]
  });
};

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.sponsorElement = 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.min = this.min;
  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.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.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.hasClass('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 (Array.isArray(node.items) && node.items.length > 0) node.items.forEach(visit.bind(null, level + 1));
  }

  if (items && items.forEach) 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);
};

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() {
  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;
  this.$selectlistBox.sponsorElement = 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/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 = int_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 || this.readOnly) {
    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.hasClass('as-disabled');
  },
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  }
};
TrackBar.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
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.hasClass('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.property.readOnly = {
  set: function set(value) {
    value = !!value;

    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }

    this.$input.readOnly = value;
    this.$trackbar.readOnly = value;
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
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, 200);
};
/***
 *
 * @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;
  if (!event.hasOwnProperty('files')) 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', 'as-size-loading'],
    props: {
      hangOn: 3
    }
  });
};

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.removeClass('as-size-loading');
};
/***
 *
 * @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.$primaryBtn = RibbonSplitButton_$('.as-ribbon-split-button-primary', this).on('click', this.eventHandler.clickPrimaryBtn);
  this.$extendBtn = RibbonSplitButton_$('.as-ribbon-split-button-extend', this);
  this.$extendText = RibbonSplitButton_$('.as-ribbon-split-button-text', this.$extendBtn);
  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'
        }
      }, {
        tag: 'button',
        attr: {
          'tabindex': '-1'
        },
        "class": 'as-ribbon-split-button-extend',
        child: ['span.as-ribbon-split-button-text', '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.$text.attr('data-text', value);
    if (this.$extendText) this.$extendText.attr('data-text', value);
  },
  get: function get() {
    return this.$text.attr('data-text') | '';
  }
};
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.$selectlistBox.sponsorElement = 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 / 14 + 'em');
};

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.hasClass('as-focus');
  },
  set: function set(value) {
    value = !!value;
    if (value && (this.disabled || this.readOnly)) return;
    if (this.isFocus == value) return;

    if (value) {
      this.addClass('as-focus');
    } else {
      this.removeClass('as-focus');
    }

    var thisI = this;

    if (value) {
      this.$selectlistBox.addTo(document.body);
      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.hasClass('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 (Dom_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
function MultiSelectMenu_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { MultiSelectMenu_typeof = function _typeof(obj) { return typeof obj; }; } else { MultiSelectMenu_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return MultiSelectMenu_typeof(obj); }











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.$selectlistBox.sponsorElement = this;
  this.disableClickToFocus = false;
  this.orderly = true;
  this.itemFocusable = false;
  this._activeValue = undefined;
  this.strictValue = true;
}

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.property.readOnly = SelectMenu2.property.readOnly;

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.prototype._implicit = function (values) {
  if (values === null || values === undefined) values = [];

  if (!(values instanceof Array)) {
    values = [values];
  }

  values = values.filter(function (value) {
    var type = MultiSelectMenu_typeof(value);

    return type === 'string' || type === 'number' || type === "boolean" || value === null || value === undefined;
  }).reduce(function (ac, cr) {
    if (!ac.dict[cr]) {
      ac.dict[cr] = true;
      ac.result.push(cr);
    }

    return ac;
  }, {
    result: [],
    dict: {}
  }).result;
  return values;
};

MultiSelectMenu.prototype._explicit = function (values) {
  var selectListBoxElt = this.$selectlistBox;
  var strictValue = this.strictValue;
  values = values.filter(function (value) {
    if (!strictValue) return true;
    var cts = selectListBoxElt.findItemsByValue(value);
    if (cts && cts.length > 0) return true;
    return false;
  });
  return values;
};

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 = this._implicit(values);
    this._values = values;
    this.$selectlistBox.values = values;

    this._updateItems();
  },
  get: function get() {
    return this._explicit(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.hasClass('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.hasClass('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.property.strictValue = {
  set: function set(value) {
    if (value) {
      this.attr('data-strict-value', null);
    } else {
      this.attr('data-strict-value', 'false');
    }
  },
  get: function get() {
    var data = this.attr('data-strict-value');
    return !data || data != 'false' && data !== '0';
  }
};
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 (this.disabled) return;

  if ((event.target === this || event.target === this.$itemCtn) && !this.disableClickToFocus && !this.readOnly) {
    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 = src_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'),
  sc: Toast_('.as-toast-list.as-sc.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);
  Toast.$toastList4Pos.sc.addTo(document.body);
});
/***
 *
 * @param {AbsolConstructDescriptor|{}} aObject,
 * @param {"se"|"sw"|"ne"|"nw"|"sc" } [pos="se"]
 * @return {AElementNS|AElement|Text}
 */

Toast.make = function (aObject, pos) {
  if (!Toast.$toastList4Pos[pos]) pos = "se";
  aObject = aObject || {};
  if (Toast_typeof(aObject) !== "object") throw new Error("param must be AbsolConstructDescriptor object!");

  if (Dom_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);
// 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.hasClass && e.hasClass('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 = ACore_$('attachhook', this);
  this.$attachHook.requestUpdateSize = this.eventHandler.positionChange;
  this.$attachHook.on('attached', this.eventHandler.attached);
  this.$anchor = ACore_$('.as-rotated-text-anchor', this);
  this.$content = ACore_$('.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 = ACore_$('.as-vertical-tree-diagram-child-ctn', this);
  this.$name = ACore_$('.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 = ACore_$('input', this).on('keydown', this.eventHandler.inputKeyDown).on('focus', this.eventHandler.inputInteract).on('click', this.eventHandler.inputInteract).on('keydown', this.eventHandler.inputInteract);
  this.$attachhook = ACore_$('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.sponsorElement = 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.hasClass('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.hasClass && elt.hasClass('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.hasClass && item.hasClass('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.followTarget = this;

  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.selfRemove();
  this.$selectlistBox.followTarget = null;
  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.hasClass && childElt.hasClass('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.hasClass && childElt.hasClass('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 _this = this;

  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.value = '';
  setTimeout(function () {
    _this.$input.focus();
  }, 30);
};

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.hasClass('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/Ref.js
/***
 *
 * @param {T} value
 * @param {*=} type
 * @constructor
 * @template T
 */
function Ref(value, type) {
  this.type = type;
  this.value = 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/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 {{defined?:function,revoked?:function,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, 'unloadAttributeHandlers', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function value(oldHandlers) {
    var self = this;
    Object.keys(oldHandlers).forEach(function (key) {
      self.revokeProperty(key, oldHandlers[key]);
    });
  }
});
Object.defineProperty(Attributes.prototype, 'revokeProperty', {
  enumerable: false,
  configurable: true,
  writable: false,
  value: function value(name, handler) {
    if (!this._definedProperties[name]) return;
    if (handler && this._definedProperties[name] !== handler) return; //verify

    if (handler.revoked) {
      handler.revoked.call(this, this._definedComputedHandlers[name].ref);
    }

    var value = this[name];
    delete this[name];
    this[name] = value;
    delete this._definedProperties[name];
  }
});
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 (handler.defined) {
      handler.defined.call(this, 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 = ACore_$('span.absol-selectlist-item-text', this);
  this.$textValue = this.$text.childNodes[0];
  this.$descCtn = ACore_$('.absol-selectlist-item-desc-container', this);
  this.$desc = ACore_$('span.absol-selectlist-item-desc', this.$descCtn);
  this.$descValue = this.$desc.childNodes[0];
  this.$checkbox = ACore_$(CheckboxButton.tag, this).on('change', this.eventHandler.checkboxChange);
  this.$icon = null;
  this._icon = null;
  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,
  icon: js_SelectListItem.property.icon
};
CheckListItem.property.data = {
  set: function set(value) {
    this._data = value;
    var viewData = {
      text: '',
      desc: '',
      noSelect: false,
      extendStyle: null,
      extendClasses: null,
      icon: null
    };

    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.75 + '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.prototype.viewHandlers.noSelect = {
  set: function set(value) {
    if (value) this.addClass('as-no-select');else this.removeClass('as-no-select');
    return value;
  }
};
CheckListItem.prototype.viewHandlers.icon = {
  set: function set(icon) {
    this.icon = icon;
  },
  get: function get() {
    return this.icon;
  }
};
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);
}

function fillItemToPage($parent, $page, n) {
  while ($page.childNodes.length > n) {
    CheckListBox_releaseItem($page.lastChild);
    $page.removeChild($page.lastChild);
  }

  while ($page.childNodes.length < n) {
    $page.addChild(CheckListBox_requireItem($parent));
  }
}

var mTextMeasurement = null;
var measureArial14TextWidth = function measureArial14TextWidth(text) {
  if (!mTextMeasurement) {
    mTextMeasurement = new tool_TextMeasurement();
    mTextMeasurement.compute('14px arial');
  }

  return mTextMeasurement.measureTextWidth(text, '14px arial');
};
/***
 * @extends SelectListBox
 * @constructor
 */

function CheckListBox() {
  if (this.cancelWaiting) this.cancelWaiting();
  this._items = [];
  this._valueDict = {};
  this.itemHolders = [];
  this._holderDict = {};
  this._estimateWidth = 100;
  this.widthLimit = calcWidthLimit();
  this.addStyle('--as-width-limit', this.widthLimit + 'px');
  this.$scroller = ACore_$('.as-select-list-box-scroller', this);
  this.$content = ACore_$('.as-select-list-box-content', this);
  this.$pages = $$('.as-select-list-box-page', this);
  this.$searchInput = ACore_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify);
  this.pagingCtrl = new CLPagingController(this);
  this.searchMaster = new list_ListSearchMaster();

  this._initDomHook();

  this._initFooter();

  this.domSignal.on('viewListAtValue', this.viewListAtValue.bind(this));
  /***
   * @name selectedAll
   * @type {boolean}
   * @memberOf CheckListBox#
   */
}
CheckListBox.tag = 'CheckListBox'.toLowerCase();

CheckListBox.render = function () {
  return ACore_({
    tag: js_Follower.tag,
    extendEvent: ['change', 'cancel', 'close'],
    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(3).fill('.as-select-list-box-page')
      }]
    }, {
      "class": 'as-dropdown-box-footer',
      child: [{
        tag: 'checkbox',
        "class": 'as-select-list-box-check-all',
        props: {
          checked: false,
          text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All'
        }
      }, {
        "class": 'as-dropdown-box-footer-right',
        child: [{
          tag: 'a',
          "class": 'as-select-list-box-cancel-btn',
          attr: {
            'data-ml-key': 'txt_cancel'
          }
        }, {
          tag: 'a',
          "class": 'as-select-list-box-close-btn',
          attr: {
            'data-ml-key': 'txt_close'
          }
        }]
      }]
    }, 'attachhook.as-dom-signal'],
    props: {
      anchor: [1, 6, 2, 5]
    }
  });
};

Object.assign(CheckListBox.prototype, js_SelectListBox.prototype);
CheckListBox.property = {};
CheckListBox.eventHandler = {};
CheckListBox.prototype.footerMinWidth = 110;

CheckListBox.prototype._initDomHook = function () {
  var _this = this;

  this.domSignal = new HTML5_DelaySignal();
  this.domSignal.on('viewListAt', this.viewListAt.bind(this));
  this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this));
  this.domSignal.on('viewListAtCurrentScrollTop', this.viewListAtCurrentScrollTop.bind(this));
  this.domSignal.on('updateCheckedAll', function () {
    _this.$checkAll.checked = _this.selectedAll;
  });
};

CheckListBox.prototype._initFooter = function () {
  this.$checkAll = ACore_$('.as-select-list-box-check-all', this).on('change', this.eventHandler.checkAllChange);
  this.$cancelBtn = ACore_$('.as-select-list-box-cancel-btn', this).on('click', this.eventHandler.clickCancelBtn);
  this.$closeBtn = ACore_$('.as-select-list-box-close-btn', this);
  if (this.$closeBtn) //mobile ref
    this.$closeBtn.on('click', this.eventHandler.clickCloseBtn);
};

CheckListBox.prototype.viewListAtFirstSelected = noop;

CheckListBox.prototype.viewListAtValue = function (value) {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('viewListAtValue', value);
  }

  this.pagingCtrl.viewListAtValue(value);
};

CheckListBox.prototype.findItemsByValue = function (value) {
  return this._holderDict[keyStringOf(value)];
};

CheckListBox.prototype.notifyChange = function (data) {
  this.emit('change', Object.assign({
    target: this,
    type: 'change'
  }, data), this);
};

CheckListBox.prototype.focus = js_SelectListBox.prototype.focus;
CheckListBox.property.values = {
  set: function set(values) {
    values = values || [];
    var dict = values.reduce(function (ac, cr) {
      var key = keyStringOf(cr);
      ac[key] = cr;
      return ac;
    }, {});
    this._valueDict = dict;
    this.itemHolders.forEach(function visit(holder) {
      holder.selected = holder.valueKey in dict;
      if (holder.children) holder.children.forEach(visit);
    });
    this.pagingCtrl.updateSelected();
    this.domSignal.emit('updateCheckedAll');
  },
  get: function get() {
    return this.itemHolders.reduce(function visit(ac, holder) {
      if (holder.selected && !holder.data.noSelect) ac.push(holder.data.value);
      if (holder.children) holder.children.reduce(visit, ac);
      return ac;
    }, []);
  }
};

CheckListBox.prototype.resetSearchState = function () {
  this.$searchInput.value = '';
  this.pagingCtrl.viewArr(this.itemHolders);
};

CheckListBox.property.enableSearch = js_SelectListBox.property.enableSearch;
CheckListBox.property.items = {
  set: function set(items) {
    var _this2 = this;

    items = items || [];
    items = copySelectionItemArray(items, {
      removeNoView: true,
      removeNewLine: true
    });
    this._items = items;
    this.itemHolders = items.map(function (it) {
      return new CLHolder(_this2, it);
    });
    var res = this.itemHolders.reduce(function visit(ac, cr) {
      var textWidth = 3.5 * 14 + 1.75 * 14 * cr.level + 14 + measureArial14TextWidth(cr.data.text + '') + 7 + 17;
      if (cr.data.icon) textWidth += 32;
      ac.textWidth = Math.max(ac.textWidth, textWidth);

      if (cr.data.desc) {
        ac.descWidth = Math.max(ac.descWidth, measureArial14TextWidth(cr.data.desc + ''));
      }

      ac.dict[cr.valueKey] = ac.dict[cr.valueKey] || [];
      ac.dict[cr.valueKey].push({
        idx: ac.idx++,
        item: cr.data,
        holder: cr
      });
      if (cr.children) cr.children.reduce(visit, ac);
      return ac;
    }, {
      idx: 0,
      dict: {},
      textWidth: 50,
      descWidth: 0
    });
    this._holderDict = res.dict;
    this._estimateWidth = Math.min(this.widthLimit || Infinity, res.textWidth + (res.descWidth ? res.descWidth + 30 : 0));
    this.$scroller.scrollTop = 0;
    this.pagingCtrl.viewArr(this.itemHolders);
    this.searchMaster.transfer(this.itemHolders.map(function (it) {
      return it.getSearchItem();
    }));
    this.domSignal.emit('updateCheckedAll');
  },
  get: function get() {
    return copySelectionItemArray(this._items);
  }
};
CheckListBox.property.selectedAll = {
  get: function get() {
    return this.itemHolders.length > 0 && this.itemHolders.every(function visit(holder) {
      var res = holder.selected || holder.data.noSelect;

      if (res && holder.children) {
        res = holder.children.every(visit);
      }

      return res;
    });
  }
};
/***
 * @this CheckListBox
 * @param event
 */

CheckListBox.eventHandler.checkAllChange = function (event) {
  var _this3 = this;

  var checked = this.$checkAll.checked;
  var changed = false;

  var visit = function visit(holder) {
    var canCheck = checked && !holder.data.noSelect;

    if (holder.selected !== canCheck) {
      changed = true;
      holder.selected = canCheck;
    }

    if (canCheck) {
      _this3._valueDict[holder.valueKey] = holder.data.value;
    } else {
      delete _this3._valueDict[holder.valueKey];
    }

    if (holder.children) holder.children.forEach(visit);
  };

  this.itemHolders.forEach(visit);
  this.pagingCtrl.updateSelected();

  if (changed) {
    this.notifyChange({
      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 holder = itemElt.clHolder;
  holder.selected = selected;

  if (selected) {
    this._valueDict[holder.valueKey] = holder.data.value;
  } else {
    delete this._valueDict[holder.valueKey];
  }

  this.notifyChange({
    originalEvent: event.originalEvent || event.originEvent || event,
    action: selected ? 'check' : 'uncheck',
    value: holder.data.value,
    itemData: holder.data
  });
  this.domSignal.emit('updateCheckedAll');
};
/***
 * @this CheckListBox
 * @param event
 */


CheckListBox.eventHandler.clickCancelBtn = function (event) {
  this.emit('cancel', {
    type: 'cancel',
    target: this,
    originalEvent: event
  }, this);
};
/***
 * @this CheckListBox
 * @param event
 */


CheckListBox.eventHandler.clickCloseBtn = function (event) {
  this.emit('close', {
    type: 'close',
    target: this,
    originalEvent: event
  }, this);
};
/**
 * @this {CheckListBox}
 */


CheckListBox.eventHandler.searchModify = function () {
  var _this4 = this;

  var text = this.$searchInput.value;

  if (text) {
    this.searchMaster.query({
      text: text
    }).then(function (result) {
      if (text !== _this4.$searchInput.value) return;

      var arr = _this4.itemHolders.filter(function (it) {
        return !!result[it.id];
      });

      arr.sort(function (a, b) {
        return result[b.id][1] - result[a.id][1];
      });
      var searchHolders = arr.map(function (holder) {
        return new CLHolderRef(_this4, holder, null, result);
      });
      _this4.$scroller.scrollTop = 0;

      _this4.pagingCtrl.viewArr(searchHolders);

      HTML5_ResizeSystem.update();
    });
  } else {
    this.pagingCtrl.viewArr(this.itemHolders.reduce(function (ac, holder) {
      return holder.toArray(ac);
    }, []));
    HTML5_ResizeSystem.update();
  }
};

absol_acomp_ACore.install(CheckListBox);

function CLHolder(boxElt, data, parent) {
  var _this5 = this;

  this.id = randomIdent(8);
  this.parent = parent;
  this.level = parent ? parent.level + 1 : 0;
  this.boxElt = boxElt;
  this.data = data;
  this.valueKey = keyStringOf(data.value);
  this.itemElt = null;
  this.children = null;
  this.selected = this.valueKey in boxElt._valueDict;

  if (data.items && data.items.length > 0) {
    this.children = data.items.map(function (it) {
      return new CLHolder(boxElt, it, _this5);
    });
  }
}

CLHolder.prototype.toArray = function (ac) {
  ac = ac || [];
  ac.push(this);
  if (this.children) this.children.reduce(function (ac, holder) {
    return holder.toArray(ac);
  }, ac);
  return ac;
};

CLHolder.prototype.attachView = function (itemElt) {
  if (itemElt.clHolder) itemElt.clHolder.detachView();
  if (!this.textLength) this.textLength = utils_measureText(this.data.text + '', '14px arial').width;

  if (this.textLength > this.boxElt.widthLimit - (0.7 + 2.5) * 14) {
    itemElt.attr('title', this.data.text);
  }

  itemElt.clHolder = this;
  this.itemElt = itemElt;
  itemElt.data = this.data;
  itemElt.level = this.level;
  itemElt.selected = this.selected;
};

CLHolder.prototype.detachView = function () {
  if (this.itemElt) {
    this.itemElt.attr('title', null);
    this.itemElt.clHolder = null;
    this.itemElt = null;
  }
};

CLHolder.prototype.getSearchItem = function () {
  var res = {
    value: this.id
  };
  res.text = this.data.text + '';
  if (this.data.desc) res.text += '/' + this.data.desc;
  if (this.children) res.items = this.children.map(function (c) {
    return c.getSearchItem();
  });
  return res;
};

function CLHolderRef(boxElt, origin, parent, result) {
  var _this6 = this;

  this.boxElt = boxElt;
  this.origin = origin;
  this.data = origin.data;
  this.parent = parent;
  this.level = origin.level;
  HTML5_OOP.drillProperty(this, origin, 'selected');
  var arr, children;

  if (origin.children) {
    arr = origin.children.filter(function (it) {
      return !!result[it.id];
    });
    arr.sort(function (a, b) {
      return result[b.id][1] - result[a.id][1];
    });
    children = arr.map(function (holder) {
      return new CLHolderRef(boxElt, holder, _this6, result);
    });
    if (children.length > 0) this.children = children;
  }
}

HTML5_OOP.mixClass(CLHolderRef, CLHolder);
/***
 *
 * @param {CheckListBox} boxElt
 * @constructor
 */

function CLPagingController(boxElt) {
  this.boxElt = boxElt;
  this.$pages = boxElt.$pages;
  this.$content = boxElt.$content;
  this.$scroller = boxElt.$scroller.on('scroll', this.ev_scroll.bind(this));
  this.itemPerPage = Math.ceil(getScreenSize().height / this.itemHeight * 2);
  this.holderArr = [];
  this.holderDict = {};
}

CLPagingController.prototype.itemHeight = 30;

CLPagingController.prototype.ev_scroll = function (event) {
  var _this7 = this;

  if (this.pageN <= 2) return;
  var top = this.$scroller.scrollTop;
  var pageIdx = Math.min(this.pageN - 1, Math.max(0, Math.floor(top / this.itemHeight / this.itemPerPage)));
  if (pageIdx === this.pageIdx) return;

  if (pageIdx === this.pageIdx - 1) {
    this.pageIdx = pageIdx;
    this.$pages.unshift(this.$pages.pop());

    if (pageIdx > 0) {
      this.$pages[0].removeStyle('display').addStyle('top', (pageIdx - 1) * this.itemPerPage * this.itemHeight + 'px');
      fillItemToPage(this.boxElt, this.$pages[0], this.itemPerPage);
      Array.prototype.forEach.call(this.$pages[0].childNodes, function (elt, i) {
        return _this7.holderArr[(pageIdx - 1) * _this7.itemPerPage + i].attachView(elt);
      });
    } else {
      this.$pages[0].addStyle('display', 'none');
    }
  } else if (pageIdx === this.pageIdx + 1) {
    this.pageIdx = pageIdx;
    this.$pages.push(this.$pages.shift());

    if (pageIdx + 1 < this.pageN) {
      this.$pages[2].removeStyle('display').addStyle('top', (pageIdx + 1) * this.itemPerPage * this.itemHeight + 'px');
      fillItemToPage(this.boxElt, this.$pages[2], Math.min(this.itemPerPage, this.holderArr.length - this.itemPerPage * (pageIdx + 1)));
      Array.prototype.forEach.call(this.$pages[2].childNodes, function (elt, i) {
        return _this7.holderArr[(pageIdx + 1) * _this7.itemPerPage + i].attachView(elt);
      });
    } else {
      this.$pages[2].addStyle('display', 'none');
    }
  } else {
    this.update();
  }
};

CLPagingController.prototype.update = function () {
  var _this8 = this;

  var top = this.$content.scrollTop;
  var pageIdx = Math.floor(top / this.itemHeight / this.itemPerPage);
  this.pageIdx = pageIdx;
  var ii = (pageIdx - 1) * this.itemPerPage;
  var pageElt;
  var itemInPage;

  for (var pi = 0; pi < 3; ++pi) {
    pageElt = this.$pages[pi];

    if (ii < 0 || ii >= this.holderArr.length) {
      ii += this.itemPerPage;
      pageElt.addStyle('display', 'none');
    } else {
      itemInPage = Math.min(this.itemPerPage, this.holderArr.length - ii);
      fillItemToPage(this.boxElt, pageElt, itemInPage);
      pageElt.removeStyle('display').addStyle('top', this.itemHeight * ii + 'px');
      Array.prototype.forEach.call(pageElt.childNodes, function (child, i) {
        _this8.holderArr[ii].attachView(child);

        ii++;
      });
    }
  }
};

CLPagingController.prototype.viewListAtValue = function (value) {
  var idx = this.holderDict[keyStringOf(value)];
  if (idx === undefined) return;
  var bound = this.$scroller.getBoundingClientRect();
  var y = idx * this.itemHeight;
  var maxY = this.holderArr.length * this.itemHeight - bound.height;
  this.$scroller.scrollTop = Math.min(maxY, y);
};

CLPagingController.prototype.viewArr = function (itemHolders) {
  this.holderArr = itemHolders.reduce(function (ac, holder) {
    return holder.toArray(ac);
  }, []);
  this.holderDict = this.holderArr.reduce(function (ac, cr, idx) {
    ac[cr.valueKey] = idx;
    return ac;
  }, {});
  this.pageN = Math.ceil(this.holderArr.length / this.itemPerPage);
  this.$content.addStyle('height', this.holderArr.length * this.itemHeight + 'px');
  this.update();
};

CLPagingController.prototype.updateSelected = function () {
  this.$pages.forEach(function (pageElt) {
    Array.prototype.forEach.call(pageElt.childNodes, function (itemElt) {
      if (itemElt.clHolder) itemElt.selected = itemElt.clHolder.selected;
    });
  });
};
/**********************************************************************************************************************/

/***
 * @extends SelectListBox
 * @constructor
 */


function CheckListBoxV1() {
  this._initDomHook();

  this._initControl();

  this._initScroller();

  this._initFooter();

  this._initProperty();

  this.domSignal.on('viewListAtValue', this.viewListAtValue.bind(this));
}

CheckListBoxV1.tag = 'CheckListBox'.toLowerCase();

CheckListBoxV1.render = function () {
  return ACore_({
    tag: js_Follower.tag,
    extendEvent: ['change', 'cancel', 'close'],
    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-dropdown-box-footer',
      child: [{
        tag: 'checkbox',
        "class": 'as-select-list-box-check-all',
        props: {
          checked: false,
          text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All'
        }
      }, {
        "class": 'as-dropdown-box-footer-right',
        child: [{
          tag: 'a',
          "class": 'as-select-list-box-cancel-btn',
          attr: {
            'data-ml-key': 'txt_cancel'
          }
        }, {
          tag: 'a',
          "class": 'as-select-list-box-close-btn',
          attr: {
            'data-ml-key': 'txt_close'
          }
        }]
      }]
    }, 'attachhook.as-dom-signal'],
    props: {
      anchor: [1, 6, 2, 5]
    }
  });
};

Object.assign(CheckListBoxV1.prototype, js_SelectListBox.prototype);
CheckListBoxV1.property = Object.assign({}, js_SelectListBox.property);
CheckListBoxV1.eventHandler = Object.assign({}, js_SelectListBox.eventHandler);
CheckListBoxV1.prototype.itemHeightMode = [25, 30];
CheckListBoxV1.prototype.itemHeight = 25;
CheckListBoxV1.prototype.footerMinWidth = 110;

CheckListBoxV1.prototype._initFooter = function () {
  this.$checkAll = ACore_$('.as-select-list-box-check-all', this).on('change', this.eventHandler.checkAllChange);
  this.$cancelBtn = ACore_$('.as-select-list-box-cancel-btn', this).on('click', this.eventHandler.clickCancelBtn);
  this.$closeBtn = ACore_$('.as-select-list-box-close-btn', this);
  if (this.$closeBtn) //mobile ref
    this.$closeBtn.on('click', this.eventHandler.clickCloseBtn);
};

CheckListBoxV1.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);
  }
};

CheckListBoxV1.prototype.viewListAtFirstSelected = noop;

CheckListBoxV1.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 = ACore_$('.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;
};

CheckListBoxV1.prototype.focus = js_SelectListBox.prototype.focus;
CheckListBoxV1.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 CheckListBoxV1
 * @param event
 */

CheckListBoxV1.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 CheckListBoxV1
 * @param itemElt
 * @param event
 */


CheckListBoxV1.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 CheckListBoxV1
 * @param event
 */


CheckListBoxV1.eventHandler.clickCancelBtn = function (event) {
  this.emit('cancel', {
    type: 'cancel',
    target: this,
    originalEvent: event
  }, this);
};
/***
 * @this CheckListBoxV1
 * @param event
 */


CheckListBoxV1.eventHandler.clickCloseBtn = function (event) {
  this.emit('close', {
    type: 'close',
    target: this,
    originalEvent: event
  }, this);
};

absol_acomp_ACore.install(CheckListBoxV1);
/* harmony default export */ const js_CheckListBox = (CheckListBoxV1);
;// 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: CheckListBox,
    //use new version
    props: {
      anchor: [1, 6, 2, 5]
    },
    on: {
      preupdateposition: this.eventHandler.preUpdateListPosition,
      change: this.eventHandler.selectListBoxChange,
      cancel: this.eventHandler.selectListBoxCancel,
      close: this.eventHandler.selectListBoxClose
    }
  });
  this.addStyle('--as-width-limit', this.$selectlistBox.widthLimit + 'px');
  this.$itemCtn = ACore_$('.as-multi-select-menu-item-ctn', this);
  this.$attachhook = ACore_$('attachhook', this).on('attached', this.eventHandler.attached);
  this.$attachhook.requestUpdateSize = this.updateSize.bind(this);
  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.$selectlistBox.sponsorElement = 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.prototype.updateSize = function () {
  var bound;

  if (this._isFocus) {
    bound = this.getBoundingClientRect();
    this.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.$selectlistBox.getFontSize() * 15.5) + 'px');
    this.$selectlistBox.refollow();
    this.$selectlistBox.updatePosition();
  }
};

MultiCheckMenu.prototype.findItemsByValue = function (value) {
  return this.$selectlistBox.findItemsByValue(value);
};

MultiCheckMenu.eventHandler.click = function (event) {
  if (this.disabled) return;

  if ((event.target === this || event.target === this.$itemCtn) && !this.isFocus && !this.readOnly) {
    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); //to notify something remove, add

    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.$selectlistBox.values;
      break;

    case 'uncheck_all':
      this._tempValues = [];
      break;
  }

  setTimeout(function () {
    this.viewItemsByValues(this._tempValues);
    var bound = this.getBoundingClientRect();
    this.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.$selectlistBox.getFontSize() * 15.5) + 'px');
    this.$selectlistBox.refollow();
    this.$selectlistBox.updatePosition();
    HTML5_ResizeSystem.requestUpdateSignal();
  }.bind(this), 1);
};

MultiCheckMenu.eventHandler.selectListBoxCancel = function (event) {
  this.viewItemsByValues(this._values);
  this.isFocus = false;
  this.$selectlistBox.values = this._values;
};

MultiCheckMenu.eventHandler.selectListBoxClose = function (event) {
  this.eventHandler.selectListBoxPressItem(event); //to notify something remove, add

  this.isFocus = false;
};

MultiCheckMenu.property.isFocus = {
  set: function set(value) {
    if (value && (this.disabled || this.readOnly)) return;

    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);
      this.$selectlistBox.addTo(document.body);
      var bound = this.getBoundingClientRect();
      this.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.$selectlistBox.getFontSize() * 15.5) + 'px');
      this.$selectlistBox.refollow();
      this.$selectlistBox.updatePosition();
      setTimeout(function () {
        thisSM.$selectlistBox.focus();
        document.addEventListener('mousedown', thisSM.eventHandler.bodyClick);
      }, 100);
      this.$selectlistBox.viewListAtFirstSelected();
    } else {
      document.removeEventListener('mousedown', thisSM.eventHandler.bodyClick);
      document.addEventListener('mouseup', function mup() {
        setTimeout(function () {
          thisSM.on('click', thisSM.eventHandler.click);
          document.removeEventListener('mouseup', mup);
        }, 5);
      });
      this.$selectlistBox.selfRemove();
      this.$selectlistBox.unfollow();
      this.$selectlistBox.resetSearchState();
    }
  },
  get: js_MultiSelectMenu.property.isFocus.get
};
MultiCheckMenu.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
/***
 * 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);
    HTML5_ResizeSystem.requestUpdateSignal();
  } 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.$attachook = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$attachook);
  this.$clockBtn = ACore_$('.as-time-input-icon-btn', this);
  this.$text = ACore_$('.as-time-input-text', this);
  this.$clearBtn = ACore_$('button.as-time-input-clear-btn', this).on('click', this.clear.bind(this));
  this._hour = 0;
  this._minute = 0;
  this._dayOffset = 0;
  this._format = 'HH:mm';
  this._firedValue = 'NOT_FIRED';
  this.textCtrl = new T24ITextController(this);
  this.notNull = true;
  this.dropdownCtn = new T24DropdownController(this);
  /**
   * @type {string}
   * @name format
   * @memberof Time24Input#
   */

  /**
   * @type {number|null}
   * @name hour
   * @memberof Time24Input#
   */

  /**
   * @type {number|null}
   * @name minute
   * @memberof Time24Input#
   */

  /**
   * @type {number} always is a number, set dayOffset, keep value
   * @name dayOffset
   * @memberof Time24Input#
   */

  /**
   * computed from other
   * @type {number|null}
   * @name value
   * @memberof Time24Input#
   */
}

Time24Input.tag = 'Time24Input'.toLowerCase();
Time24Input.prototype.nextDateText = ' (Hôm sau)';

Time24Input.render = function () {
  return ACore_({
    "class": ['ac-time-input', 'as-time-24-input'],
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      "class": 'as-time-input-text',
      attr: {
        type: 'text',
        spellcheck: "false"
      }
    }, {
      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._notifyChange = function (event) {
  this._firedValue = this.value;
  this.emit('change', {
    type: 'change',
    originalEvent: event && (event.originalEvent || event.originEvent) || event
  }, this);
};

Time24Input.prototype.notifyIfChange = function () {
  if (this._firedValue !== this.value) {
    this._notifyChange();
  }
};

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,
  $closeBtn: null
};
Time24Input.property = {};
Time24Input.property.hour = {
  set: function set(value) {
    if (isRealNumber(value)) {
      value = Math.round(value);

      if (value < 0) {
        value = Math.ceil(-value / 24) * 24 + value;
      }

      value = value % 24;
    } else {
      value = null;
    }

    this._hour = value;
    this.textCtrl.updateTextFromValue();
  },
  get: function get() {
    return this._hour;
  }
};
Time24Input.property.minute = {
  set: function set(value) {
    if (isRealNumber(value)) {
      value = Math.round(value);

      if (value < 0) {
        value = Math.ceil(-value / 60) * 60 + value;
      }

      value = value % 60;
    } else {
      value = null;
    }

    this._minute = value;
    this.textCtrl.updateTextFromValue();
  },
  get: function get() {
    return this._minute;
  }
};
Time24Input.property.dayOffset = {
  set: function set(dayOffset) {
    var value = this.value;
    this._dayOffset = isRealNumber(dayOffset) ? normalizeMinuteOfMillis(dayOffset) : 0;
    this.value = value;
  },
  get: function get() {
    if (this.notNull) {
      return this._dayOffset || 0;
    } else {
      return this._dayOffset;
    }
  }
};
Time24Input.property.value = {
  set: function set(value) {
    value = isRealNumber(value) ? normalizeMinuteOfMillis(Math.min(Math.max(value, 0), MILLIS_PER_DAY)) : null;
    var clockTime;

    if (value !== null) {
      clockTime = millisToClock(value + this.dayOffset);
      this._hour = clockTime.hour;
      this._minute = clockTime.minute;
    } else {
      this._hour = null;
      this._minute = null;
    }

    this.textCtrl.updateTextFromValue();
    this._firedValue = this.value;
  },
  get: function get() {
    if (!isRealNumber(this._hour) || !isRealNumber(this._minute)) return null;
    var mil = clockToMillis(this._hour, this._minute);
    if (mil < this.dayOffset) mil += MILLIS_PER_DAY;
    mil -= this.dayOffset;
    return mil;
  }
};
Time24Input.property.displayTime = {
  get: function get() {
    var value = this.value;

    if (isRealNumber(value)) {
      return 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');
    }

    this._firedValue = this.value;
  },
  get: function get() {
    return this.hasClass('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.readOnly = js_TimeInput.property.readOnly;
Time24Input.property.format = {
  set: function set(value) {
    this._format = value || 'HH:mm';
    this.textCtrl.updateTextFromValue();
  },
  get: function get() {
    return this._format;
  }
};
Time24Input.eventHandler = {};

Time24Input.eventHandler.pickerChange = function (event) {
  if (this.dayOffset === null) this.dayOffset = 0;
};

Time24Input.eventHandler.clickClockBtn = function () {
  this._attachPicker();
};

absol_acomp_ACore.install(Time24Input);
/* harmony default export */ const js_Time24Input = (Time24Input);
/**
 *
 * @param {Time24Input} elt
 * @constructor
 */

function T24DropdownController(elt) {
  this.elt = elt;
  this.$clockBtn = elt.$clockBtn.on('click', this.ev_clickClockBtn.bind(this));
  this.disabledButtton = false;
  this.ev_clickOut = this.ev_clickOut.bind(this);
}

T24DropdownController.prototype.share = {
  $picker: null,
  $holdingInput: null,
  $follower: null,

  /**
   * @type {T24DropdownController|null}
   */
  holder: null
};

T24DropdownController.prototype.prepare = function () {
  var share = this.share;
  if (share.$picker) return;
  share.$picker = ACore_({
    tag: js_ChromeTime24Picker.tag,
    on: {
      change: function change(event) {
        if (share.holder) {
          share.holder.onPickerChange(event);
        }
      }
    }
  });
  share.$follower = ACore_({
    tag: 'follower',
    "class": ['as-chrome-time-24-picker-follower', 'as-dropdown-box-common-style'],
    child: [this.share.$picker, {
      "class": 'as-dropdown-box-footer',
      child: [{
        "class": 'as-dropdown-box-footer-right',
        child: ['<a data-ml-key="txt_close" class="as-select-list-box-close-btn"></a>']
      }]
    }]
  });
  this.share.$closeBtn = ACore_$('.as-select-list-box-close-btn', this.share.$follower);
};

T24DropdownController.prototype.attach = function () {
  var _this = this;

  this.prepare();
  var share = this.share;

  if (share.holder) {
    share.holder.release();
  }

  share.holder = this;
  this.disabledButtton = true;
  share.$follower.addTo(document.body);
  share.$follower.followTarget = this.elt;
  share.$follower.addStyle('visibility', 'hidden');
  var hour = this.elt.hour;
  var min = this.elt.minute;
  var dayOffset = this.elt.dayOffset;
  share.$picker.dayOffset = dayOffset;
  var offsetClock = millisToClock(dayOffset);
  var value = 0;

  if (isRealNumber(hour)) {
    if (!isRealNumber(min)) {
      if (hour === offsetClock.hour) {
        min = offsetClock.hour;
      } else {
        min = 0;
      }
    }

    value = clockToMillis(hour, min) - dayOffset;
    if (value < 0) value += MILLIS_PER_DAY;
  } else if (isRealNumber(min)) {
    if (min >= offsetClock.minute) {
      hour = offsetClock.hour;
    } else {
      hour = (offsetClock.hour + 1) % 24;
    }

    value = clockToMillis(hour, min) - dayOffset;
    if (value < 0) value += MILLIS_PER_DAY;
  }

  share.$picker.value = value;
  setTimeout(function () {
    document.addEventListener('click', _this.ev_clickOut);
    share.$follower.removeStyle('visibility');
  }, 10);
};

T24DropdownController.prototype.release = function () {
  var _this2 = this;

  var share = this.share;
  if (share.holder !== this) return;
  share.$follower.remove();
  share.$follower.followTarget = null;
  share.holder = null;
  setTimeout(function () {
    _this2.disabledButtton = false;
    document.removeEventListener('click', _this2.ev_clickOut);
  }, 100);
};

T24DropdownController.prototype.onPickerChange = function (event) {
  this.elt.value = this.share.$picker.value;

  this.elt._notifyChange(event);

  HTML5_ResizeSystem.requestUpdateSignal();
};

T24DropdownController.prototype.ev_clickClockBtn = function () {
  if (this.disabledButtton) return;
  this.attach();
};

T24DropdownController.prototype.ev_clickOut = function (event) {
  if (hitElement(this.share.$follower, event) && !hitElement(this.share.$closeBtn, event)) return;
  this.release();
};

var Time24Input_STATE_NEW = 1;
var Time24Input_STATE_EDITED = 2;
var Time24Input_STATE_NONE = 0;
/**
 *
 * @param {Time24Input} elt
 * @constructor
 */

function T24ITextController(elt) {
  var _this3 = this;

  this.elt = elt;
  this.domSignal = elt.domSignal;
  this.$text = this.elt.$text;
  this.$text.on('keydown', this.ev_keydown.bind(this)).on('pointerup', this.autoSelect.bind(this)).on('blur', function () {
    _this3.loadValueFromInput();

    _this3.elt.notifyIfChange();
  });
  this.editingData = {};
}

T24ITextController.prototype.tokenRegex = /(\([^)]*\))|([^.\/:\-,\\\s]+)|([.\/:\-,\\]+)/i;
T24ITextController.prototype.tokenMap = {
  h: 'h',
  H: 'H',
  HH: 'H',
  hh: 'h',
  m: 'm',
  mm: 'm',
  a: 'a'
};

T24ITextController.prototype.makeTokenDict = function (s) {
  var rgx = new RegExp(this.tokenRegex.source, 'g');
  var rgxFormat = new RegExp(this.tokenRegex.source, 'g');
  var format = this.elt.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[2];
    ident = formatToken[2];

    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);
  }

  Object.defineProperty(res, 'minute', {
    enumerable: false,
    get: function get() {
      var token = this['m'] || this['mm'];

      if (token) {
        return token.value;
      } else return null;
    }
  });
  Object.defineProperty(res, 'hour24', {
    enumerable: false,
    get: function get() {
      var token = this['H'];

      if (token && isNaturalNumber(token.value)) {
        return token.value;
      }

      token = this['h'];
      var tokenA = this['A'];

      if (token && isNaturalNumber(token.value)) {
        if (tokenA.value === 'PM') {
          return 12 + token.value % 12;
        } else return token.value % 12;
      }

      return null;
    }
  });
  return res;
};

T24ITextController.prototype.formatText = function (h, m) {
  var text = this.elt.format;
  text = text.replace(new RegExp(this.tokenRegex.source, 'g'), function (all) {
    switch (all) {
      case 'm':
      case 'mm':
        return isRealNumber(m) ? zeroPadding(m, all.length) : all;

      case 'hh':
      case 'h':
        return isRealNumber(h) ? zeroPadding(h % 12 ? h : 12, all.length) : all;

      case 'HH':
      case 'H':
        return isRealNumber(h) ? zeroPadding(h, all.length) : all;

      case 'a':
        return isRealNumber(h) ? h > 12 ? 'PM' : 'AM' : 'all';

      default:
        return all;
    }
  });
  return text;
};

T24ITextController.prototype.updateTextFromValue = function () {
  var value = this.elt.value;
  var hour = this.elt.hour;
  var minute = this.elt.minute;
  console.log(this.elt._hour, this.elt._minute, value);
  var isNextDate = this.isNextDate(hour, minute);
  var text = this.formatText(hour, minute);

  if (isNextDate) {
    text += this.elt.nextDateText;
  }

  if (isRealNumber(value)) {
    this.elt.removeClass('as-value-null');
  } else {
    this.elt.addClass('as-value-null');
  }

  this.$text.value = text;
};

T24ITextController.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));
  }

  var end = hour * 36e5 + minute * 6e4;
  this.elt._value = end >= this.elt.dayOffset ? end - this.elt.dayOffset : end + MILLIS_PER_DAY - this.elt.dayOffset;
  if (!isNaturalNumber(this.elt._value)) this.elt._value = null;
};

T24ITextController.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 = Time24Input_STATE_NEW;
    } else {
      this.$text.select();
      this.editingData.state = Time24Input_STATE_NONE;
    }
  }
};

T24ITextController.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 = Time24Input_STATE_NEW;
      break;
    }
  }
};

T24ITextController.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 = Time24Input_STATE_NEW;
      break;
    }
  }
};

T24ITextController.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.elt.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[2];
    ident = formatToken[2];

    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[2];
    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[2];
    ident = formatToken[2];
    idx = tokenMatched.index;
    return {
      idx: idx,
      text: text,
      length: text.length,
      ident: ident,
      elt: this.$text,
      sourceText: s,
      replace: function replace(newText, selecting, forceInText) {
        forceInText = forceInText || this.sourceText;
        var left = forceInText.substr(0, this.idx);
        var right = forceInText.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;
};

T24ITextController.prototype.isNextDate = function (h, m) {
  var dayOffset = this.elt.dayOffset;
  if (!isNaturalNumber(dayOffset)) return false;
  var oH = Math.floor(dayOffset / 36e5);
  var oM = Math.floor(dayOffset / 6e4) % 60;
  if (!isNaturalNumber(h)) return false;
  if (h < oH) return true;
  if (!isNaturalNumber(m)) return false;
  return h === oH && m < oM;
};

T24ITextController.prototype.putNextDateTextInto = function (text, flag) {
  var ndTxt = this.elt.nextDateText;

  if (text.endsWith(ndTxt)) {
    if (!flag) text = text.substring(0, text.length - ndTxt.length);
  } else if (flag) {
    text += ndTxt;
  }

  return text;
};

T24ITextController.prototype.correctingInput = function () {//nothing todo now
};

T24ITextController.prototype.ev_keydown = function (event) {
  var token = this.tokenAt(this.$text.selectionStart);
  var endToken = this.tokenAt(this.$text.selectionEnd);
  var tokenDict = this.makeTokenDict(this.$text.value);
  var format = this.elt.format;

  if (!token) {
    if (event.key === 'Enter') {
      this.correctingInput();
      this.loadValueFromInput();
      this.elt.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, this.putNextDateTextInto(token.sourceText, this.isNextDate(this.editingData.H, tokenDict.minute)));
            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, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.a && tokenDict.a.value === 'PM' ? 0 : 24) + this.editingData.h % 12, tokenDict.minute)));
            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, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, this.editingData.m)));
            break;

          case 'a':
            value = token.text;
            this.editingData.a = value === 'PM' ? "AM" : "PM";
            newTokenText = this.editingData.a;
            token.replace(newTokenText, true, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, tokenDict.minute)));
            break;
        }

        break;
    }
  } else if (event.key === "Delete" || event.key === 'Backspace') {
    event.preventDefault();

    if (endToken.idx !== token.idx) {
      if (this.elt.notNull) {
        this.$text.value = formatDateTime(beginOfDay(new Date()), format);
      } else {
        this.$text.value = format;
      }

      this.$text.select();
    } else {
      if (this.elt.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.elt.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 = 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 === Time24Input_STATE_NEW) {
      switch (token.ident) {
        case 'm':
        case 'mm':
          token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, dVal)));
          this.editingData.state = Time24Input_STATE_EDITED;

          if (dVal > 5) {
            this.editNextToken();
          }

          break;

        case 'h':
        case 'hh':
          token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.a && tokenDict.a.value === 'PM' ? 0 : 24) + dVal % 12, tokenDict.minute)));
          this.editingData.state = Time24Input_STATE_EDITED;

          if (dVal > 1) {
            this.editNextToken();
          }

          break;

        case 'H':
        case 'HH':
          token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate(dVal, tokenDict.minute)));
          this.editingData.state = Time24Input_STATE_EDITED;

          if (dVal > 2) {
            this.editNextToken();
          }

          break;
      }
    } else {
      switch (token.ident) {
        case 'm':
        case 'mm':
          dVal = (parseInt(token.text.split('').pop(), 10) || 0) * 10 + dVal;
          dVal = Math.max(0, Math.min(59, dVal));
          this.editingData.m = dVal;
          token.replace(zeroPadding(dVal, token.ident.length), true, this.putNextDateTextInto(token.sourceText, this.isNextDate(tokenDict.hour24, dVal)));
          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.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.a && tokenDict.a.value === 'PM' ? 0 : 24) + dVal % 12, tokenDict.minute)));
          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.putNextDateTextInto(token.sourceText, this.isNextDate(dVal, tokenDict.minute)));
          this.editNextToken();
          break;
      }
    }
  } else if (event.key.match(/^[aApPSCsc]$/) && token.ident === 'a') {
    event.preventDefault();

    if (event.key.match(/^[aAsS]$/)) {
      token.replace('AM', true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.h && tokenDict.h.value) % 12, tokenDict.minute)));
      this.editingData.a = "AM";
    } else {
      token.replace('PM', true, this.putNextDateTextInto(token.sourceText, this.isNextDate((tokenDict.h && tokenDict.h.value) % 12 + 12, tokenDict.minute)));
      this.editingData.a = "PM";
    }

    this.editNextToken();
  } else {
    event.preventDefault();
  }
};
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timerange24input.css
var timerange24input = __webpack_require__(1554);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeRange24Input.js
function TimeRange24Input_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { TimeRange24Input_typeof = function _typeof(obj) { return typeof obj; }; } else { TimeRange24Input_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return TimeRange24Input_typeof(obj); }







/***
 * @extends AElement
 * @constructor
 */

function TimeRange24Input() {
  /***
   *
   * @type {TimeInput}
   */
  this.$offset = ACore_$(js_TimeInput.tag, this);
  this.$offset.on('change', this.eventHandler.offsetChange);
  /***
   *
   * @type {Time24Input}
   */

  this.$duration = ACore_$(js_Time24Input.tag, this);
  this.$duration.on('change', this.eventHandler.durationChange);
  /***
   * @type {number}
   * @name dayOffset
   * @memberOf TimeRange24Input#
   */

  /***
   * @type {number}
   * @name duration
   * @memberOf TimeRange24Input#
   */

  /***
   * @type {string}
   * @name format
   * @memberOf TimeRange24Input#
   */
}

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.prototype._updateTextData = function () {
  var dayOffset = this.dayOffset;
  var duration = this.duration;
  var format = this.format;
  var bD = beginOfDay(new Date()).getTime();
  var text = formatDateTime(new Date(bD + dayOffset), format || 'HH:mm');
  text += ' - ' + formatDateTime(new Date(bD + dayOffset + duration), format || 'HH:mm');
  this.attr('data-text', text);
};

TimeRange24Input.property = {};
TimeRange24Input.property.notNull = {
  /***
   * @this TimeRange24Input
   * @param value
   */
  set: function set(value) {
    value = !!value;
    this.$offset.notNull = value;
    this.$duration.notNull = value;

    this._updateTextData();
  },
  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.hasClass('as-disabled');
  }
};
TimeRange24Input.property.dayOffset = {
  set: function set(value) {
    var notNull = this.notNull;

    if (isRealNumber(value)) {
      value = normalizeMinuteOfMillis(value);
    } else {
      value = notNull ? 0 : null;
    }

    this.$offset.dayOffset = value;
    this.$duration.dayOffset = value;

    this._updateTextData();
  },
  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;

    this._updateTextData();
  },
  get: function get() {
    return this.$duration.value;
  }
};
TimeRange24Input.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
      this.$offset.readOnly = true;
      this.$duration.readOnly = true;
    } else {
      this.removeClass('as-read-only');
      this.$offset.readOnly = false;
      this.$duration.readOnly = false;
    }
  },
  get: function get() {
    return this.containsClass('as-read-only');
  }
};
TimeRange24Input.property.value = {
  set: function set(value) {
    var rangeValue = null;
    if (isRealNumber(value)) rangeValue = {
      dayOffset: value,
      duration: 0
    };else if (!value) {} else if (TimeRange24Input_typeof(rangeValue) === "object") {
      if (isRealNumber(value.dayOffset)) {
        rangeValue = {
          dayOffset: value.dayOffset,
          duration: 0
        };
      } else {
        rangeValue = {
          dayOffset: 0,
          duration: 0
        };
      }

      if (isRealNumber(value.duration)) {
        rangeValue.duration = value.duration;
      }
    }

    if (rangeValue) {
      this.dayOffset = rangeValue.dayOffset;
      this.duration = rangeValue.duration;
    } else {
      this.dayOffset = null;
      this.duration = null;
    }

    return rangeValue;
  },
  get: function get() {
    if (!isRealNumber(this.dayOffset) && !isRealNumber(this.duration)) return null;
    return {
      dayOffset: this.dayOffset || 0,
      duration: this.duration || 0
    };
  }
};
TimeRange24Input.eventHandler = {};

TimeRange24Input.eventHandler.offsetChange = function (event) {
  var prevOffset = this.$duration.dayOffset;
  var preDuration = this.$duration.value;
  var prevEnd = prevOffset + preDuration;
  var newEnd;
  var newStart = this.$offset.dayOffset;

  if (isRealNumber(newStart)) {
    if (isRealNumber(prevEnd)) {
      newEnd = Math.max(newStart, Math.min(newStart + MILLIS_PER_DAY - MILLIS_PER_MINUTE, prevEnd));
    } else {
      newEnd = newStart;
    }

    this.$duration.dayOffset = newStart;
    this.$duration.value = newEnd - newStart;
  } else {
    this.$duration.dayOffset = 0;
    this.$duration.value = isRealNumber(prevEnd) ? Math.min(prevEnd, MILLIS_PER_DAY - MILLIS_PER_MINUTE) : null;
  }

  this._updateTextData();

  this.emit('change', {
    type: 'change',
    property: 'dayOffset',
    originalEvent: event.originalEvent || event.originEvent || event
  });
};

TimeRange24Input.eventHandler.durationChange = function (event) {
  if (!isRealNumber(this.$offset.dayOffset)) {
    this.$offset.dayOffset = this.$duration.dayOffset;
  }

  this._updateTextData();

  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/CheckTreeItem.js





/***
 * @extends ExpNode
 * @constructor
 */

function CheckTreeItem() {
  this._itemData = null;
  this.$name = ACore_$('span.absol-exp-node-name', this);
  this.$desc = ACore_$('span.absol-exp-node-desc', this);
  this.$iconCtn = ACore_$('div.absol-exp-node-ext-icon', this);
  this.$level = ACore_$('.absol-exp-node-level', this);
  this.$checkbox = ACore_$('checkboxbutton', this).on('change', this.eventHandler.checkboxChange);
  this.$toggleIcon = ACore_$('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;
    this.attr('title', itemData.value + '');
    var desc = getDescriptionOfListItem(itemData);
    this.desc = desc;

    if (itemData && itemData.icon) {
      this.icon = itemData.icon;
    } else {
      this.icon = null;
    }

    this.noSelect = itemData.noSelect;
  },
  get: function get() {
    return this._itemData;
  }
};
CheckTreeItem.property.selected = {
  set: function set(value) {
    this._selected = value;
    this.$checkbox.disabled = value === 'empty';

    if (value === 'all') {
      this.$checkbox.minus = false;
      this.$checkbox.checked = true;
    } else if (value === 'child') {
      this.$checkbox.checked = false;
      this.$checkbox.minus = true;
    } else if (value === 'empty') {
      this.$checkbox.minus = false;
      this.$checkbox.checked = false;
    } else {
      this.$checkbox.minus = false;
      this.$checkbox.checked = false;
    }
  },
  get: function get() {
    if (this.$checkbox.disabled) return 'empty';
    if (this.$checkbox.checked) return 'all';else if (this.$checkbox.minus) return 'child';
    return 'none';
  }
};
CheckTreeItem.property.noSelect = {
  set: function set(value) {
    if (value) {
      this.addClass('as-no-select');
    } else {
      this.removeClass('as-no-select');
    }
  },
  get: function get() {
    return this.hasClass('as-no-select');
  }
};
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.noSelect) {
      this.emit('presstoggle', {
        type: 'presstoggle',
        target: this,
        originalEvent: event
      }, this);
    } else if (!hitElement(this.$checkbox, event) && !this.$checkbox.disabled) {
      this.$checkbox.checked = !this.$checkbox.checked;
      this.eventHandler.checkboxChange(event);
    }
  } else {
    if (!hitElement(this.$checkbox, event) && !this.noSelect && !this.$checkbox.disabled) {
      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);
;// CONCATENATED MODULE: ./node_modules/absol/src/DataStructure/Array.js
function Array_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Array_typeof = function _typeof(obj) { return typeof obj; }; } else { Array_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Array_typeof(obj); }

/***
 *
 * @param {(string|number|boolean|null)[]} arr
 * @returns {(string|number|boolean|null)[]}
 */
function arrayUnique(arr) {
  var dict = {};
  return arr.reduce(function (ac, cr) {
    var key = Array_typeof(cr) + '//' + cr;
    if (key in dict) return ac;
    ac.push(cr);
    dict[key] = true;
    return ac;
  }, []);
}
/***
 *
 * @param {[]}arr
 * @return {[]}
 */

function arrayRemoveNone(arr) {
  return arr.filter(function (c) {
    return c !== null && c !== undefined;
  });
}
function arrayIntersection(a1, a2) {
  var dict1 = a1.reduce(function (ac, cr) {
    ac[Array_typeof(cr) + cr] = true;
    return ac;
  }, {});
  var dict2 = a2.reduce(function (ac, cr) {
    ac[Array_typeof(cr) + cr] = true;
    return ac;
  }, {});
  var dictAdded = {};
  var res = [];
  var i, k, x;

  for (i = 0; i < a1.length; ++i) {
    x = a1[i];
    k = Array_typeof(x) + x;

    if (dict1[k] && dict2[k] && !dictAdded[k]) {
      res.push(x);
      dictAdded[k] = true;
    }
  }

  for (i = 0; i < a2.length; ++i) {
    x = a2[i];
    k = Array_typeof(x) + x;

    if (dict1[k] && dict2[k] && !dictAdded[k]) {
      res.push(x);
      dictAdded[k] = true;
    }
  }

  return res;
}
function arrayIsSubset(childArr, parentArr) {
  if (!(childArr instanceof Array) || !(parentArr instanceof Array)) return false;
  var dict2 = parentArr.reduce(function (ac, cr) {
    ac[Array_typeof(cr) + cr] = true;
    return ac;
  }, {});
  var res = true;
  var n = childArr.length;
  var k;

  for (var i = 0; i < n; ++i) {
    k = Array_typeof(childArr[i]) + childArr[i];

    if (!dict2[k]) {
      res = false;
      break;
    }
  }

  return res;
}
/***
 *
 * @param {[]}a1
 * @param {[]}a2
 * @param {boolean=} order
 * @returns {boolean}
 */

function arrayCompare(a1, a2, order) {
  if (a1 === a2) return true;
  if (!a1 || !a2) return false;
  if (a1.length !== a2.length) return false;
  if (!a1.sort || !a2.sort) return false;

  if (!order) {
    a1.sort();
    a2.sort();
  }

  var n = a1.length;

  for (var i = 0; i < n; ++i) {
    if (a1[i] !== a2[i]) return false;
  }

  return true;
}
/***
 *
 * @param {Array} arr
 */

function arrayShuffle(arr) {
  var temp;
  var j;

  for (var i = 0; i < arr.length; ++i) {
    j = Math.floor(Math.random() * arr.length);

    if (i !== j) {
      temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
    }
  }
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeBox.js
















/***
 * @extends Follower
 * @constructor
 */

function CheckTreeBox() {
  if (this.cancelWaiting) this.cancelWaiting();
  this.listCtrl = new CTBItemListController(this);
  HTML5_OOP.drillProperty(this, this.listCtrl, ['viewHolders', '$checkAll', 'estimateSize']);
  this.dropdownCtrl = new CTBDropdownController(this);
  this.actionCtrl = new CTBActionController(this);
  this.searchCtrl = new CTBSearchController(this);
  HTML5_OOP.drillProperty(this, this.searchCtrl, ['$searchInput']);

  this._initDomHook();

  this._initProperty();

  if (!this.updatePosition) {
    this.updatePosition = noop;
  }
  /**
   * @name mobile
   * @type {boolean}
   * @memberof  CheckTreeBox#
   */

  /***
   * @name strictValue
   * @memberof CheckTreeBox#
   * @type {boolean}
   */

  /**
   * @name values
   * @memberof CheckTreeBox#
   * @type {Array}
   */

  /**
   * @name viewValues
   * @memberof CheckTreeBox#
   * @type {Array}
   */

}

CheckTreeBox.tag = 'CheckTreeBox'.toLowerCase();
CheckTreeBox.prototype.preLoadN = 3;
CheckTreeBox.prototype.itemHeight = 28;
CheckTreeBox.prototype.itemInPage = 36;

CheckTreeBox.prototype._initDomHook = function () {};

CheckTreeBox.prototype._initProperty = function () {
  this.scale14 = ACore_$(document.body).getFontSize() / 14;
  this.initOpened = 0;
  this.enableSearch = true;
};

CheckTreeBox.prototype.focus = js_SelectListBox.prototype.focus;

CheckTreeBox.prototype.addStyle = function (name, value) {
  var ms;

  if (name === 'minWidth' || name === 'min-width') {
    ms = parseMeasureValue(value);

    if (ms.unit === 'px') {
      value = Math.max(240, ms.value) + 'px';
    }

    return HTML5_AElement.prototype.addStyle.call(this, name, value);
  }

  return HTML5_AElement.prototype.addStyle.apply(this, arguments);
};

CheckTreeBox.render = function () {
  var mobile = arguments[1] && arguments[1].forceMobile || Detector_BrowserDetector.isMobile;
  var footer = {
    "class": 'as-dropdown-box-footer',
    child: [{
      tag: 'checkbox',
      "class": 'as-select-list-box-check-all',
      props: {
        checked: false,
        text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All'
      }
    }, {
      "class": 'as-dropdown-box-footer-right',
      child: [{
        tag: 'a',
        "class": 'as-select-list-box-cancel-btn',
        attr: {
          "data-ml-key": 'txt_cancel'
        }
      }].concat(mobile ? [] : [{
        tag: 'a',
        "class": 'as-select-list-box-close-btn',
        attr: {
          "data-ml-key": 'txt_close'
        }
      }])
    }]
  };
  var content = {
    "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')
    }
  };

  if (mobile) {
    return ACore_({
      props: {
        mobile: true
      },
      extendEvent: ['change', 'close', 'toggleitem', 'cancel'],
      "class": ['am-check-tree-box-modal', 'am-modal', 'am-dropdown-box-modal'],
      child: {
        "class": ['am-check-tree-box', 'am-dropdown-box', 'as-dropdown-box-common-style'],
        child: [{
          "class": 'am-dropdown-box-header',
          child: [{
            tag: Searcher.tag
          }, {
            tag: 'button',
            "class": 'am-dropdown-box-close-btn',
            child: 'span.mdi.mdi-close'
          }]
        }, content, footer]
      }
    });
  }

  return ACore_({
    tag: 'follower',
    extendEvent: ['change', 'toggleitem', 'cancel', 'close'],
    "class": ['as-check-tree-box', 'as-select-list-box', 'as-anchor-1'],
    child: [{
      "class": 'as-select-list-box-search-ctn',
      child: 'searchtextinput'
    }, content, footer],
    props: {
      anchor: [1, 6, 2, 5],
      mobile: false
    }
  });
};

CheckTreeBox.prototype.HolderClass = TreeNodeHolder;

CheckTreeBox.prototype.findItemHoldersByValue = function (value) {
  return this.listCtrl.findItemHoldersByValue(value);
};

CheckTreeBox.prototype.viewListAt = function (offset) {
  this.listCtrl.viewListAt(offset);
};

CheckTreeBox.prototype.noTransition = function () {
  if (this.hasClass('as-no-transition')) return;
  this.addClass('as-no-transition');
  setTimeout(function () {
    this.removeClass('as-no-transition');
  }.bind(this), 100);
};

CheckTreeBox.prototype.resetSearchState = function () {
  this.listCtrl.resetView();
};

CheckTreeBox.prototype.updateContentSize = function () {
  this.listCtrl.updateContentSize();
};

CheckTreeBox.prototype._implicit = function (values) {
  return values || [];
};

CheckTreeBox.property = {};
CheckTreeBox.property.items = {
  /***
   * @this CheckTreeBox
   * @param items
   */
  set: function set(items) {
    items = items || [];
    this._items = items;
    this.listCtrl.setItems(items);
  },
  get: function get() {
    return this._items;
  }
};
CheckTreeBox.property.values = {
  /***
   * @this CheckTreeBox
   * @param values
   */
  set: function set(values) {
    this.listCtrl.setValues(values);
  },
  get: function get() {
    return this.listCtrl.getValues();
  }
};
CheckTreeBox.property.viewValues = {
  get: function get() {
    return this.listCtrl.getViewValues();
  }
};
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.hasClass('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();
  var ref = nodeHolder.findReferenceNode();
  var targetNode = ref || nodeHolder;
  var selected = item.selected;

  if (selected === 'all' && (targetNode.canSelectAll || targetNode.selected === 'none')) {
    targetNode.selectAll();
  } else {
    targetNode.unselectAll();
  }

  if (ref) {
    nodeHolder.getRoot().updateSelectedFromRef();
  }

  this.emit('change', {
    type: 'change',
    target: this
  }, this);
};
/***
 * @this CheckTreeBox
 */


CheckTreeBox.eventHandler.searchModify = function () {};

CheckTreeBox.prototype.updateSelectedInViewIfNeed = function () {
  if (this.rootViewHolder !== this.rootHolder) {
    this.rootViewHolder.updateSelectedFromRef();
  }
};

CheckTreeBox.eventHandler.clickCancelBtn = function (event) {
  this.emit('cancel', {
    type: 'cancel',
    target: this,
    originalEvent: event
  }, this);
};

CheckTreeBox.eventHandler.clickCloseBtn = function (event) {
  this.emit('close', {
    type: 'close',
    target: this,
    originalEvent: event
  }, this);
};

absol_acomp_ACore.install(CheckTreeBox);
/* harmony default export */ const js_CheckTreeBox = (CheckTreeBox);
/***
 *
 * @param {CheckTreeBox} boxElt
 * @param items
 * @constructor
 */

function TreeRootHolder(boxElt, items) {
  var _this = this;

  this.boxElt = boxElt;
  this.items = items;
  this.selected = 'none';
  var Clazz = this.SubHolderClass;
  this.child = [];
  this.idx = -1; //root

  this.tailIdx = this.idx;

  if (items && items.length > 0) {
    items.reduce(function (ac, it) {
      var child = new Clazz(boxElt, it, ac.idx + 1, _this);
      ac.idx = child.tailIdx;
      ac.arr.push(child);
      return ac;
    }, {
      idx: this.idx,
      arr: this.child
    });
    this.tailIdx = this.child[this.child.length - 1].tailIdx;
  }

  this.canSelectAll = this.child.every(function (c) {
    return c.canSelectAll;
  });
  this.canSelect = this.child.length === 0 || this.child.some(function (c) {
    return c.canSelect;
  });
}
CheckTreeBox.prototype.RootHolderClass = TreeRootHolder;
TreeRootHolder.prototype.level = -1;

TreeRootHolder.prototype.reset = function () {
  this.child.forEach(function (c) {
    return c.reset();
  });
  this.selected = "none";
};
/***
 *
 * @param {Array=} ac
 */


TreeRootHolder.prototype.toArray = function (ac) {
  ac = ac || [];
  this.child.forEach(function (c) {
    return c.toArray(ac);
  });
  return ac;
};

TreeRootHolder.prototype.updateFromChild = function () {
  var childSelectAll = 0;
  var childSelectChild = 0;
  var isCheckAll = true;
  this.traverse(function (hd) {
    if (hd.selected === 'none' && !hd.item.noSelect) {
      isCheckAll = false;
    }
  });

  if (this.canSelectAll) {
    this.boxElt.$checkAll.checked = isCheckAll;
    this.boxElt.$checkAll.minus = false;
    this.selected = isCheckAll ? 'all' : 'none';
  } else {
    this.boxElt.$checkAll.checked = false;
    this.boxElt.$checkAll.minus = isCheckAll;
    this.selected = isCheckAll ? 'child' : 'none';
  }
};

TreeRootHolder.prototype.updateUp = function () {
  this.updateFromChild();
};
/***
 *
 * @param {Array=} ac
 */


TreeRootHolder.prototype.getValues = function (ac) {
  ac = ac || [];
  this.child.forEach(function (c) {
    return c.getValues(ac);
  });
  return ac;
};

TreeRootHolder.prototype.getViewValues = function (ac) {
  ac = ac || [];
  this.child.forEach(function (c) {
    return c.getViewValues(ac);
  });
  return ac;
};
/***
 *
 * @param {Array} values
 */


TreeRootHolder.prototype.setValues = function (values) {
  this.reset();
  values = values.reduce(function (ac, cr) {
    ac[keyStringOf(cr)] = true;
    return ac;
  }, values.slice());
  this.child.forEach(function (c) {
    return c.setValues(values);
  });
};

TreeRootHolder.prototype.calcEstimateSize = function () {
  var res = {
    width: 0,
    height: this.boxElt.itemHeight + (this.tailIdx + 1)
  };
  var holders = this.child;
  var n = holders.length;
  var holder;
  var longestHolder = null;
  var longest = 0;
  var w;

  for (var i = 0; i < n; ++i) {
    holder = holders[i];
    holder.traverse(function (hd) {
      w = hd.calcEstimateWidth();

      if (w > longest) {
        longest = w;
        longestHolder = hd;
      }
    });
  }

  if (longestHolder) {
    res.width = longestHolder.calcWidth() * this.boxElt.scale14;
  }

  return res;
};

TreeRootHolder.prototype.selectAll = function () {
  this.child.forEach(function (c) {
    return c.selectAll();
  });
};

TreeRootHolder.prototype.unselectAll = function () {
  this.child.forEach(function (c) {
    return c.unselectAll();
  });
};

TreeRootHolder.prototype.findReferenceNode = function () {
  if (this.boxElt.listCtrl.rootHolder === this) return null;
  return this.boxElt.listCtrl.rootHolder;
};

TreeRootHolder.prototype.updateSelectedFromRef = function () {
  if (this.boxElt.listCtrl.rootHolder === this) return;
  this.child.forEach(function (c) {
    return c.updateSelectedFromRef();
  });
};

TreeRootHolder.prototype.traverse = function (cb) {
  this.child.forEach(function (c) {
    return c.traverse(cb);
  });
};

TreeRootHolder.prototype.getRoot = function () {
  return this;
};
/***
 *
 * @param {Object<string, TreeNodeHolder>|{}=}ac
 * @returns {Object<string, TreeNodeHolder>|{}}
 */


TreeRootHolder.prototype.depthIndexing = function (ac) {
  ac = ac || {};
  this.child.forEach(function (c) {
    return c.depthIndexing(ac);
  });
  return ac;
};
/***
 *
 * @param {CheckTreeBox} boxElt
 * @param {SelectionItem} item
 * @param {number} idx
 * @param {TreeNodeHolder | TreeRootHolder} parent
 * @constructor
 */


function TreeNodeHolder(boxElt, item, idx, parent) {
  var _this2 = this;

  this.boxElt = boxElt;
  this.item = item;
  this.idx = idx;
  this.tailIdx = idx; //last child index

  this.parent = parent;
  this.status = item.items && item.items.length > 0 ? 'close' : 'none';
  this.selected = 'none';
  this.level = parent ? parent.level + 1 : 0;

  if (this.status === 'close' && this.level < this.boxElt.initOpened) {
    this.status = 'open';
  }

  this._elt = null;
  var Clazz = this.constructor;
  /***
   *
   * @type {this[]}
   */

  this.child = [];

  if (item.items && item.items.length > 0) {
    item.items.reduce(function (ac, it) {
      var child = new Clazz(boxElt, it, ac.idx + 1, _this2);
      ac.idx = child.tailIdx;
      ac.arr.push(child);
      return ac;
    }, {
      idx: this.idx,
      arr: this.child
    });
    this.tailIdx = this.child[this.child.length - 1].tailIdx;
  }

  this.canSelectAll = !this.item.noSelect && this.child.every(function (c) {
    return c.canSelectAll;
  });
  this.canSelect = !this.item.noSelect && (this.child.length === 0 || this.child.some(function (c) {
    return c.canSelect;
  }));
}
TreeRootHolder.prototype.SubHolderClass = TreeNodeHolder;
/***
 *
 * @param {Object<string, TreeNodeHolder>|{}}ac
 * @returns {Object<string, TreeNodeHolder>|{}}
 */

TreeNodeHolder.prototype.depthIndexing = function (ac) {
  ac = ac || {};
  var key = keyStringOf(this.item.value);
  if (!ac[key]) ac[key] = [];
  ac[key].push(this);

  if (ac[key].length === 2) {
    console.warn("Duplicate value", ac[key]);
  }

  this.child.forEach(function (c) {
    return c.depthIndexing(ac);
  });
  return ac;
};

TreeNodeHolder.prototype.findIdxInView = function () {
  var holders = this.boxElt.listCtrl.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.getValues = function (ac) {
  ac = ac || [];

  if (this.selected === 'all') {
    ac.push(this.item.value);
  } else if (this.selected === 'child') {
    this.child.forEach(function (c) {
      return c.getValues(ac);
    });
  }

  return ac;
};

TreeNodeHolder.prototype.getViewValues = function (ac) {
  return this.getValues(ac);
};

TreeNodeHolder.prototype.setValues = function (values) {
  if (values[keyStringOf(this.item.value)]) {
    this.selectAll(true);
  } else {
    this.child.forEach(function (c) {
      return c.setValues(values);
    });
  }

  this.updateFromChild();
};

TreeNodeHolder.prototype.toggle = function () {
  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.listCtrl.viewHolders.splice.apply(this.boxElt.listCtrl.viewHolders, [idx + 1, 0].concat(arr));
    this.boxElt.listCtrl.updateContentSize();
    this.boxElt.listCtrl.viewListAt(idx);
    this.boxElt.emit('toggleitem', {
      type: 'toggleitem',
      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.listCtrl.viewHolders[idx + 1 + l].isDescendantOf(this)) {
      ++l;
    }

    this.boxElt.listCtrl.viewHolders.splice(idx + 1, l);
    this.boxElt.listCtrl.updateContentSize();
    this.boxElt.listCtrl.viewListAt(idx);
    this.boxElt.emit('toggleitem', {
      type: 'toggleitem',
      target: this.boxElt,
      nodeHolder: this,
      status: 'close'
    }, this.boxElt);
  }
};
/***
 *
 * @param {boolean=} isDownUpdate
 */


TreeNodeHolder.prototype.selectAll = function (isDownUpdate) {
  if (this.selected === 'all') return;
  if (!this.canSelect) return;
  if (this.canSelectAll) this.selected = 'all';else this.selected = 'child';
  if (this.itemElt) this.itemElt.selected = this.selected;
  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.reset = function () {
  if (this.selected !== "empty") this.selected = 'none';
  if (this.itemElt) this.itemElt.selected = this.selected;
  this.child.forEach(function (child) {
    child.reset(true);
  });
};

TreeNodeHolder.prototype.updateFromChild = function () {
  if (this.child.length === 0) return;
  var childSelectAll = 0;
  var childSelectChild = 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;
  }
};

TreeNodeHolder.prototype.updateUp = function () {
  this.updateFromChild();
  if (this.parent) this.parent.updateUp();
};

TreeNodeHolder.prototype.calcEstimateWidth = function () {
  var width = 12; //padding

  width += 23 * 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 += 43; //cheat for some size with checklistbox

  width += 1.75 * 14 * this.level;
  width += 14.7 + 5; //toggle icon

  width += 16; //checkbox

  if (this.item.icon) width += 21; //icon

  width += 7 + measureArial14TextWidth(this.item.text); //margin-text

  if (this.item.desc) width += 6 + measureArial14TextWidth(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;
};

TreeNodeHolder.prototype.traverse = function (cb) {
  cb(this);
  this.child.forEach(function (c) {
    return c.traverse(cb);
  });
};

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;

      if (this.item.noSelect || !this.canSelect) {
        elt.noSelect = true;
      } else {
        elt.noSelect = false;
      }
    } 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();
  });
};
/**
 *
 * @param {CheckTreeBox} elt
 * @constructor
 */


function CTBItemListController(elt) {
  this.elt = elt;
  var RootHolderClass = this.elt.RootHolderClass;
  this._items = [];
  this._values = [];
  this.itemHolderByValue = {};
  this.rootHolder = new RootHolderClass(this.elt, []); // this.rootHolders = [];

  /***
   *
   * @type {TreeRootHolder}
   */

  this.rootViewHolder = this.rootHolder;
  /***
   *
   * @type {TreeNodeHolder[]}
   */

  this.viewHolders = []; //toArray

  this.$checkAll = ACore_$('.as-select-list-box-check-all', this.elt).on('change', this.ev_checkAllChange.bind(this));
  this.$scroller = ACore_$('.as-check-tree-box-scroller', elt).on('scroll', this.ev_scroll.bind(this));
  this.itemInPage = Math.max(36, Math.ceil(getScreenSize().height / this.itemHeight));
  this.$content = ACore_$('.as-check-tree-box-content', elt);
  this.$pages = $$('.as-select-list-box-page', elt);
  this.$pages.forEach(function (p) {
    p.__viewOffset__ = -1;
  });
}

CTBItemListController.prototype.preLoadN = 3;
CTBItemListController.prototype.itemHeight = 28;
CTBItemListController.prototype.itemInPage = 36;

CTBItemListController.prototype.resetView = function () {
  this.elt.$searchInput.value = '';
  this.viewHolders = this.rootHolder.toArray();
  this.rootViewHolder = this.rootHolder;
  this.updateContentSize();
  this.viewListAt(0);
};

CTBItemListController.prototype.setItems = function (items) {
  if (!(items instanceof Array)) items = [];
  prepareSearchForList(items);
  this._items = items;
  var RootHolderClass = this.elt.RootHolderClass;
  this.rootHolder = new RootHolderClass(this.elt, items);
  this.itemHolderByValue = this.rootHolder.depthIndexing();
  this.estimateSize = this.rootHolder.calcEstimateSize();
  this.elt.addStyle('--select-list-estimate-width', this.estimateSize.width + 'px');
  this.resetView();
  this.rootHolder.setValues(this._values);
};

CTBItemListController.prototype.setValues = function (values) {
  if (values instanceof Array) {
    values = values.slice();
  } else if (values === undefined || values === null) {
    values = [];
  } else values = [values];

  this._values = values;
  this.rootHolder.setValues(values);
};

CTBItemListController.prototype.getValues = function () {
  return this.rootHolder.getValues();
};

CTBItemListController.prototype.getViewValues = function () {
  return this.rootHolder.getViewValues();
};

CTBItemListController.prototype.updateContentSize = function () {
  this.$content.addStyle('height', this.viewHolders.length * this.itemHeight / 14 + 'em');
};

CTBItemListController.prototype.viewListAt = function (offset) {
  offset = offset || 0;
  this.elt.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 / 14 + 'em');

      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');
    }
  }
};

CTBItemListController.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());
  }
};

CTBItemListController.prototype._assignItems = function (pageElt, offset) {
  for (var i = 0; i < pageElt.childNodes.length; ++i) {
    this.viewHolders[offset + i].itemElt = pageElt.childNodes[i];
  }
};

CTBItemListController.prototype._requestItem = function () {
  var res = 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);
      }
    }
  });

  res.menuElt = this.elt;
  return res;
};

CTBItemListController.prototype._pool = [];

CTBItemListController.prototype._releaseItem = function (item) {
  if (item.nodeHolder && item.nodeHolder.itemElt === item) {
    item.nodeHolder.itemElt = null;
  }

  this._pool.push(item);
};

CTBItemListController.prototype.findItemHoldersByValue = function (value) {
  return (this.itemHolderByValue[keyStringOf(value)] || []).slice();
};

CTBItemListController.prototype.isSelectedAll = function () {
  return this.rootHolder.selected;
};
/*
CTBItemListController.prototype.selectAll = function (selected){
    var preValues = this.getValues();
    switch (selected) {
        case 'all':
            this.rootHolder.unselectAll();
            break;
        case 'child':
            if (this.rootHolder.canSelectAll) {
                this.rootHolder.selectAll();
            }
            else {
                this.rootHolder.unselectAll();
            }
            break;
        case 'none':
            this.rootHolder.selectAll();
            break;
    }
    if (this.rootViewHolder !== this.rootHolder) {
        this.rootViewHolder.updateSelectedFromRef();
    }
    var newValues = this.getValues();
    if (!arrayCompare(preValues, newValues)) {
        this.elt.emit('change', { type: 'change', target: this }, this);
    }
};*/


CTBItemListController.prototype.ev_scroll = function (event) {
  var itemHeight = this.itemHeight * this.elt.getFontSize() / 14;
  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 * itemHeight + 200 > scrollTop) needLoad = -1;

  if (needLoad === 0 && this.viewHolders.length > endOffset && endOffset * 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__ * 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__ * itemHeight + 'px');
  }
};

CTBItemListController.prototype.ev_checkAllChange = function (event) {
  var selected = this.rootHolder.selected;
  var preValues = this.getValues();

  switch (selected) {
    case 'all':
      this.rootHolder.unselectAll();
      break;

    case 'child':
      if (this.rootHolder.canSelectAll) {
        this.rootHolder.selectAll();
      } else {
        this.rootHolder.unselectAll();
      }

      break;

    case 'none':
      this.rootHolder.selectAll();
      break;
  }

  if (this.rootViewHolder !== this.rootHolder) {
    this.rootViewHolder.updateSelectedFromRef();
  }

  var newValues = this.getValues();

  if (!arrayCompare(preValues, newValues)) {
    this.elt.emit('change', {
      type: 'change',
      target: this
    }, this);
  }
};
/**
 *
 * @param {CheckTreeBox} elt
 * @constructor
 */


function CTBActionController(elt) {
  this.elt = elt;
  this.$cancelBtn = ACore_$('.as-select-list-box-cancel-btn', this.elt).on('click', this.ev_clickCancelBtn.bind(this));
  this.$closeBtn = ACore_$('.as-select-list-box-close-btn', this.elt) || ACore_$('.am-dropdown-box-close-btn', this.elt);
  this.$closeBtn.on('click', this.ev_clickCloseBtn.bind(this));
}

CTBActionController.prototype.ev_clickCancelBtn = function (event) {
  this.elt.emit('cancel', {
    type: 'cancel',
    target: this,
    originalEvent: event
  }, this);
};

CTBActionController.prototype.ev_clickCloseBtn = function (event) {
  this.elt.emit('close', {
    type: 'close',
    target: this,
    originalEvent: event
  }, this);
};

function CTBSearchController(elt) {
  this.elt = elt;
  this.cache = {};
  this.$searchInput = ACore_$('searchtextinput', this.elt).on('stoptyping', this.ev_searchModify.bind(this));
}

CTBSearchController.prototype.ev_searchModify = function () {
  var text = this.$searchInput.value.trim();

  if (text.length === 0) {
    this.elt.listCtrl.resetView();
    return;
  }

  var searchData;

  if (this.cache[text]) {
    searchData = this.cache[text];
  } else {
    searchData = {};
    searchData.items = searchTreeListByText(text, this.elt.listCtrl._items);
    searchData.rootViewHolder = new TreeRootHolder(this.elt, searchData.items);
    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);
      }
    });
  }

  searchData.rootViewHolder.traverse(function (hd) {
    if (hd.status === 'close') {
      if (!hd.item.doNotInitOpen) hd.status = 'open';
    }
  }); //todo: short command

  this.elt.listCtrl.rootViewHolder = searchData.rootViewHolder;
  this.elt.listCtrl.viewHolders = this.elt.listCtrl.rootViewHolder.toArray();
  this.elt.listCtrl.rootViewHolder.updateSelectedFromRef();
  this.elt.listCtrl.updateContentSize();
  this.elt.listCtrl.viewListAt(0);
  this.elt.dropdownCtrl.updatePosition();
};
/**
 *
 * @param {CheckTreeBox} elt
 * @constructor
 */


function CTBDropdownController(elt) {
  this.elt = elt;
}

CTBDropdownController.prototype.updatePosition = function () {
  if (this.elt.updatePosition) {
    this.elt.updatePosition();
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeLeafOnlyBox.js









var normalizeItem = function normalizeItem(item) {
  var nItem = Object.assign({}, item);

  if (!nItem.isLeaf && nItem.noSelect) {
    delete nItem.noSelect;
  }

  if (nItem.items && nItem.items.map) nItem.items = normalizeItems(nItem.items);
  return nItem;
};

var normalizeItems = function normalizeItems(items) {
  return items.map(function (it) {
    return normalizeItem(it);
  });
};
/***
 * Only tree has leaf can be selected
 * @extends CheckTreeBox
 * @constructor
 */


function CheckTreeLeafOnlyBox() {
  js_CheckTreeBox.apply(this, arguments);
}

CheckTreeLeafOnlyBox.tag = 'CheckTreeLeafOnlyBox'.toLowerCase();

CheckTreeLeafOnlyBox.render = function () {
  var mobile = arguments[1] && arguments[1].forceMobile || Detector_BrowserDetector.isMobile;
  var footer = {
    "class": 'as-dropdown-box-footer',
    child: [{
      tag: 'checkbox',
      "class": 'as-select-list-box-check-all',
      props: {
        checked: false,
        text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All'
      }
    }, {
      "class": 'as-dropdown-box-footer-right',
      child: [{
        tag: 'a',
        "class": 'as-select-list-box-cancel-btn',
        attr: {
          "data-ml-key": 'txt_cancel'
        }
      }].concat(mobile ? [] : [{
        tag: 'a',
        "class": 'as-select-list-box-close-btn',
        attr: {
          "data-ml-key": 'txt_close'
        }
      }])
    }]
  };
  var content = {
    "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')
    }
  };

  if (mobile) {
    return ACore_({
      props: {
        mobile: true
      },
      extendEvent: ['change', 'close', 'toggleitem', 'cancel'],
      "class": ['am-check-tree-box-modal', 'am-modal', 'am-dropdown-box-modal'],
      child: {
        "class": ['am-check-tree-box', 'am-dropdown-box', 'as-dropdown-box-common-style'],
        child: [{
          "class": 'am-dropdown-box-header',
          child: [{
            tag: Searcher.tag
          }, {
            tag: 'button',
            "class": 'am-dropdown-box-close-btn',
            child: 'span.mdi.mdi-close'
          }]
        }, content, footer]
      }
    });
  }

  return ACore_({
    tag: 'follower',
    extendEvent: ['change', 'toggleitem', 'cancel', 'close'],
    "class": ['as-check-tree-leaf-only-box', 'as-check-tree-box', 'as-select-list-box', 'as-anchor-1'],
    child: [{
      "class": 'as-select-list-box-search-ctn',
      child: 'searchtextinput'
    }, content, footer],
    props: {
      anchor: [1, 6, 2, 5]
    }
  });
};

Object.assign(CheckTreeLeafOnlyBox.prototype, js_CheckTreeBox.prototype);
CheckTreeLeafOnlyBox.property = Object.assign({}, js_CheckTreeBox.property);
CheckTreeLeafOnlyBox.eventHandler = Object.assign({}, js_CheckTreeBox.eventHandler);
CheckTreeLeafOnlyBox.prototype._pool = [];
CheckTreeLeafOnlyBox.property.items = {
  get: js_CheckTreeBox.property.items.get,
  set: function set(items) {
    items = normalizeItems(items || []);
    js_CheckTreeBox.property.items.set.call(this, items);
  }
};

CheckTreeLeafOnlyBox.prototype._requestItem = function () {
  var res = this._pool.pop() || ACore_({
    tag: js_CheckTreeItem.tag,
    "class": 'as-check-tree-leaf-only-item',
    props: {
      menuElt: this
    },
    on: {
      presstoggle: function presstoggle(event) {
        this.menuElt.eventHandler.toggleItem(this, event);
      },
      select: function select(event) {
        this.menuElt.eventHandler.selectItem(this, event);
      }
    }
  });

  res.menuElt = this;
  return res;
};

CheckTreeLeafOnlyBox.prototype.HolderClass = TreeLeafOnlyNodeHolder;
absol_acomp_ACore.install(CheckTreeLeafOnlyBox);
/* harmony default export */ const js_CheckTreeLeafOnlyBox = (CheckTreeLeafOnlyBox);
/***
 * @extends TreeRootHolder
 * @param {CheckTreeLeafOnlyBox} boxElt
 * @param items
 * @constructor
 */

function TreeLeafOnlyRootHolder(boxElt, items) {
  TreeRootHolder.apply(this, arguments);
}

CheckTreeLeafOnlyBox.prototype.RootHolderClass = TreeLeafOnlyRootHolder;
HTML5_OOP.mixClass(TreeLeafOnlyRootHolder, TreeRootHolder);
/***
 * @extends TreeNodeHolder
 * @constructor
 */

function TreeLeafOnlyNodeHolder() {
  TreeNodeHolder.apply(this, arguments);
  /***
   * @memberOf  TreeLeafOnlyNodeHolder#
   * @type {number}
   */

  this.leafCount = 0;

  if (this.item.isLeaf) {
    this.leafCount = 1;
  } else {
    this.leafCount = this.child.reduce(function (ac, c) {
      return ac + c.leafCount;
    }, 0);
  }

  if (this.child.length > 0) {
    this.item.noSelect = this.child.every(function (c) {
      return c.item.noSelect;
    }); //all child is noSelect=> noSelect
  }

  this.canSelect = this.canSelect && this.leafCount > 0;
  this.canSelectAll = this.canSelect && !this.item.noSelect && this.child.every(function (c) {
    return c.canSelectAll || c.leafCount === 0;
  });
  if (this.leafCount === 0) this.selected = 'empty';
}
HTML5_OOP.mixClass(TreeLeafOnlyNodeHolder, TreeNodeHolder);
TreeLeafOnlyRootHolder.prototype.SubHolderClass = TreeLeafOnlyNodeHolder;

TreeLeafOnlyNodeHolder.prototype.setValues = function (values) {
  if (values[keyStringOf(this.item.value)]) {
    this.selectAll(true);
  } else {
    this.child.forEach(function (c) {
      return c.setValues(values);
    });
  }

  this.updateFromChild();
};

TreeLeafOnlyNodeHolder.prototype.getValues = function (ac) {
  ac = ac || [];

  if (this.selected === 'all' && this.item.isLeaf) {
    ac.push(this.item.value);
  } else {
    this.child.forEach(function (c) {
      return c.getValues(ac);
    });
  }

  return ac;
};

TreeLeafOnlyNodeHolder.prototype.getViewValues = function (ac) {
  ac = ac || [];

  if (this.selected === 'all') {
    ac.push(this.item.value);
  } else if (this.selected === 'child') {
    this.child.forEach(function (c) {
      return c.getViewValues(ac);
    });
  }

  return ac;
};
/***
 *
 * @param {boolean=} isDownUpdate
 */


TreeLeafOnlyNodeHolder.prototype.selectAll = function (isDownUpdate) {
  if (this.selected === 'empty') return;
  return TreeNodeHolder.prototype.selectAll.apply(this, arguments);
};

TreeLeafOnlyNodeHolder.prototype.unselectAll = function (isDownUpdate) {
  if (this.selected === 'empty') return;
  return TreeNodeHolder.prototype.unselectAll.apply(this, arguments);
};

TreeLeafOnlyNodeHolder.prototype.updateFromChild = function () {
  if (this.child.length === 0) return;
  var count = this.child.reduce(function (ac, cr) {
    ac[cr.selected]++;
    return ac;
  }, {
    all: 0,
    child: 0,
    none: 0,
    empty: 0
  }); // if (this.boxElt.debug)
  // console.log( this.item, count.empty , count.all, this.child.length);//0, 9, 10

  if (count.empty === this.child.length) {
    this.selected = 'empty';
  } else if (count.empty + count.all === this.child.length) {
    this.selected = 'all';
  } else if (count.all + count.child > 0) {
    this.selected = 'child';
  } else if (this.selected !== "empty") {
    this.selected = 'none';
  }

  if (this.itemElt) {
    this.itemElt.selected = this.selected;
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckTreeMenu.js










/***
 * @extends AElement
 * @constructor
 */

function MultiCheckTreeMenu() {
  this._items = [];
  this._values = [];
  this._viewValues = [];
  /***
   * @type {CheckTreeBox|CheckTreeLeafOnlyBox}
   */

  this.$checkTreeBox = ACore_({
    tag: this.renderProps.leafOnly ? js_CheckTreeLeafOnlyBox.tag : js_CheckTreeBox.tag,
    // forceMobile: true,
    on: {
      change: this.eventHandler.boxChange,
      preupdateposition: this.eventHandler.preUpdateListPosition,
      toggleitem: this.eventHandler.boxToggleItem,
      cancel: this.eventHandler.boxCancel,
      close: this.eventHandler.boxClose
    },
    props: {
      initOpened: this.renderProps.initOpened,
      enableSearch: this.renderProps.enableSearch
    }
  });
  this.$itemCtn = ACore_$('.as-multi-select-menu-item-ctn', this);
  this.$checkTreeBox.followTarget = this;
  this.$checkTreeBox.sponsorElement = this;
  this.on('click', this.eventHandler.click);
  /**
   * parent will be selected if all off leaf selected, sub tree can not select if had no leaf
   * @name leafOnly
   * @type {boolean}
   * @memberOf MultiCheckTreeMenu#
   */

  /**
   * parent will be selected if all off leaf selected, sub tree can not select if had no leaf
   * @name initOpened
   * @type {number}
   * @memberOf MultiCheckTreeMenu#
   */

  /***
   * todo: TREE has noSelect
   */
}

MultiCheckTreeMenu.tag = 'MultiCheckTreeMenu'.toLowerCase();

MultiCheckTreeMenu.render = function (data, domDesc) {
  var leafOnly = domDesc.props && domDesc.props.leafOnly;
  var props = domDesc.props || {};
  /**
   * @name renderProps
   * @memberof MultiCheckTreeMenu#
   */

  var res = 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'],
    props: {
      renderProps: props
    }
  });

  if (leafOnly) res.addClass('as-leaf-only');
  if (Detector_BrowserDetector.isMobile) res.addClass('am-multi-select-menu');
  return res;
};

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) {
  values = values.slice();
  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.slice();
  this.viewValues(this.$checkTreeBox.viewValues);
};

MultiCheckTreeMenu.prototype.init = function (props) {
  props = props || {};
  var cProps = Object.assign({}, props);

  if ('initOpened' in props) {
    this.initOpened = props.initOpened;
    delete cProps.initOpened;
  }

  if ('leafOnly' in props) {
    this.leafOnly = props.leafOnly;
    delete cProps.leafOnly;
  }

  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.initOpened = {
  set: function set(value) {
    if (isNaturalNumber(value)) {
      this._initOpened = value;
    } else {
      this._initOpened = 0;
    }

    this.$checkTreeBox.initOpened = this._initOpened;
  },
  get: function get() {
    return this._initOpened;
  }
};
MultiCheckTreeMenu.property.isFocus = {
  /***
   * @this MultiCheckTreeMenu
   * @param value
   */
  set: function set(value) {
    if (value && (this.disabled || this.readOnly)) return;
    var self = this;
    value = !!value;
    var c = this.hasClass('as-focus');
    if (value === c) return;

    if (value) {
      self.off('click', self.eventHandler.click);
      var bound = this.getBoundingClientRect();
      this.$checkTreeBox.addStyle('min-width', bound.width + 'px');
      this.addClass('as-focus');
      this.$checkTreeBox.addTo(document.body);
      this.$checkTreeBox.updatePosition();

      if (this._focusTimeout > 0) {
        clearTimeout(this._focusTimeout);
      }

      this._focusTimeout = setTimeout(function () {
        document.addEventListener('mousedown', this.eventHandler.clickOut);
        this._focusTimeout = -1;
        this.$checkTreeBox.focus();
      }.bind(this), 5);
    } else {
      var waitMouseUp = function waitMouseUp() {
        document.removeEventListener('mouseup', waitMouseUp);
        setTimeout(function () {
          self.on('click', self.eventHandler.click);
        }, 5);
      }; // document.addEventListener('mouseup', waitMouseUp);why?


      this.removeClass('as-focus');
      this.$checkTreeBox.selfRemove();
      this.$checkTreeBox.resetSearchState();
      document.removeEventListener('mousedown', this.eventHandler.clickOut);
      setTimeout(waitMouseUp, 100);
    }
  },
  get: function get() {
    return this.hasClass('as-focus');
  }
};
MultiCheckTreeMenu.property.items = {
  set: function set(items) {
    this._items = copySelectionItemArray(items || [], {
      removeNoView: true
    });
    this.$checkTreeBox.items = this._items;
    this.addStyle('--list-min-width', Math.max(145 + 20, this.$checkTreeBox.estimateSize.width) + 'px');
    this.viewValues(this.$checkTreeBox.viewValues);
    this._values = this.$checkTreeBox.values.slice();
  },
  get: function get() {
    return this.$checkTreeBox.items;
  }
};
MultiCheckTreeMenu.property.values = {
  /***
   * @this MultiCheckTreeMenu
   * @param values
   */
  set: function set(values) {
    if (!(values instanceof Array)) values = [];
    this.$checkTreeBox.values = values.slice();
    this.viewValues(this.$checkTreeBox.viewValues);
    this._values = this.$checkTreeBox.values.slice();
  },

  /***
   * @this MultiCheckTreeMenu
   */
  get: function get() {
    if (this.isFocus) return this._values.slice();
    return this.$checkTreeBox.values.slice();
  }
};
MultiCheckTreeMenu.property.checkedValues = {
  get: function get() {
    return this.$checkTreeBox.viewValues.slice();
  }
};
MultiCheckTreeMenu.property.leafOnly = {
  set: function set(value) {
    if (!!value === this.hasClass('as-leaf-only')) return;
    throw Error("Can not change leafOnly value!");
  },
  get: function get() {
    return this.hasClass('as-leaf-only');
  }
};
MultiCheckTreeMenu.property.disabled = js_MultiSelectMenu.property.disabled;
MultiCheckTreeMenu.property.readOnly = js_MultiSelectMenu.property.readOnly;
MultiCheckTreeMenu.eventHandler = {};
/***
 * @this MultiCheckTreeMenu
 * @param event
 */

MultiCheckTreeMenu.eventHandler.clickOut = function (event) {
  if (event.target.hasClass && event.target.hasClass('am-modal') || event.target === this || event.target === this.$itemCtn || !hitElement(this, event) && !hitElement(this.$checkTreeBox, event)) {
    this.isFocus = false;
    this.commitView();
  }
};
/***
 * @this MultiCheckTreeMenu
 * @param event
 */


MultiCheckTreeMenu.eventHandler.boxClose = function (event) {
  this.commitView();
  this.isFocus = false;
};
/***
 * @this MultiCheckTreeMenu
 * @param event
 */


MultiCheckTreeMenu.eventHandler.click = function (event) {
  if (!this.readOnly && (event.target === this || event.target === this.$itemCtn)) {
    this.isFocus = true;
  }
};
/***
 * @this MultiCheckTreeMenu
 * @param event
 */


MultiCheckTreeMenu.eventHandler.boxChange = function (event) {
  this.viewValues(this.$checkTreeBox.viewValues);
  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.updateSelectedInViewIfNeed();
  var newValues = this.$checkTreeBox.viewValues.slice();
  this.viewValues(newValues);
  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();
};

MultiCheckTreeMenu.property.enableSearch = {
  set: function set(value) {
    this.$checkTreeBox.enableSearch = !!value;
  },
  get: function get() {
    return this.$checkTreeBox.enableSearch;
  }
};
absol_acomp_ACore.install(MultiCheckTreeMenu);
/* harmony default export */ const js_MultiCheckTreeMenu = (MultiCheckTreeMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/fileinputbox.css
var fileinputbox = __webpack_require__(1457);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileInputBox.js







/***
 * @extends AElement
 * @constructor
 */

function FileInputBox() {
  this.$fileSize = ACore_$('.as-file-input-box-file-size', this);
  this.$fileName = ACore_$('.as-file-input-box-file-name', this);
  this.$bg = ACore_$('.as-file-input-box-background', this);
  this.$input = ACore_$('input', this).on('change', this.eventHandler.input_fileChange);
  this.$trigger = ACore_({
    elt: ACore_$('.as-file-input-box-trigger', this),
    tag: js_DropZone.tag,
    on: {
      fileenter: this.eventHandler.input_fileEnter,
      fileleave: this.eventHandler.input_fileLeave,
      filedrop: this.eventHandler.input_fileDrop
    }
  });
  this.$downloadBtn = ACore_$('.as-file-input-box-download-btn', this).on('click', this.download.bind(this));
  this.$removeBtn = ACore_$('.as-file-input-box-remove-btn', this).on('click', this.clearValue.bind(this, true));
  this._value = null;
  this._fileSize = null;
  this._fileName = null;
  this._fileType = null;
  this._valueInfo = null;
  this._thumbnail = null;
  /***
   * default true
   * @name allowUpload
   * @type {boolean}
   * @memberOf FileInputBox#
   */

  this.allowUpload = true;
  /***
   * @name value
   * @type {null|any}
   * @memberOf FileInputBox#
   */

  /***
   * @name thumbnail
   * @type {null|any}
   * @memberOf FileInputBox#
   */

  /***
   * @name fileSize
   * @type {null|number}
   * @memberOf FileInputBox#
   */

  /***
   * @name fileType
   * @type {null|string}
   * @memberOf FileInputBox#
   */

  /***
   * @name fileName
   * @type {null|string}
   * @memberOf FileInputBox#
   */

  /***
   * default: false
   * @name downloadable
   * @type {boolean}
   * @memberOf FileInputBox#
   */
}

FileInputBox.tag = 'FileInputBox'.toLowerCase();

FileInputBox.render = function () {
  return ACore_({
    extendEvent: ['change'],
    "class": 'as-file-input-box',
    child: ['.as-file-input-box-background', {
      tag: 'label',
      "class": 'as-file-input-box-trigger',
      child: {
        tag: 'input',
        attr: {
          type: 'file',
          accept: '*',
          title: null
        }
      }
    }, {
      "class": 'as-file-input-box-upload-overlay',
      child: 'span.mdi.mdi-upload'
    }, {
      "class": 'as-file-input-box-info',
      child: [{
        tag: 'span',
        "class": 'as-file-input-box-file-name',
        child: {
          text: ''
        }
      }, 'br', {
        tag: 'span',
        "class": 'as-file-input-box-file-size',
        child: {
          text: ''
        }
      }]
    }, {
      "class": 'as-file-input-box-action-left',
      child: {
        tag: 'button',
        "class": 'as-file-input-box-remove-btn',
        child: 'span.mdi.mdi-close'
      }
    }, {
      "class": 'as-file-input-box-action-right',
      child: {
        tag: 'button',
        "class": 'as-file-input-box-download-btn',
        child: 'span.mdi.mdi-download'
      }
    }, {
      "class": 'as-file-input-box-checked',
      child: 'span.mdi.mdi-check-bold'
    }]
  });
};

FileInputBox.prototype.download = function () {
  var value = this.value;

  if (value) {
    if (value && value.name && value.url) {
      FileSaver_saveAs(value.url, value.name);
    } else {
      FileSaver_saveAs(value, this.fileName);
    }
  }
};

FileInputBox.prototype.clearValue = function (userAction, event) {
  if (this.value) {
    this.value = null;

    if (userAction) {
      this.emit('change', {
        type: 'change',
        originalEvent: event,
        action: 'clear',
        target: this
      }, this);
    }
  }
};

FileInputBox.prototype._updateThumbnail = function () {
  var previewUrl;
  var thumbnail = this.thumbnail;
  var fileType = this.fileType;

  if (thumbnail) {
    if (typeof thumbnail === "string") {
      previewUrl = thumbnail;
    } else if (thumbnail instanceof Blob || thumbnail instanceof File) {
      thumbnail.url = thumbnail.url || URL.createObjectURL(thumbnail);
      previewUrl = thumbnail.url;
    }
  }

  if (!previewUrl) {
    if (catalog_namespaceObject.indexOf(fileType) >= 0) {
      previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + fileType + '.svg';
    } else {
      previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg';
    }
  }

  if (previewUrl) {
    this.$bg.addStyle('backgroundImage', 'url("' + encodeURI(previewUrl) + '")');
  } else {
    this.$bg.removeStyle('backgroundImage');
  }
};

FileInputBox.prototype._updateFileName = function () {
  var fileName = this.fileName;

  if (fileName) {
    this.$fileName.firstChild.data = fileName;
    this.addClass('as-has-file-name');
  } else {
    this.$fileName.firstChild.data = '';
    this.removeClass('as-has-file-name');
  }
};

FileInputBox.prototype._updateFileSize = function () {
  var fileSize = this.fileName;

  if (fileSize === null) {
    this.$fileSize.firstChild.data = '';
    this.removeClass('as-has-file-size');
  } else {
    this.$fileSize.firstChild.data = fileSize2Text(fileSize);
    this.addClass('as-has-file-size');
  }
};

FileInputBox.property = {};
FileInputBox.property.value = {
  set: function set(value) {
    value = value || null;
    this._value = value;
    this._valueInfo = fileInfoOf(value);

    this._updateThumbnail();

    this._updateFileName();

    this._updateFileSize();

    if (value) {
      this.addClass('as-has-value');
    } else {
      this.removeClass('as-has-value');
    }
  },
  get: function get() {
    return this._value;
  }
};
FileInputBox.property.fileType = {
  set: function set(value) {
    this._fileType = value;

    this._updateThumbnail();
  },

  /***
   * @this FileInputBox
   * @return {*}
   */
  get: function get() {
    return this._fileType || this._valueInfo && this._valueInfo.type || null;
  }
};
FileInputBox.property.fileName = {
  set: function set(value) {
    value = typeof value === 'string' ? value : null;
    this._fileName = value;

    this._updateFileName();
  },
  get: function get() {
    return this._fileName || this._valueInfo && this._valueInfo.name || null;
  }
};
FileInputBox.property.fileSize = {
  set: function set(value) {
    if (isRealNumber(value)) value = Math.max(0, value);else value = null;
    this._fileSize = value;

    this._updateFileSize();
  },
  get: function get() {
    if (typeof this._fileSize === "number") return this._fileSize;
    if (this._valueInfo && typeof this._valueInfo.size === "number") return this._valueInfo.size;
    return null;
  }
};
FileInputBox.property.thumbnail = {
  set: function set(value) {
    this._thumbnail = value || null;

    this._updateThumbnail();
  },
  get: function get() {
    return this._thumbnail;
  }
};
FileInputBox.property.allowUpload = {
  set: function set(value) {
    if (value) {
      this.addClass('as-allow-upload');
    } else {
      this.removeClass('as-allow-upload');
    }
  },
  get: function get() {
    return this.hasClass('as-allow-upload');
  }
};
FileInputBox.property.downloadable = {
  set: function set(value) {
    if (value) {
      this.addClass('as-downloadable');
    } else {
      this.removeClass('as-downloadable');
    }
  },
  get: function get() {
    return this.hasClass('as-downloadable');
  }
};
FileInputBox.property.removable = {
  set: function set(value) {
    if (value) {
      this.addClass('as-removable');
    } else {
      this.removeClass('as-removable');
    }
  },
  get: function get() {
    return this.hasClass('as-removable');
  }
};
FileInputBox.property.accept = {
  set: function set(value) {
    if (!value) value = null;
    this.$input.attr('accept', value + '');
  },
  get: function get() {
    return this.$input.attr('accept') || null;
  }
};
FileInputBox.property.checked = {
  set: function set(value) {
    if (value) {
      this.addClass('as-checked');
    } else {
      this.removeClass('as-checked');
    }
  },
  get: function get() {
    return this.hasClass('as-checked');
  }
};
FileInputBox.eventHandler = {};

FileInputBox.eventHandler.input_fileChange = function (event) {
  var files = Array.prototype.slice.call(this.$input.files);

  if (files.length > 0) {
    this.value = files[0];
    this.emit('change', {
      type: 'change',
      originalEvent: event,
      file: files[0],
      action: 'file_dialog',
      target: this
    }, this);
  }
};

FileInputBox.eventHandler.input_fileEnter = function (event) {};

FileInputBox.eventHandler.input_fileLeave = function (event) {};

FileInputBox.eventHandler.input_fileDrop = function (event) {
  var files = Array.prototype.slice.call(event.files);
  var accept = this.accept;
  var file;

  if (files.length > 0) {
    file = files[0];
    if (!fileAccept(accept, file.type) && !fileAccept(accept, file.name)) file = null;
  }

  if (file) {
    this.value = file;
    this.emit('change', {
      type: 'change',
      originalEvent: event,
      file: file,
      action: 'drop',
      target: this
    }, this);
  }
};

absol_acomp_ACore.install(FileInputBox);
/* harmony default export */ const js_FileInputBox = (FileInputBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/countdowntext.css
var countdowntext = __webpack_require__(2261);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CountdownText.js





var CountdownText_ = absol_acomp_ACore._;
var CountdownText_$ = absol_acomp_ACore.$;
var tokenCache = {};
function remainSecondToText(remainSecond, format) {
  var tokens = tokenCache[format];

  if (!tokens) {
    tokens = (format.match(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g')) || []).reduce(function (ac, cr) {
      ac[cr] = true;
      return ac;
    }, {});
    tokenCache[format] = tokens;
  }

  var newText;
  var sec, min, hour;
  sec = Math[tokens['ms'] || tokens['mss'] ? 'floor' : 'ceil'](remainSecond);
  min = Math.floor(remainSecond / 60);
  hour = Math.floor(remainSecond / 60 / 60);
  newText = format.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (all) {
    switch (all) {
      case 'D':
        return Math.floor(remainSecond / 60 / 60 / 24) + '';

      case 'HH':
      case 'H':
      case 'hh':
        if (tokens['D']) {
          return zeroPadding(hour % 24, all.length);
        } else {
          return zeroPadding(hour, all.length);
        }

      case 'mm':
      case 'M':
      case 'MM':
        if (tokens['HH'] || tokens['hh']) {
          return zeroPadding(min % 60, all.length);
        } else {
          return zeroPadding(min, all.length);
        }

      case 'ss':
      case 'S':
      case 'SS':
        if (tokens['m'] || tokens['mm']) {
          return zeroPadding(sec % 60, all.length);
        } else {
          return zeroPadding(sec, all.length);
        }

      case 'cs':
        return zeroPadding(Math.ceil(remainSecond * 100) % 100, 2);

      case 'ms':
        return zeroPadding(Math.ceil(remainSecond * 1000) % 1000, 3);

      default:
        return all;
    }
  });
  return newText;
}
/***
 * @extends AElement
 * @constructor
 */

function CountdownText() {
  this.addClass('as-countdown-text');
  this.defineEvent('update');
  this.defineEvent('finish');
  this.text = '';
  this._format = 'HH:mm';
  this.format = 'HH:mm';
  this.fps = 5;
  this._finishTime = null;
  this.finishTime = null;
  this['_tick'] = this._tick.bind(this);
  setTimeout(this.start.bind(this), 0); //auto start

  /***
   * @type {number}
   * @name remainSecond
   * @memberOf CountdownText#
   */

  /***
   * @type {Date}
   * @name finishTime
   * @memberOf CountdownText#
   */

  /***
   * @type {string}
   * @name format
   * @memberOf CountdownText#
   */
}

CountdownText.tag = 'CountdownText'.toLowerCase();

CountdownText.render = function () {
  return CountdownText_('span');
};

CountdownText.prototype.buildinFormat = {
  'standard': function standard(remainSecond) {
    if (remainSecond >= 24 * 3600) {
      return remainSecondToText(remainSecond, 'D ngày HH:mm:ss');
    } else {
      return remainSecondToText(remainSecond, 'HH:mm:ss');
    }
  }
};

CountdownText.prototype._tick = function () {
  var remainSecond = this.remainSecond;
  var prevText = this.text;
  var newText;
  var format = this._format;
  if (this.buildinFormat[format]) format = this.buildinFormat[format];

  if (typeof format === "function") {
    newText = format.call(this, remainSecond);
  } else if (typeof format === "string") {
    newText = remainSecondToText(remainSecond, format);
  }

  if (prevText !== newText) {
    this.text = newText;
    this.innerHTML = newText;
    this.emit('update', {
      target: this,
      type: 'update'
    }, this);
  }

  if (remainSecond <= 0) {
    this.stop();
    this.emit('finish', {
      target: this,
      type: 'update'
    }, this);
  }
};

CountdownText.prototype.start = function () {
  this.resume();
};

CountdownText.prototype.resume = function () {
  if (this._intvId > 0) return;
  this._intvId = setInterval(this._tick, 1000 / this.fps);
};

CountdownText.prototype.pause = function () {
  if (this._intvId > 0) {
    clearInterval(this._intvId);
    this._intvId = -1;
  }
};

CountdownText.prototype.stop = function () {
  this.pause();
};

CountdownText.property = {};
CountdownText.property.format = {
  set: function set(value) {
    if (typeof value === "string" || typeof value === 'function') {
      this._format = value || 'HH:mm';
    } else {
      this._format = 'HH:mm';
    }
  },
  get: function get() {
    return this._format;
  }
};
CountdownText.property.remainSecond = {
  set: function set(value) {
    if (!(value >= 0)) {
      value = 0;
    }

    this.finishTime = new Date(new Date().getTime() + value);
  },
  get: function get() {
    if (this.finishTime !== null) {
      return Math.max(0, (this.finishTime.getTime() - new Date().getTime()) / 1000);
    } else return null;
  }
};
CountdownText.property.finishTime = {
  set: function set(value) {
    if (typeof value === "number" || typeof value === 'string') {
      value = new Date(value);
    }

    if (!value || !value.getTime) value = null;
    if (value && value.getTime && isNaN(value.getTime())) value = null;
    this._finishTime = value;
  },
  get: function get() {
    return this._finishTime;
  }
};
CountdownText.property.fps = {
  set: function set(value) {
    this._fps = isRealNumber(value) ? value : 200;

    if (this._intvId > 0) {
      clearInterval(this._intvId);
      this._intvId = setInterval(this._tick, 1000 / this._fps);
    }
  },
  get: function get() {
    return this._fps;
  }
};
absol_acomp_ACore.install(CountdownText);
/* harmony default export */ const js_CountdownText = (CountdownText);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LoadingCubeModal.js


/***
 * @extends Modal
 * @constructor
 */

function LoadingCubeModal() {}

LoadingCubeModal.tag = 'LoadingCubeModal'.toLowerCase();

LoadingCubeModal.render = function () {
  return ACore_({
    tag: 'modal',
    "class": 'as-loading-cube-modal',
    child: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: rgb(241, 242, 243); display: block; shape-rendering: auto;" width="200px" height="200px" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">\n' + '<g transform="translate(26.666666666666668,26.666666666666668)">\n' + '  <rect x="-20" y="-20" width="40" height="40" fill="#13a9df">\n' + '    <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="-0.3s"></animateTransform>\n' + '  </rect>\n' + '</g>\n' + '<g transform="translate(73.33333333333333,26.666666666666668)">\n' + '  <rect x="-20" y="-20" width="40" height="40" fill="#4be44c">\n' + '    <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="-0.2s"></animateTransform>\n' + '  </rect>\n' + '</g>\n' + '<g transform="translate(26.666666666666668,73.33333333333333)">\n' + '  <rect x="-20" y="-20" width="40" height="40" fill="#e2d58b">\n' + '    <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="0s"></animateTransform>\n' + '  </rect>\n' + '</g>\n' + '<g transform="translate(73.33333333333333,73.33333333333333)">\n' + '  <rect x="-20" y="-20" width="40" height="40" fill="#e1e7e7">\n' + '    <animateTransform attributeName="transform" type="scale" repeatCount="indefinite" dur="1s" keyTimes="0;1" values="1.1500000000000001;1" begin="-0.1s"></animateTransform>\n' + '  </rect>\n' + '</g>\n' + '</svg>'
  });
};

LoadingCubeModal.share = {
  token: null,
  $elt: null
};
/***
 *
 * @return {String}
 */

LoadingCubeModal.show = function () {
  if (!LoadingCubeModal.share.$elt) LoadingCubeModal.share.$elt = ACore_(LoadingCubeModal.tag);

  if (!LoadingCubeModal.share.$elt.isDescendantOf(document.body)) {
    document.body.appendChild(LoadingCubeModal.share.$elt);
  }

  LoadingCubeModal.share.token = randomIdent(9);
  return LoadingCubeModal.share.token;
};
/***
 *
 * @param {String} token
 * @return {Boolean}
 */


LoadingCubeModal.close = function (token) {
  if (LoadingCubeModal.share.$elt && LoadingCubeModal.share.$elt.isDescendantOf(document.body) && (!token || token === LoadingCubeModal.share.token)) {
    this.share.$elt.remove();
    LoadingCubeModal.share.token = null;
    return true;
  }

  return false;
};

absol_acomp_ACore.install(LoadingCubeModal);
/* harmony default export */ const js_LoadingCubeModal = (LoadingCubeModal);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreeleafmenu.css
var selecttreeleafmenu = __webpack_require__(4817);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeLeafBox.js








function isBranchStatus(status) {
  return status === 'open' || status === 'close';
}

function invertStatus(status) {
  return {
    open: 'close',
    close: 'open'
  }[status] || 'none';
}
/***
 * @extends Follower
 * @constructor
 */


function SelectTreeLeafBox() {
  this._initControl();

  this._searchCache = {};
  this._value = null;
  this._items = [];
  this.strictValue = true;
  this.$items = [];
  this.$itemByValue = {};
  this.$selectedItem = null;
  this.$dislayItems = this.$items;
  this.$dislayItemByValue = this.$itemByValue;
  this.$content = ACore_$('.as-select-tree-leaf-box-content', this);
  this._savedStatus = {};
  this.estimateSize = {
    width: 0,
    height: 0
  };
  if (this.cancelWaiting) this.cancelWaiting();
  /**
   * @name items
   * @memberof MSelectTreeLeafBox#
   * @type {Array}
   */

  /**
   * @name value
   * @memberof MSelectTreeLeafBox#
   */

  /**
   * @name strictMode
   * @type {boolean}
   * @memberof MSelectTreeLeafBox#
   */

  /**
   * @name selectedItem
   * @memberof MSelectTreeLeafBox#
   */
}

SelectTreeLeafBox.tag = 'SelectTreeLeafBox'.toLowerCase();

SelectTreeLeafBox.render = function () {
  return ACore_({
    tag: js_Follower,
    attr: {
      tabindex: 0
    },
    "class": ['as-select-tree-leaf-box', 'as-select-list-box'],
    extendEvent: ['pressitem'],
    child: [{
      "class": 'as-select-list-box-search-ctn',
      child: 'searchtextinput'
    }, {
      "class": ['as-bscroller', 'as-select-list-box-scroller', 'as-select-tree-leaf-box-content'],
      child: []
    }, 'attachhook.as-dom-signal'],
    props: {
      anchor: [1, 6, 2, 5]
    }
  });
};

SelectTreeLeafBox.prototype._initControl = function () {
  this.$searchInput = ACore_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify);
};

SelectTreeLeafBox.prototype.resetSearchState = function () {
  var value = this.$searchInput.value;

  if (value.length > 0) {
    this.$searchInput.value = '';

    if (value.trim().length) {
      this.$content.clearChild();
      this.$content.addChild(this.$items);
      this.$dislayItems = this.$items;
      this.$dislayItemByValue = this.$itemByValue;

      this._updateSelectedItem();
    }
  }
};

SelectTreeLeafBox.prototype._findFirstLeaf = function () {
  var found = false;

  function visit(item) {
    if (item.isLeaf) {
      found = item;
      return true;
    }

    if (item.items && item.items.length > 0) {
      item.items.some(visit);
    }

    return !!found;
  }

  this._items.some(visit);

  return found;
};

SelectTreeLeafBox.prototype._makeTree = function (item, dict, savedStatus) {
  var self = this;
  var status = 'none';
  var isLeaf = item.isLeaf;

  if (item.items && item.items.length > 0) {
    status = 'close';
  }

  if (isBranchStatus(status) && isBranchStatus(savedStatus[keyStringOf(item.value)])) {
    status = savedStatus[keyStringOf(item.value)];
  }

  var nodeElt = ACore_({
    tag: js_ExpTree.tag,
    "class": 'as-select-tree-leaf-item',
    props: {
      name: item.text,
      desc: item.desc,
      icon: item.icon,
      status: status,
      itemData: item
    },
    on: {
      'statuschange': this.updatePosition.bind(this)
    }
  });

  if (item.noSelect) {
    nodeElt.addClass('as-no-select');
  }

  nodeElt.getNode().on({
    press: function press(event) {
      if (isBranchStatus(nodeElt.status)) {
        nodeElt.status = invertStatus(nodeElt.status);
        savedStatus[keyStringOf(item.value)] = nodeElt.status;
        self.updatePosition();
      } else if (isLeaf && !item.noSelect) {
        self.emit('pressitem', {
          item: item,
          target: self,
          itemElt: nodeElt,
          originalEvent: event
        }, self);
      }
    }
  });

  if (dict) {
    if (dict[keyStringOf(item.value)] && !this.warned) {
      this.warned = true;
      console.warn(this, 'has duplicated value, element will not work correctly!', item);
    }

    dict[keyStringOf(item.value)] = nodeElt;
  }

  if (item.isLeaf) {
    nodeElt.addClass('as-is-leaf');
  }

  if (item.items && item.items.length > 0) {
    item.items.forEach(function (item1) {
      nodeElt.addChild(self._makeTree(item1, dict, savedStatus));
    });
  }

  return nodeElt;
};

SelectTreeLeafBox.prototype._estimateItemWidth = function (item, level) {
  var width = 12; //padding

  width += 12 * level;
  width += 14.7 + 5; //toggle icon

  if (item.icon) width += 21; //icon

  width += 7 + utils_estimateWidth14(item.text) + 5 + 7; //margin-text

  if (item.desc) width += 6 + utils_estimateWidth14(item.desc) * 0.85;
  return width;
};

SelectTreeLeafBox.prototype.viewToSelected = function () {
  var selectedNode = this.$selectedItem;
  if (!selectedNode) return;
  selectedNode.scrollIntoView();
  var parent = selectedNode.getParent();

  while (parent && parent.getParent) {
    if (parent.status === 'close') {
      parent.getNode().emit('press');
    }

    parent = parent.getParent();
  }
};

SelectTreeLeafBox.prototype._calcEstimateSize = function (items) {
  var self = this;
  var width = 0;
  var height = 0;

  function visit(item, level) {
    var itemWidth = self._estimateItemWidth(item, level);

    width = Math.max(width, itemWidth);
    height += 28;

    if (item.items && item.items.length) {
      item.items.forEach(function (item) {
        visit(item, level + 1);
      });
    }
  }

  items.forEach(function (item) {
    visit(item, 0);
  });
  return {
    width: width,
    height: height
  };
};

SelectTreeLeafBox.prototype._updateSelectedItem = function () {
  if (this.$selectedItem) {
    this.$selectedItem.removeClass('as-selected');
    this.$selectedItem = null;
  }

  this.$selectedItem = this.$dislayItemByValue[keyStringOf(this.value)];

  if (this.$selectedItem) {
    this.$selectedItem.addClass('as-selected');
  }
};

SelectTreeLeafBox.prototype.focus = js_SelectListBox.prototype.focus;
SelectTreeLeafBox.property = {};
SelectTreeLeafBox.eventHandler = {};
SelectTreeLeafBox.property.items = {
  /***
   * @this SelectTreeLeafBox
   * @param items
   */
  set: function set(items) {
    var self = this;
    this._savedStatus = {};
    this._searchCache = {};
    items = items || [];
    this._items = items;
    prepareSearchForList(items);
    this.$content.clearChild();
    this.$itemByValue = {};
    this.$dislayItemByValue = this.$itemByValue;
    this.$items = items.map(function (item) {
      return self._makeTree(item, self.$itemByValue, self._savedStatus);
    });
    this.$dislayItems = this.$items;
    this.$content.addChild(this.$items);
    this.estimateSize = this._calcEstimateSize(items);
    this.addStyle('--select-list-estimate-width', this.estimateSize.width + 'px');

    this._updateSelectedItem();

    self.updatePosition();
  },
  get: function get() {
    return this._items;
  }
};
SelectTreeLeafBox.property.value = {
  set: function set(value) {
    this._value = value;

    this._updateSelectedItem();
  },
  get: function get() {
    var firstLeaf;

    if (!this.strictValue || this.$itemByValue[keyStringOf(this._value)]) {
      return this._value;
    } else {
      firstLeaf = this._findFirstLeaf();
      if (firstLeaf) return firstLeaf.value;else return this._value;
    }
  }
};
SelectTreeLeafBox.property.selectedItem = {
  get: function get() {
    var key = keyStringOf(this._value);
    var firstLeaf;

    if (this.$itemByValue[key]) {
      return this.$itemByValue[key].itemData;
    } else if (!this.strictValue) {
      return null;
    } else {
      firstLeaf = this._findFirstLeaf();
      if (firstLeaf) return firstLeaf;else return null;
    }
  }
};
SelectTreeLeafBox.property.enableSearch = js_SelectListBox.property.enableSearch;

SelectTreeLeafBox.prototype._search = function (query) {
  var self = this;
  var queryItem = prepareSearchForItem({
    text: query
  });
  var minScore = Infinity;
  var maxScore = -Infinity;

  function makeScoreTree(item) {
    var holder = {
      item: item,
      score: calcItemMatchScore(queryItem, item),
      childrenScore: 0,
      children: []
    };
    minScore = Math.min(minScore, holder.score);
    maxScore = Math.max(maxScore, holder.score);
    var children;

    if (item.items && item.items.length > 0) {
      children = item.items.map(makeScoreTree);
      holder.children = children;
      holder.childrenScore = holder.children.reduce(function (ac, cr) {
        return Math.max(ac, cr.score, cr.childrenScore);
      }, 0);
    }

    return holder;
  }

  var treeScores = this._items.map(makeScoreTree);

  var midScore = (maxScore + minScore) / 2;
  var savedStatus = {};

  function filterTree(scoredTrees, ignore) {
    return scoredTrees.filter(function (holder) {
      return ignore || holder.score >= midScore || holder.childrenScore >= midScore;
    }).map(function makeTree(holder) {
      var item = Object.assign({}, holder.item);

      if (!ignore && holder.children && holder.children.length > 0) {
        if (holder.childrenScore >= midScore) {
          savedStatus[keyStringOf(item.value)] = 'open';
          item.items = filterTree(holder.children, false);
        } else {
          savedStatus[keyStringOf(item.value)] = 'close';
          item.items = filterTree(holder.children, true);
        }
      }

      return item;
    });
  }

  var resultItems = filterTree(treeScores, false);
  var dict = {};
  var $items = resultItems.map(function (item) {
    return self._makeTree(item, dict, savedStatus);
  });
  return {
    $items: $items,
    items: resultItems,
    savedStatus: Object.assign({}, savedStatus),
    originSavedStatus: savedStatus,
    dict: dict
  };
};
/***
 * @this SelectTreeLeafBox
 */


SelectTreeLeafBox.eventHandler.searchModify = function () {
  var query = this.$searchInput.value.trim();

  if (query.length === 0) {
    this.$content.clearChild().addChild(this.$items);
    this.$dislayItemByValue = this.$itemByValue;
    this.$dislayItems = this.$items;

    this._updateSelectedItem();

    this.updatePosition();
    return;
  }

  if (!this._searchCache[query]) {
    this._searchCache[query] = this._search(query);
  }

  var searchData = this._searchCache[query];
  searchData.savedStatus = Object.assign(searchData.savedStatus, searchData.originSavedStatus);
  console.log(searchData);

  for (var val in searchData.dict) {
    if (isBranchStatus(searchData.dict[val].status)) {
      if (searchData.savedStatus[val]) {
        searchData.dict[val].status = searchData.savedStatus[val];
      }
    }
  }

  this.$content.clearChild().addChild(searchData.$items);
  this.$dislayItemByValue = searchData.dict;
  this.$dislayItems = searchData.$items;

  this._updateSelectedItem();

  this.updatePosition();
};

absol_acomp_ACore.install(SelectTreeLeafBox);
/* harmony default export */ const js_SelectTreeLeafBox = (SelectTreeLeafBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreeeleafbox.css
var selecttreeeleafbox = __webpack_require__(7535);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTIPropHandlers.js

var CTIPropHandlers = {};
CTIPropHandlers.data = {
  /***
   * @this MCheckTreeItem|CheckTreeItem
   * @param data
   */
  set: function set(data) {
    this._data = data;

    this._updateData();
  },
  get: function get() {
    return this._data;
  }
};
CTIPropHandlers.text = {
  get: function get() {
    if (!this._data) return '';
    if (this._data.charAt) return this._data;
    var text = this._data.text;
    if (text === undefined || text === null) return '';
    return this._data.text + '';
  }
};
CTIPropHandlers.value = {
  get: function get() {
    if (!this._data) return null;
    if (this._data.charAt) return this._data;
    return this._data.value;
  }
};
CTIPropHandlers.desc = {
  get: function get() {
    if (!this._data) return '';
    var desc = this._data.desc;
    if (desc === undefined || desc === null) return '';
    return desc + '';
  }
};
CTIPropHandlers.level = {
  set: function set(value) {
    if (!isNaturalNumber(value)) value = 0;
    this._level = value;
    this.addStyle('--level', value + '');
  },
  get: function get() {
    return this._level;
  }
};
CTIPropHandlers.status = {
  set: function set(value) {
    value = value === 'open' || value === 'close' ? value : 'none';
    this._status = value;
    this.removeClass('as-status-open').removeClass('as-status-close');

    if (value !== "none") {
      this.addClass('as-status-' + value);
    }
  },
  get: function get() {
    return this._status || 'none';
  }
};
CTIPropHandlers.selected = {
  set: function set(value) {
    if (value === 'all') {
      this.$checkbox.checked = true;
      this.$checkbox.removeClass('as-has-minus');
    } else if (value === 'child') {
      this.$checkbox.checked = false;
      this.$checkbox.addClass('as-has-minus');
    } else {
      this.$checkbox.checked = false;
      this.$checkbox.removeClass('as-has-minus');
    }
  },
  get: function get() {
    if (this.$checkbox.checked) {
      return 'all';
    } else {
      if (this.$checkbox.hasClass('as-has-minus')) {
        return 'child';
      } else {
        return 'none';
      }
    }
  }
};
CTIPropHandlers.hasLeaf = {
  set: function set(value) {
    if (value) {
      this.addClass('as-has-leaf');
    } else {
      this.removeClass('as-has-leaf');
    }
  },
  get: function get() {
    return this.hasClass('as-has-leaf');
  }
};
CTIPropHandlers.noSelect = {
  set: function set(value) {
    if (value) {
      this.addClass('as-no-select');
    } else {
      this.removeClass('as-no-select');
    }

    this.$checkbox.disabled = !!value;
  },
  get: function get() {
    return this.hasClass('as-no-select');
  }
};
/* harmony default export */ const checktreebox_CTIPropHandlers = (CTIPropHandlers);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/STLIPropHandlers.js

var STLIPropHandlers = {};
STLIPropHandlers.data = {
  set: function set(data) {
    this._data = data;

    this._updateData();
  },
  get: function get() {
    return this._data;
  }
};
STLIPropHandlers.text = {
  get: function get() {
    var data = this._data;
    if (data === undefined || data === null) return '';
    if (typeof data === 'string') return data;
    if (data && data.text) return data.text + '';
    return data + '';
  }
};
STLIPropHandlers.value = {
  get: function get() {
    var data = this._data;
    if (data === undefined || data === null) return data;
    if (data && 'value' in data) return data.value;
    return data;
  }
};
STLIPropHandlers.level = checktreebox_CTIPropHandlers.level;
STLIPropHandlers.status = checktreebox_CTIPropHandlers.status;
STLIPropHandlers.selected = {
  set: function set(value) {
    if (value) {
      this.addClass('as-selected');
    } else {
      this.removeClass('as-selected');
    }
  },
  get: function get() {
    return this.hasClass('as-selected');
  }
};
/****
 * @name text
 * @type {string}
 * @memberOf SelectTreeLeafItem#
 */

/****
 * @name value
 * @type {string|number}
 * @memberOf SelectTreeLeafItem#
 */

/****
 * @name data
 * @type {*}
 * @memberOf SelectTreeLeafItem#
 */

/****
 * @name selected
 * @type {boolean}
 * @memberOf SelectTreeLeafItem#
 */

/* harmony default export */ const selecttreeleafbox_STLIPropHandlers = (STLIPropHandlers);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/SelectTreeLeafItem.js




/***
 * @extends AElement
 * @constructor
 */

function SelectTreeLeafItem() {
  this.$text = ACore_$('.am-select-tree-leaf-item-text', this);
  this.$desc = ACore_$('.am-select-tree-leaf-item-desc', this);
  this.$iconCtn = ACore_$('.am-select-tree-leaf-item-icon-ctn', this);
  this.addEventListener('click', this.eventHandler.click);
}

SelectTreeLeafItem.tag = 'SelectTreeLeafItem'.toLowerCase();

SelectTreeLeafItem.render = function () {
  return ACore_({
    extendEvent: ['click', 'statuschange'],
    "class": ['am-select-tree-leaf-item', 'am-dropdown-box-item'],
    child: [{
      "class": 'am-select-tree-leaf-item-toggle-ctn',
      child: 'toggler-ico'
    }, {
      "class": 'am-select-tree-leaf-item-icon-ctn'
    }, {
      "class": 'am-select-tree-leaf-item-text',
      child: {
        text: ''
      }
    }, {
      "class": 'am-select-tree-leaf-item-desc',
      child: {
        text: ''
      }
    }]
  });
};

SelectTreeLeafItem.prototype._updateData = function () {
  this.$text.firstChild.data = this.text;
  this.attr('data-key', keyStringOf(this.value));
  this.$iconCtn.clearChild();
  var icon = this.data && this.data.icon;

  if (icon) {
    icon = ACore_(icon);
    if (icon.parentElement) icon = ACore_$(icon.cloneNode(true));
    this.$iconCtn.addChild(icon);
    this.addClass('as-has-icon');
  } else {
    this.removeClass('as-has-icon');
  }

  if (this.data && this.data.isLeaf) {
    this.addClass('as-is-leaf');
  } else {
    this.removeClass('as-is-leaf');
  }
};

SelectTreeLeafItem.property = selecttreeleafbox_STLIPropHandlers;
SelectTreeLeafItem.eventHandler = {};

SelectTreeLeafItem.eventHandler.click = function (event) {
  if (this._data && this._data.isLeaf) {
    this.emit('click', {
      type: 'click',
      target: this,
      originalEvent: event
    }, this);
  } else {
    if (this.status !== 'none') {
      this.status = this.status === 'open' ? 'close' : 'open';
      this.emit('statuschange', {
        type: 'statuschange',
        target: this,
        originalEvent: event
      }, this);
    }
  }
};

/* harmony default export */ const selecttreeleafbox_SelectTreeLeafItem = (SelectTreeLeafItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dropdownbox.css
var dropdownbox = __webpack_require__(6795);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTBPropHandlers.js
var CTBPropHandlers = {};
CTBPropHandlers.items = {
  /***
   * @this MCheckTreeBox
   * @param items
   */
  set: function set(items) {
    this.itemListCtrl.setItems(items);
    var values = this.pendingValues || this.values;
    this.modes.normal.setValues(values);

    if (this.mode !== this.modes.normal) {
      this.mode.updateSelectedFromRef();
    }
  },
  get: function get() {
    return this.itemListCtrl.getItems();
  }
};
CTBPropHandlers.values = {
  /***
   * @this CheckTreeBox|MCheckTreeBox
   * @param values
   */
  set: function set(values) {
    this.pendingValues = values || [];
    this.modes.normal.setValues(values);

    if (this.mode !== this.modes.normal) {
      this.mode.updateSelectedFromRef();
    }
  },
  get: function get() {
    return this.modes.normal.getValues();
  }
};
CTBPropHandlers.viewValues = {
  get: function get() {
    return this.modes.normal.getViewValues();
  }
};
CTBPropHandlers.enableSearch = {
  /***
   * @this CheckTreeBox|MCheckTreeBox
   * @param value
   */
  set: function set(value) {
    if (value) {
      this.$box.addClass('as-enable-search');
    } else {
      this.$box.removeClass('as-enable-search');
    }
  },
  get: function get() {
    return this.$box.hasClass('as-enable-search');
  }
};
CTBPropHandlers.leafOnly = {
  /***
   * @this CheckTreeBox|MCheckTreeBox
   * @param value
   */
  set: function set(value) {
    if (value) {
      this.$box.addClass('as-leaf-only');
    } else {
      this.$box.removeClass('as-leaf-only');
    }

    var values = this.pendingValues || this.values;
    this.modes.normal.setValues(values);
  },
  get: function get() {
    return this.$box.hasClass('as-leaf-only');
  }
};
/* harmony default export */ const checktreebox_CTBPropHandlers = (CTBPropHandlers);
/***
 *
 * @type {boolean}
 * @name enableSearch
 * @memberOf MCheckTreeBox#
 */
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTBModes.js

/***
 *
 * @param {MCheckTreeBox} elt
 * @param {[]} items
 * @constructor
 */

function CTBModeNormal(elt, items) {
  var _this = this;

  this.level = -1;
  this.selected = 'none';
  this.elt = elt;
  this.$list = this.elt.$list;
  /***
   *
   * @type {MCTBItemHolder[]}
   */

  this.children = items.map(function (item) {
    return new _this.elt.classes.ItemHolder(elt, _this, item);
  });
  this.hasLeaf = this.children.some(function (holder) {
    return holder.hasLeaf;
  });
  this.hasNoSelect = this.children.some(function (holder) {
    return holder.hasNoSelect;
  });
  this.hasDesc = this.children.some(function (holder) {
    return holder.hasDesc;
  });
  this.hasIcon = this.children.some(function (holder) {
    return holder.hasIcon;
  });

  if (this.hasLeaf) {
    this.elt.addClass('as-has-leaf');
  } else {
    this.elt.removeClass('as-has-leaf');
  }

  if (this.hasNoSelect) {
    this.elt.addClass('as-has-no-select');
    this.elt.$chekAll.disabled = true;
  } else {
    this.elt.removeClass('as-has-no-select');
    this.elt.$chekAll.disabled = false;
  }

  this.dict = this.children.reduce(function visit(ac, child) {
    var key = keyStringOf(child.data.value);

    if (ac[key]) {
      console.error('Duplicate value:', ac[key].data, child.data);
    }

    ac[key] = child;

    if (child.children) {
      child.children.reduce(visit, ac);
    }

    return ac;
  }, {});
}

CTBModeNormal.prototype.onStart = function () {
  this.$list.clearChild();
  var rootHolders = this.children;
  var viewElements = [];
  rootHolders.forEach(function (holder) {
    holder.getViewElements(viewElements);
  }, []);
  this.$list.addChild(viewElements);
};

CTBModeNormal.prototype.onStop = function () {};

CTBModeNormal.prototype.updateUp = function () {
  var selected = {
    child: 0,
    all: 0,
    none: 0
    /*dont: 0*/

  };
  var childN = this.children.length;
  this.children.reduce(function (ac, child) {
    ac[child.selected]++;
    return ac;
  }, selected);

  if (childN === selected.all) {
    this.selected = 'all';
  } else if (childN === selected.none) {
    this.selected = "none";
  } else {
    this.selected = 'child';
  }

  this.elt.$chekAll.checked = this.selected === 'all';
};

CTBModeNormal.prototype.select = function (flag) {
  this.children.forEach(function (child) {
    return child.select(flag, true);
  });
  this.updateUp();
};

CTBModeNormal.prototype.getHolderByValue = function (value) {
  return this.dict[keyStringOf(value)] || null;
};

CTBModeNormal.prototype.setValues = function (values) {
  var _this2 = this;

  this.children.forEach(function (node) {
    return node.select(false);
  });
  values.forEach(function (value) {
    var holder = _this2.getHolderByValue(value);

    if (holder) holder.select(true);
  });
};

CTBModeNormal.prototype.getValues = function () {
  var values = [];
  var leafOnly = this.elt.leafOnly;
  this.children.forEach(function visit(node) {
    if (node.selected === 'all' && !node.hasNoSelect) {
      if (leafOnly) {
        if (node.data.isLeaf) {
          values.push(node.data.value);
        } else if (node.data.items) {
          node.data.items.forEach(function visitLeaf(item) {
            if (item.isLeaf) {
              values.push(item.value);
            } else if (item.items) {
              item.items.forEach(visitLeaf);
            }
          });
        }
      } else {
        values.push(node.data.value);
      }
    } else if (node.children) {
      node.children.forEach(visit);
    }
  });
  return values;
};

CTBModeNormal.prototype.getViewValues = function () {
  var values = [];
  this.children.forEach(function visit(node) {
    if (node.selected === 'all' && !node.hasNoSelect) {
      values.push(node.data.value);
    } else if (node.children) {
      node.children.forEach(visit);
    }
  });
  return values;
};
/***
 *
 * @param {MCheckTreeBox} elt
 * @param {[]} items
 * @constructor
 */


function CTBModeSearch(elt, items) {
  var _this3 = this;

  this.level = -1;
  this.selected = 'none';
  this.elt = elt;
  this.$list = this.elt.$list;
  this.children = items.map(function (item) {
    return new _this3.elt.classes.ItemHolder(elt, _this3, item);
  });
}

CTBModeSearch.prototype.onStart = function () {
  CTBModeNormal.prototype.onStart.call(this);
  this.updateSelectedFromRef();
};

CTBModeSearch.prototype.onStop = function () {};

CTBModeSearch.prototype.updateSelectedFromRef = function () {
  var normalMode = this.elt.modes.normal;
  this.children.forEach(function visit(holder) {
    holder.selected = holder.ref.selected;

    if (holder._elt) {
      holder._elt.selected = holder.selected;
    }

    if (holder.children) holder.children.forEach(visit);
  });
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/ListDictionary.js
/***
 *
 * @param {SelectionItem[]} arr
 * @constructor
 */


function ItemDictionary(arr, opt) {
  this.opt = Object.assign({
    depth: true
  }, opt || {});
  this.arr = arr;
  this.dict = {};
  this.dupKeys = [];
  this.update();
}

ItemDictionary.prototype.update = function () {
  this.dict = {};
  var dict = this.dict;
  var depth = this.opt.depth;
  var dupKeyDict = {};

  function scan(arr) {
    var item;
    var key;

    for (var i = 0; i < arr.length; ++i) {
      item = arr[i];
      key = keyStringOf(item.value);

      if (dict[key]) {
        dict[key].dupItems = dict[key].dupItems || [];
        dict[key].dupItems.push(item);
        dupKeyDict[key] = 1;
      } else {
        dict[key] = {
          idx: i,
          item: item
        };
      }

      if (depth && item.items && item.items.length > 0) {
        scan(item.items);
      }
    }
  }

  scan(this.arr);
  this.dupKeys = Object.keys(dupKeyDict);
};
/***
 *
 * @param {String | Number} value
 * @returns {SelectionItem | null}
 */


ItemDictionary.prototype.getItemByValue = function (value) {
  var iDict = this.dict[keyStringOf(value)];
  if (iDict) return iDict.item;
  return null;
};
/***
 *
 * @param {String | Number} value
 * @returns {Array<SelectionItem> }
 */


ItemDictionary.prototype.getAllItemByValue = function (value) {
  var key = keyStringOf(value);
  var iDict = this.dict[key];
  if (iDict) return [iDict.item].concat(iDict.dupItems[key] || []);
  return [];
};

ItemDictionary.prototype.getDuplicateKeys = function () {
  return this.dupKeys;
};

/* harmony default export */ const ListDictionary = (ItemDictionary);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/MCheckTreeBox.js












/***
 * not optimize
 * @param {MCheckTreeBox} elt
 * @constructor
 */

function MCTBItemListController(elt) {
  this.elt = elt;
}

HTML5_OOP.mixClass(MCTBItemListController, ListDictionary);

MCTBItemListController.prototype.setItems = function (items) {
  items = items || [];
  if (!items.forEach || !items.map) items = [];
  this.items = copySelectionItemArray(items, {
    removeNoView: true
  });
  this.update();
};

MCTBItemListController.prototype.update = function () {
  var mode = new this.elt.classes.ModeNormal(this.elt, this.items);
  this.elt.modes.normal = mode;

  if (mode.hasDesc) {
    this.elt.$list.addClass('as-has-desc');
  } else {
    this.elt.$list.removeClass('as-has-desc');
  }

  if (mode.hasIcon) {
    this.elt.$list.addClass('as-has-icon');
  } else {
    this.elt.$list.removeClass('as-has-icon');
  }

  this.elt.mode = mode;
  mode.onStart();
  this._searchItems = prepareSearchForList(copySelectionItemArray(this.items));
  this._searchCache = {};
};

MCTBItemListController.prototype.getItems = function () {
  return copySelectionItemArray(this.items);
};

MCTBItemListController.prototype.makeSearch = function (query) {
  if (this._searchCache[query]) return this._searchCache[query].resetAndGet();
  var searchItem = prepareSearchForItem({
    text: query
  });
  var minScore = Infinity;
  var maxScore = -Infinity;

  var scoredHolders = this._searchItems.map(function visit(item) {
    var holder = {
      item: item,
      score: calcItemMatchScore(searchItem, item),
      childMaxScore: -Infinity
    };
    minScore = Math.min(minScore, holder.score);
    maxScore = Math.max(maxScore, holder.score);

    if (item.items && item.items.length > 0) {
      holder.children = item.items.map(visit);
      holder.childMaxScore = holder.children.reduce(function (ac, cr) {
        return Math.max(ac, cr.score, cr.childMaxScore);
      }, 0);
    }

    return holder;
  });

  var threshHold = maxScore - (maxScore - minScore) / 3;
  var result = scoredHolders.reduce(function filterVisit(ac, cr) {
    var subItems;

    if (Math.max(cr.score, cr.childMaxScore) >= threshHold) {
      ac.items.push(cr.item);

      if (cr.children && cr.childMaxScore >= cr.score) {
        ac.status[keyStringOf(cr.item.value)] = 'open';
        subItems = cr.children.reduce(filterVisit, {
          items: [],
          status: ac.status
        }).items;
        cr.item.items = subItems;
      } else {
        if (cr.children && cr.children.length > 0) {
          ac.status[keyStringOf(cr.item.value)] = 'open';
        }
      }
    }

    return ac;
  }, {
    items: [],
    status: {}
  });
  var normalMode = this.elt.modes.normal;
  result.mode = new this.elt.classes.ModeSearch(this.elt, result.items);

  result.resetAndGet = function () {
    this.mode.children && this.mode.children.forEach(function resetVisit(holder) {
      var key = keyStringOf(holder.data.value);
      holder.ref = normalMode.getHolderByValue(holder.data.value);

      if (holder.status === 'open' && result.status[key] !== 'open') {
        holder.status = 'close';

        if (holder._elt) {
          holder._elt.status = 'close';
        }
      } else if (holder.status === 'close' && result.status[key] === 'open') {
        holder.status = 'open';

        if (holder._elt) {
          holder._elt.status = 'open';
        }
      }

      if (holder.children) holder.children.forEach(resetVisit);
    });
    return this.mode;
  };

  this._searchCache[query] = result;
  return result.resetAndGet();
};
/***
 * @extends AElement
 * @constructor
 */


function MCheckTreeItem() {
  this._data = null;
  this._status = 'none';
  this.$text = ACore_$('.am-check-tree-item-text', this).firstChild;
  this.$desc = ACore_$('.am-check-tree-item-desc', this).firstChild;
  this.$iconCtn = ACore_$('.am-check-tree-item-icon-ctn', this);
  this.$checkbox = ACore_$('checkboxinput', this).on('change', this.eventHandler.checkboxChange);
  this.addEventListener('click', this.eventHandler.click);
}
MCheckTreeItem.tag = 'MCheckTreeItem'.toLowerCase();

MCheckTreeItem.render = function () {
  return ACore_({
    extendEvent: ['checkedchange', 'click', 'statuschange'],
    "class": ['am-check-tree-item', 'am-dropdown-box-item'],
    child: [{
      "class": 'am-check-tree-item-toggle-ctn',
      child: 'toggler-ico'
    }, {
      "class": 'am-check-tree-item-icon-ctn'
    }, {
      "class": 'am-check-tree-item-checkbox-ctn',
      child: 'checkboxinput'
    }, {
      "class": 'am-check-tree-item-text',
      child: {
        text: ''
      }
    }, {
      "class": 'am-check-tree-item-desc',
      child: {
        text: ''
      }
    }]
  });
};

MCheckTreeItem.prototype._updateData = function () {
  this.$text.data = this.text;
  this.$desc.data = this.desc;
  this.$iconCtn.clearChild();
  this.$icon = null;
  this.attr('data-key', keyStringOf(this.value));

  if (this._data && this._data.icon) {
    this.$icon = ACore_(this._data.icon);

    if (this.$icon.parentElement) {
      this.$icon = this.$icon.cloneNode(true);
    }

    this.$iconCtn.addChild(this.$icon);
    this.addClass('as-has-icon');
  } else {
    this.removeClass('as-has-icon');
  }

  if (this._data && this._data.isLeaf) {
    this.addClass('as-is-leaf');
  } else {
    this.removeClass('as-is-leaf');
  }
};

MCheckTreeItem.eventHandler = {};

MCheckTreeItem.eventHandler.click = function (event) {
  if (hitElement(this.$checkbox, event)) return;
  var checkboxBound = this.$checkbox.getBoundingClientRect();
  var canCheck = this.$checkbox.getComputedStyleValue('pointer-events') !== 'none' && !this.$checkbox.disabled && checkboxBound.width > 0;

  if (this.status === 'none' && canCheck) {
    this.$checkbox.checked = !this.$checkbox.checked;
    this.$checkbox.notifyChange();
  } else if (this.status !== 'none') {
    if (!checkboxBound.width) {
      checkboxBound = this.$iconCtn.getBoundingClientRect();
    }

    if (!checkboxBound.width) {
      checkboxBound = {
        left: this.getBoundingClientRect().left + parseFloat(this.$text.parentElement.getComputedStyleValue('padding-left').replace('px'))
      };
    }

    if (event.clientX < checkboxBound.left || !canCheck) {
      this.status = this.status === 'open' ? 'close' : 'open';
      this.emit('statuschange', {
        type: 'statuschange',
        target: this
      }, this);
    } else if (canCheck) {
      this.$checkbox.checked = !this.$checkbox.checked;
      this.$checkbox.notifyChange();
    }
  }
};

MCheckTreeItem.eventHandler.checkboxChange = function () {
  this.emit('checkedchange', {
    type: 'checkedchange'
  }, this);
};

MCheckTreeItem.property = checktreebox_CTIPropHandlers;
/***
 * @name data
 * @memberOf MCheckTreeItem#
 */

/***
 * @name text
 * @type {string}
 * @memberOf MCheckTreeItem#
 */

/***
 * @name desc
 * @type {string}
 * @memberOf MCheckTreeItem#
 */

/***
 * @name value
 * @memberOf MCheckTreeItem#
 */

/***
 * @extends AElement
 * @constructor
 */

function MCheckTreeBox() {
  this.$box = ACore_$('.am-check-tree-box', this);
  this.$body = ACore_$('.am-check-tree-box-body', this);
  this.$list = ACore_$('.am-check-tree-box-list', this);
  this.$chekAll = ACore_$('.as-select-list-box-check-all', this).on('change', function () {
    this.modes.normal.select(this.$chekAll.checked);
    if (this.mode.updateSelectedFromRef) this.mode.updateSelectedFromRef();
    this.notifyChange();
  }.bind(this));
  this.$searchInput = ACore_$(Searcher.tag, this).on('stoptyping', this.eventHandler.searchTextInputModify);
  this.$cancelBtn = ACore_$('.as-select-list-box-cancel-btn', this).on('click', function () {
    this.emit('cancel', {
      type: 'cancel',
      target: this
    }, this);
  }.bind(this));
  this.$closeBtn = ACore_$('.as-select-list-box-close-btn', this);
  this.$boxCloseBtn = ACore_$('.am-dropdown-box-close-btn', this);
  this.on('click', function (event) {
    if (event.target === this || hitElement(this.$closeBtn, event) || hitElement(this.$boxCloseBtn, event)) {
      this.emit('close', {
        type: 'close',
        target: this
      }, this);
    }
  }.bind(this));
  this.pendingValues = null;
  this.modes = {
    normal: new this.classes.ModeNormal(this, [])
  };
  /***
   *
   * @type {CTBModeNormal | CTBModeSearch}
   */

  this.mode = this.modes.normal;
  this.itemListCtrl = new this.classes.ListController(this);
}

MCheckTreeBox.prototype.classes = {
  ListController: MCTBItemListController,
  ModeSearch: CTBModeSearch,
  ModeNormal: CTBModeNormal,
  ItemHolder: MCTBItemHolder,
  ItemElement: MCheckTreeItem
};
MCheckTreeBox.tag = 'MCheckTreeBox'.toLowerCase();

MCheckTreeBox.render = function () {
  return ACore_({
    extendEvent: ['change', 'close', 'cancel'],
    "class": ['am-modal', 'am-dropdown-box-modal'],
    child: {
      "class": ['am-check-tree-box', 'am-dropdown-box', 'as-dropdown-box-common-style'],
      child: [{
        "class": 'am-dropdown-box-header',
        child: [{
          tag: Searcher.tag
        }, {
          tag: 'button',
          "class": 'am-dropdown-box-close-btn',
          child: 'span.mdi.mdi-close'
        }]
      }, {
        "class": ['am-dropdown-box-body', 'am-check-tree-box-body'],
        child: {
          "class": 'am-check-tree-box-list'
        }
      }, {
        "class": 'as-dropdown-box-footer',
        child: [{
          tag: 'checkbox',
          "class": 'as-select-list-box-check-all',
          props: {
            checked: false,
            text: HTML5_LanguageSystem.getText('txt_check_all') || HTML5_LanguageSystem.getText('txt_all') || 'Check All'
          }
        }, {
          "class": 'as-dropdown-box-footer-right',
          child: [{
            tag: 'a',
            "class": 'as-select-list-box-cancel-btn',
            attr: {
              "data-ml-key": 'txt_cancel'
            }
          }, {
            tag: 'a',
            "class": 'as-select-list-box-close-btn',
            attr: {
              "data-ml-key": 'txt_close'
            }
          }]
        }]
      }]
    }
  });
};

MCheckTreeBox.prototype.getHolderByValue = function (value) {
  return this.modes.normal.getHolderByValue(value);
};

MCheckTreeBox.prototype.select = function (value, flag) {
  var holder = this.modes.normal.getHolderByValue(value);

  if (holder) {
    holder.select(flag);

    if (this.mode !== this.modes.normal) {
      this.mode.updateSelectedFromRef();
    }

    return true;
  }

  return false;
};

MCheckTreeBox.prototype.getItemByValue = function (value) {
  var holder = this.modes.normal.getHolderByValue(value);
  if (holder) return holder.data;
  return null;
};

MCheckTreeBox.prototype.focus = function () {
  if (this.enableSearch) {
    this.$searchInput.focus();
  }
};

MCheckTreeBox.prototype.resetSearchState = function () {
  this.$searchInput.value = '';
  this.eventHandler.searchTextInputModify();
};

MCheckTreeBox.prototype.notifyChange = function () {
  this.pendingValues = null;
  this.emit('change', {
    type: 'change',
    target: this
  }, this);
};
/***
 * @name eventHandler
 * @type {{}}
 * @memberOf MCheckTreeBox#
 */


MCheckTreeBox.eventHandler = {};

MCheckTreeBox.eventHandler.searchTextInputModify = function () {
  var query = this.$searchInput.value.trim().replace(/\s+/g, ' ');

  if (query.length > 0) {
    if (this.mode === this.modes.normal) {
      this.mode.onStop();
    }

    this.mode.search = this.itemListCtrl.makeSearch(query);
    this.mode = this.mode.search;
    this.mode.onStart();
  } else {
    if (this.mode !== this.modes.normal) {
      this.mode.onStop();
      this.mode = this.modes.normal;
      this.mode.onStart();
    }
  }
};

MCheckTreeBox.property = checktreebox_CTBPropHandlers;
/* harmony default export */ const checktreebox_MCheckTreeBox = (MCheckTreeBox);
/*********************************** ADAPT OLD VERSION ***************************************************************/

MCheckTreeBox.prototype.findItemHoldersByValue = function (value) {
  var holder = this.getHolderByValue(value);

  if (holder) {
    return [holder];
  } else {
    return [];
  }
};
/***
 *
 * @param {MCheckTreeBox} boxElt
 * @param {MCTBItemHolder|CTBModeNormal|CTBModeSearch}parent
 * @param data
 * @constructor
 */


function MCTBItemHolder(boxElt, parent, data) {
  var _this = this;

  this.ref = null;
  this.boxElt = boxElt;
  this.$list = this.boxElt.$list;
  this.data = data;
  this.parent = parent;
  this.level = parent ? parent.level + 1 : 0;
  this._elt = null;
  this.children = null;
  this.hasIcon = !!data.icon;
  this.hasDesc = !!data.desc;
  this.status = 'none';
  this.selected = 'none';
  this.hasLeaf = data.isLeaf;
  this.noSelect = data.noSelect;
  this.hasNoSelect = this.noSelect;

  if (data.items && data.items.map && data.items.length > 0) {
    this.children = data.items.map(function (it) {
      return new MCTBItemHolder(boxElt, _this, it);
    });
    this.hasIcon = this.hasIcon || this.children.some(function (child) {
      return child.hasIcon;
    });
    this.hasDesc = this.hasDesc || this.children.some(function (child) {
      return child.hasDesc;
    });
    this.hasLeaf = this.hasLeaf || this.children.some(function (child) {
      return child.hasLeaf;
    });
    this.hasNoSelect = this.hasNoSelect || this.children.some(function (child) {
      return child.hasNoSelect;
    });
    this.status = 'close';
  }
}

MCTBItemHolder.prototype.getViewElements = function (ac) {
  ac = ac || [];
  ac.push(this.elt);

  if (this.status === 'open' && this.children) {
    this.children.forEach(function (child) {
      return child.getViewElements(ac);
    });
  }

  return ac;
};

Object.defineProperty(MCTBItemHolder.prototype, 'elt', {
  get: function get() {
    if (!this._elt) {
      this._elt = ACore_({
        tag: this.boxElt.classes.ItemElement,
        props: {
          data: this.data,
          level: this.level,
          status: this.status,
          selected: this.selected,
          hasLeaf: this.hasLeaf,
          noSelect: this.hasNoSelect
        },
        on: {
          checkedchange: this.ev_checkedChange.bind(this),
          statuschange: this.ev_statusChange.bind(this)
        }
      });
    }

    return this._elt;
  }
});

MCTBItemHolder.prototype.ev_checkedChange = function () {
  var selected = this._elt.selected;

  if (this.ref) {
    if (selected === 'all') {
      this.ref.select(true);
    } else {
      this.ref.select(false);
    }

    this.getRoot().updateSelectedFromRef();
  } else {
    if (selected === 'all') {
      this.select(true);
    } else {
      this.select(false);
    }
  }

  this.boxElt.notifyChange();
};

MCTBItemHolder.prototype.ev_statusChange = function () {
  if (this._elt.status === this.status) return;
  var viewElements;

  if (this.status === 'open') {
    viewElements = this.getViewElements();
    viewElements.shift();
    viewElements.forEach(function (elt) {
      elt.remove();
    });
    this.status = this._elt.status;
  } else if (this.status === 'close') {
    this.status = this._elt.status;
    viewElements = this.getViewElements();
    viewElements.shift();
    addElementAfter(this.$list, viewElements, this._elt);
  }
};

MCTBItemHolder.prototype.updateUp = function () {
  var selected = {
    child: 0,
    all: 0,
    none: 0
    /*dont: 0*/

  };
  var childN = this.children.length;
  this.children.reduce(function (ac, child) {
    ac[child.selected]++;
    return ac;
  }, selected);

  if (childN === selected.all) {
    this.selected = 'all';
  } else if (childN === selected.none) {
    this.selected = "none";
  } else {
    this.selected = 'child';
  }

  if (this._elt) {
    this._elt.selected = this.selected;
  }

  if (this.parent) this.parent.updateUp();
};

MCTBItemHolder.prototype.select = function (flag, isDownUpdate) {
  var leafOnly = this.boxElt.leafOnly;
  if (flag && leafOnly && !this.hasLeaf) return;
  var selected = {
    child: 0,
    all: 0,
    none: 0,
    exclude: 0
    /*dont: 0*/

  };
  var childN = 0;

  if (this.children && this.children.length > 0) {
    childN = this.children.length;
    this.children.reduce(function (ac, child) {
      child.select(flag, true);

      if (leafOnly && !child.hasLeaf) {
        ac.exclude++;
      } else {
        ac[child.selected]++;
      }

      return ac;
    }, selected);

    if (leafOnly) {
      if (this.hasLeaf) {
        if (childN === selected.all + selected.exclude) {
          this.selected = 'all';
        } else if (selected.all + selected.child > 0) {
          this.selected = 'child';
        } else {
          this.selected = 'none';
        }
      } else {
        this.selected = "none";
      }
    } else {
      if (childN === selected.all) {
        this.selected = 'all';
      } else if (childN === selected.none) {
        this.selected = "none";
      } else {
        this.selected = 'child';
      }
    }
  } else {
    if (flag && (!leafOnly || this.hasLeaf)) {
      this.selected = 'all';
    } else {
      this.selected = 'none';
    }
  }

  if (this._elt) {
    this._elt.selected = this.selected;
  }

  if (!isDownUpdate && this.parent) {
    this.parent.updateUp();
  }
};

MCTBItemHolder.prototype.getRoot = function () {
  var c = this;

  while (c.parent) {
    c = c.parent;
  }

  return c;
};
/*********************************** ADAPT OLD VERSION ***************************************************************/


Object.defineProperty(MCTBItemHolder.prototype, 'item', {
  get: function get() {
    return this.data;
  }
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/MSTBItemHolder.js




function MSTBItemHolder(boxElt, parent, data) {
  var _this = this;

  this.ref = null;
  this.$list = boxElt.$list;
  this.level = parent.level + 1;
  this.status = 'none';
  this.boxElt = boxElt;
  this.parent = parent;
  this.data = data;
  this._elt = null;
  this.hasDesc = !!data.desc;
  this.hasIcon = !!data.icon;
  this.selected = false;

  if (data.items && data.items.length > 0) {
    this.children = data.items.map(function (item) {
      return new MSTBItemHolder(boxElt, _this, item);
    });
    this.hasDesc = this.hasDesc || this.children.some(function (child) {
      return child.hasDesc;
    });
    this.hasIcon = this.hasIcon || this.children.some(function (child) {
      return child.hasIcon;
    });
    this.status = 'close';
  }
}

MSTBItemHolder.prototype.ev_statusChange = MCTBItemHolder.prototype.ev_statusChange;
MSTBItemHolder.prototype.getViewElements = MCTBItemHolder.prototype.getViewElements;

MSTBItemHolder.prototype.select = function (flag) {
  this.selected = flag;

  if (this._elt) {
    this._elt.selected = flag;
  }
};

MSTBItemHolder.prototype.ev_click = function (event) {
  if (this.ref) {
    this.ref.ev_click(event);
  } else {
    this.boxElt.modes.normal.setValue(this.data.value);

    if (this.boxElt.mode !== this.boxElt.modes.normal) {
      this.boxElt.mode.updateSelectedFromRef();
    }

    this.boxElt.notifyPressItem({
      item: this.data
    });
  }
};

Object.defineProperty(MSTBItemHolder.prototype, 'elt', {
  get: function get() {
    if (!this._elt) {
      this._elt = ACore_({
        tag: selecttreeleafbox_SelectTreeLeafItem,
        props: {
          data: this.data,
          level: this.level,
          status: this.status,
          selected: this.selected
        },
        on: {
          statuschange: this.ev_statusChange.bind(this),
          click: this.ev_click.bind(this)
        }
      });
    }

    return this._elt;
  }
});
/* harmony default export */ const selecttreeleafbox_MSTBItemHolder = (MSTBItemHolder);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/STLBModes.js



function STLBModeNormal(elt, items) {
  var _this = this;

  this.level = -1;
  this.elt = elt;
  this.$list = elt.$list;
  this.children = items.map(function (item) {
    return new selecttreeleafbox_MSTBItemHolder(elt, _this, item);
  });
  this.hasDesc = this.hasDesc || this.children.some(function (child) {
    return child.hasDesc;
  });
  this.hasIcon = this.hasIcon || this.children.some(function (child) {
    return child.hasIcon;
  });
  this.dict = this.children.reduce(function visit(ac, child) {
    var key = keyStringOf(child.data.value);

    if (ac[key]) {
      console.error('Duplicate value:', ac[key].data, child.data);
    }

    ac[key] = child;

    if (child.children) {
      child.children.reduce(visit, ac);
    }

    return ac;
  }, {});
  this.selectedHolder = null;
}
STLBModeNormal.prototype.getHolderByValue = CTBModeNormal.prototype.getHolderByValue;

STLBModeNormal.prototype.getItemByValue = function (value) {
  var holder = this.getHolderByValue(value);
  if (holder) return holder.data;
  return null;
};

STLBModeNormal.prototype.getFirstLeafHolder = function () {
  var res = null;

  if (this.children) {
    this.children.some(function visit(node) {
      if (node.data.isLeaf) {
        res = node;
        return true;
      }

      if (node.children) {
        return node.children.some(visit);
      }

      return false;
    });
  }

  return res;
};

STLBModeNormal.prototype.onStart = function () {
  this.$list.clearChild();
  var rootHolders = this.children;
  var viewElements = [];
  rootHolders.forEach(function (holder) {
    holder.getViewElements(viewElements);
  }, []);
  this.$list.addChild(viewElements);
};

STLBModeNormal.prototype.setValue = function (value, strict) {
  var holder = this.selectedHolder;

  if (holder) {
    holder.select(false);
  }

  holder = this.getHolderByValue(value);
  if (holder && !holder.data.isLeaf) holder = null;

  if (!holder && strict) {
    holder = this.getFirstLeafHolder();
  }

  if (holder && holder.data.isLeaf) {
    holder.select(true);
  }

  this.selectedHolder = holder;
};

STLBModeNormal.prototype.getValue = function (strict) {
  var holder = this.selectedHolder;
  if (strict && !holder) holder = this.getFirstLeafHolder();

  if (holder) {
    return holder.data.value;
  } else {
    throw new Error('Not selected!');
  }
};

STLBModeNormal.prototype.viewToSelected = function () {
  var _this2 = this;

  if (!this.selectedHolder) return;

  var visitUp = function visitUp(node) {
    var parent = node.parent;

    if (parent !== _this2) {
      visitUp(parent);
    }

    if (node.status === 'close') {
      node.elt.status = 'open';
      node.ev_statusChange();
    }
  };

  visitUp(this.selectedHolder);
  vScrollIntoView(this.selectedHolder.elt);
};

STLBModeNormal.prototype.onStop = function () {};

function STLBModeSearch(elt, items) {
  var _this3 = this;

  this.level = -1;
  this.elt = elt;
  this.$list = this.elt.$list;
  this.children = items.map(function (item) {
    return new selecttreeleafbox_MSTBItemHolder(elt, _this3, item);
  });
  this.dict = this.children.reduce(function visit(ac, child) {
    var key = keyStringOf(child.data.value);

    if (ac[key]) {
      console.error('Duplicate value:', ac[key].data, child.data);
    }

    ac[key] = child;

    if (child.children) {
      child.children.reduce(visit, ac);
    }

    return ac;
  }, {});
  this.selectedHolder = null;
}

STLBModeSearch.prototype.updateSelectedFromRef = function () {
  if (this.selectedHolder) this.selectedHolder.select(false);
  this.selectedHolder = null;
  var value = this.elt.value;
  var holder = this.dict[keyStringOf(value)];

  if (holder) {
    holder.select(true);
    this.selectedHolder = holder;
  }
};

STLBModeSearch.prototype.onStart = function () {
  STLBModeNormal.prototype.onStart.call(this);
  this.updateSelectedFromRef();
};

STLBModeSearch.prototype.onStop = function () {};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/MSTLBItemListController.js




function MSTLBItemListController(elt) {
  this.elt = elt;
  this.items = [];
  this._searchCache = {};
}

MSTLBItemListController.prototype.setItems = function (items) {
  if (!items || !items.forEach || !items.map) items = [];
  this.items = copySelectionItemArray(items, {
    removeNoView: true
  });
  this.update();
};

MSTLBItemListController.prototype.update = function () {
  var mode = new STLBModeNormal(this.elt, this.items);
  this.elt.modes.normal = mode;
  this.elt.mode = mode;

  if (mode.hasDesc) {
    this.elt.$list.addClass('as-has-desc');
  } else {
    this.elt.$list.removeClass('as-has-list');
  }

  if (mode.hasIcon) {
    this.elt.$list.addClass('as-has-icon');
  } else {
    this.elt.$list.removeClass('as-has-icon');
  }

  this.elt.mode = mode;
  mode.onStart();
  this._searchItems = prepareSearchForList(copySelectionItemArray(this.items));
  this._searchCache = {};
};

MSTLBItemListController.prototype.getItems = function () {
  return copySelectionItemArray(this.items);
};

MSTLBItemListController.prototype.makeSearch = function (query) {
  if (this._searchCache[query]) return this._searchCache[query].resetAndGet();
  var searchItem = prepareSearchForItem({
    text: query
  });
  var minScore = Infinity;
  var maxScore = -Infinity;

  var scoredHolders = this._searchItems.map(function visit(item) {
    var holder = {
      item: item,
      score: calcItemMatchScore(searchItem, item),
      childMaxScore: -Infinity
    };
    minScore = Math.min(minScore, holder.score);
    maxScore = Math.max(maxScore, holder.score);

    if (item.items && item.items.length > 0) {
      holder.children = item.items.map(visit);
      holder.childMaxScore = holder.children.reduce(function (ac, cr) {
        return Math.max(ac, cr.score, cr.childMaxScore);
      }, 0);
    }

    return holder;
  });

  var threshHold = maxScore - (maxScore - minScore) / 3;
  var result = scoredHolders.reduce(function filterVisit(ac, cr) {
    var subItems;

    if (Math.max(cr.score, cr.childMaxScore) >= threshHold) {
      ac.items.push(cr.item);

      if (cr.children && cr.childMaxScore >= cr.score) {
        ac.status[keyStringOf(cr.item.value)] = 'open';
        subItems = cr.children.reduce(filterVisit, {
          items: [],
          status: ac.status
        }).items;
        cr.item.items = subItems;
      } else {
        if (cr.children && cr.children.length > 0) {
          ac.status[keyStringOf(cr.item.value)] = 'open';
        }
      }
    }

    return ac;
  }, {
    items: [],
    status: {}
  });
  var normalMode = this.elt.modes.normal;
  result.mode = new STLBModeSearch(this.elt, result.items);

  result.resetAndGet = function () {
    this.mode.children && this.mode.children.forEach(function resetVisit(holder) {
      var key = keyStringOf(holder.data.value);
      holder.ref = normalMode.getHolderByValue(holder.data.value);

      if (holder.status === 'open' && result.status[key] !== 'open') {
        holder.status = 'close';

        if (holder._elt) {
          holder._elt.status = 'close';
        }
      } else if (holder.status === 'close' && result.status[key] === 'open') {
        holder.status = 'open';

        if (holder._elt) {
          holder._elt.status = 'open';
        }
      }

      if (holder.children) holder.children.forEach(resetVisit);
    });
    return this.mode;
  };

  this._searchCache[query] = result;
  return result.resetAndGet();
};

/* harmony default export */ const selecttreeleafbox_MSTLBItemListController = (MSTLBItemListController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/STLBPropsHandlers.js
var STLBPropsHandlers = {};
STLBPropsHandlers.enableSearch = {
  set: function set(value) {
    if (value) {
      this.$box.addClass('as-enable-search');
    } else {
      this.$box.removeClass('as-enable-search');
    }
  },
  get: function get() {
    return this.$box.hasClass('as-enable-search');
  }
};
/* harmony default export */ const selecttreeleafbox_STLBPropsHandlers = (STLBPropsHandlers);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/MSelectTreeLeafBox.js










/****
 * @extends AElement
 * @constructor
 */

function MSelectTreeLeafBox() {
  this.estimateSize = {
    width: 0,
    height: 0
  };
  this.$box = ACore_$('.am-dropdown-box', this);
  this.$list = ACore_$('.am-select-tree-leaf-box-list', this);
  this.itemListCtrl = new selecttreeleafbox_MSTLBItemListController(this);
  this.$searchInput = ACore_$(Searcher.tag, this).on('stoptyping', this.eventHandler.searchTextInputModify);
  this.$boxCloseBtn = ACore_$('.am-dropdown-box-close-btn', this);
  this.on('click', function (event) {
    if (event.target === this || hitElement(this.$boxCloseBtn, event)) {
      this.emit('close', {
        type: 'close',
        target: this
      }, this);
    }
  }.bind(this));
  this.modes = {
    normal: new STLBModeNormal(this, []),
    search: null
  };
  this.mode = this.modes.normal;
  this.strictValue = true;
  /**
   * @name items
   * @memberof MSelectTreeLeafBox#
   * @type {Array}
   */

  /**
   * @name value
   * @memberof MSelectTreeLeafBox#
   */

  /**
   * @name strictMode
   * @type {boolean}
   * @memberof MSelectTreeLeafBox#
   */

  /**
   * @name selectedItem
   * @memberof MSelectTreeLeafBox#
   */
}

MSelectTreeLeafBox.tag = 'MSelectTreeLeafBox'.toString();

MSelectTreeLeafBox.render = function () {
  return ACore_({
    extendEvent: ['pressitem', 'close'],
    "class": ['am-modal', 'am-dropdown-box-modal'],
    child: {
      "class": ['am-select-tree-leaf-box', 'am-dropdown-box', 'as-dropdown-box-common-style'],
      child: [{
        "class": 'am-dropdown-box-header',
        child: [{
          tag: Searcher.tag
        }, {
          tag: 'button',
          "class": 'am-dropdown-box-close-btn',
          child: 'span.mdi.mdi-close'
        }]
      }, {
        "class": ['am-dropdown-box-body', 'am-select-tree-leaf-box-body'],
        child: {
          "class": 'am-select-tree-leaf-box-list'
        }
      }]
    }
  });
};

MSelectTreeLeafBox.prototype._calcEstimateSize = js_SelectTreeLeafBox.prototype._calcEstimateSize;

MSelectTreeLeafBox.prototype._estimateItemWidth = function (item, level) {
  var width = 12; //padding

  width += 12 * level;
  width += 14.7 + 5; //toggle icon
  // if (item.icon) width += 21;//icon

  width += 7 + utils_estimateWidth14(item.text) + 5 + 7; //margin-text

  if (item.desc) width += 6 + utils_estimateWidth14(item.desc) * 0.85;
  return width;
};

MSelectTreeLeafBox.prototype._findFirstLeaf = js_SelectTreeLeafBox.prototype._findFirstLeaf;

MSelectTreeLeafBox.prototype.viewToSelected = function () {
  this.modes.normal.viewToSelected();
};

MSelectTreeLeafBox.prototype.notifyPressItem = function (eventData) {
  delete this.pendingValue;
  this.emit('pressitem', Object.assign({
    type: 'pressitem',
    target: this
  }, eventData), this);
};

MSelectTreeLeafBox.prototype.getItemByValue = function (value) {
  return this.modes.normal.getItemByValue(value);
};

MSelectTreeLeafBox.prototype.resetSearchState = checktreebox_MCheckTreeBox.prototype.resetSearchState;
MSelectTreeLeafBox.property = selecttreeleafbox_STLBPropsHandlers;
MSelectTreeLeafBox.property.items = {
  set: function set(items) {
    var curValue;
    var selected = true;

    if ('pendingValue' in this) {
      curValue = this.pendingValue;
    } else {
      try {
        curValue = this.modes.normal.getValue(this.strictValue);
      } catch (err) {
        selected = false;
      }
    }

    this.estimateSize = this._calcEstimateSize(items);
    this._items = items; //todo: check usage

    this.itemListCtrl.setItems(items);
    if (selected || this.strictValue) this.modes.normal.setValue(curValue, this.strictValue);

    if (this.mode !== this.modes.normal) {
      this.mode.updateSelectedFromRef();
    }
  },
  get: function get() {
    return this.itemListCtrl.getItems();
  }
};
MSelectTreeLeafBox.property.value = {
  /***
   * @this MSelectTreeLeafBox
   * @param value
   */
  set: function set(value) {
    this.pendingValue = value;
    this._value = value;
    this.modes.normal.setValue(this.pendingValue, this.strictValue);
  },
  get: function get() {
    if ('pendingValue' in this) {
      return this.pendingValue;
    } else {
      try {
        return this.modes.normal.getValue(this.strictValue);
      } catch (err) {
        return undefined;
      }
    }
  }
};
MSelectTreeLeafBox.property.selectedItem = {
  get: function get() {
    return this.modes.normal.getItemByValue(this.value);
  }
};
MSelectTreeLeafBox.property.strictValue = {
  set: function set(value) {
    if (value) {
      this.$box.addClass('as-strict-value');
    } else {
      this.$box.removeClass('as-strict-value');
    }

    this.modes.normal.setValue(this.pendingValue, this.strictValue);

    if (this.mode !== this.modes.normal) {
      this.mode.updateSelectedFromRef();
    }
  },
  get: function get() {
    return this.$box.hasClass('as-strict-value');
  }
};
MSelectTreeLeafBox.eventHandler = {};
MSelectTreeLeafBox.eventHandler.searchTextInputModify = checktreebox_MCheckTreeBox.eventHandler.searchTextInputModify;
absol_acomp_ACore.install(MSelectTreeLeafBox);
/* harmony default export */ const selecttreeleafbox_MSelectTreeLeafBox = (MSelectTreeLeafBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeLeafMenu.js









/***
 * @extends AElement
 * @constructor
 */

function SelectTreeLeafMenu_SelectTreeLeafMenu() {
  var _this = this;

  this.$selectBox = ACore_({
    tag: this.mobile ? selecttreeleafbox_MSelectTreeLeafBox : js_SelectTreeLeafBox.tag,
    on: {
      pressitem: this.eventHandler.pressItem,
      preupdateposition: this.eventHandler.preUpdateListPosition,
      close: function close() {
        _this.isFocus = false;
      }
    }
  });
  this.$selectBox.sponsorElement = this;
  HTML5_OOP.drillProperty(this, this.$selectBox, ['enableSearch', 'selectedItem']);
  this.$holderItem = ACore_$('selectlistitem', this); // this.on('click', this.eventHandler.click.bind(this));

  this.boxCtrl = new STLBoxController(this);
  HTML5_OOP.drillProperty(this, this.boxCtrl, 'isFocus');
  /**
   * @name items
   * @type {Array}
   * @memberof SelectTreeLeafMenu#
   */

  /**
   * @name value
   * @memberof SelectTreeLeafMenu#
   */

  /**
   * @name mobile
   * @type {boolean}
   * @memberof SelectTreeLeafMenu#
   */

  /**
   * @name disabled
   * @type {boolean}
   * @memberof SelectTreeLeafMenu#
   */

  /**
   * @name readOnly
   * @type {boolean}
   * @memberof SelectTreeLeafMenu#
   */
}

SelectTreeLeafMenu_SelectTreeLeafMenu.tag = 'SelectTreeLeafMenu'.toLowerCase();

SelectTreeLeafMenu_SelectTreeLeafMenu.render = function () {
  var mobile = Detector_BrowserDetector.isMobile;
  return ACore_({
    "class": ['absol-selectmenu', 'as-select-menu', 'as-select-tree-leaf-menu', 'as-strict-value'],
    extendEvent: ['change'],
    props: {
      mobile: mobile
    },
    attr: {
      tabindex: '1'
    },
    child: [{
      "class": 'absol-selectmenu-holder-item',
      child: 'selectlistitem'
    }, {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }]
  });
};

SelectTreeLeafMenu_SelectTreeLeafMenu.prototype.init = function (props) {
  props = props || {};
  Object.keys(props).forEach(function (key) {
    if (props[key] === undefined) delete props[key];
  });

  if (props.strictValue) {
    this.strictValue = props.strictValue;
    delete props.strictValue;
  }

  var hasValue = ('value' in props);
  var value = props.value;
  delete props.value;
  this["super"](props);
  if (hasValue) this.value = value;
};

SelectTreeLeafMenu_SelectTreeLeafMenu.property = {};
SelectTreeLeafMenu_SelectTreeLeafMenu.property.items = {
  set: function set(items) {
    items = copySelectionItemArray(items || [], {
      removeNoView: true
    });
    this.$selectBox.items = items;
    if (!this.mobile) this.addStyle('--select-list-estimate-width', this.$selectBox.estimateSize.width + 'px');
    var selectedItem = this.$selectBox.selectedItem;

    if (selectedItem) {
      this.$holderItem.data = selectedItem;

      if (this.mobile) {
        this.addStyle('--select-list-estimate-width', this.$selectBox._estimateItemWidth(selectedItem, 0) + 'px');
      }
    } else {
      this.$holderItem.data = {
        text: ''
      };
    }
  },
  get: function get() {
    return this.$selectBox.items;
  }
};
SelectTreeLeafMenu_SelectTreeLeafMenu.property.value = {
  set: function set(value) {
    this.$selectBox.value = value;
    var selectedItem = this.$selectBox.selectedItem;

    if (selectedItem) {
      this.$holderItem.data = selectedItem;

      if (this.mobile) {
        this.addStyle('--select-list-estimate-width', this.$selectBox._estimateItemWidth(selectedItem, 0) + 'px');
      }
    } else {
      this.$holderItem.data = {
        text: ''
      };
    }
  },
  get: function get() {
    return this.$selectBox.value;
  }
};
SelectTreeLeafMenu_SelectTreeLeafMenu.property.strictValue = {
  set: function set(value) {
    this.$selectBox.strictValue = !!value;
    if (value) this.addClass('as-strict-value');else this.removeClass('as-strict-value');
  },
  get: function get() {
    return this.hasClass('as-strict-value');
  }
};
SelectTreeLeafMenu_SelectTreeLeafMenu.property.disabled = SelectMenu2.property.disabled;
SelectTreeLeafMenu_SelectTreeLeafMenu.eventHandler = {};

SelectTreeLeafMenu_SelectTreeLeafMenu.eventHandler.clickOut = function (event) {
  if (hitElement(this.$selectBox, event)) return;
  this.isFocus = false;
};

SelectTreeLeafMenu_SelectTreeLeafMenu.eventHandler.click = function (event) {
  if (!this.disabled) this.isFocus = true;
};

SelectTreeLeafMenu_SelectTreeLeafMenu.eventHandler.pressItem = function (event) {
  this.$selectBox.value = event.item.value;
  this.$holderItem.data = event.item;
  var prevValue = this._value;
  this._value = event.item.value;
  this.isFocus = false;

  if (prevValue !== this._value) {
    this.emit('change', {
      item: event,
      type: 'change',
      target: this,
      originalEvent: event.originalEvent || event.originalEvent || event
    }, this);
  }
};

SelectTreeLeafMenu_SelectTreeLeafMenu.eventHandler.preUpdateListPosition = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  var availableTop = bound.top - 5;
  var availableBot = screenSize.height - 5 - bound.bottom;
  this.$selectBox.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(SelectTreeLeafMenu_SelectTreeLeafMenu);
/* harmony default export */ const js_SelectTreeLeafMenu = (SelectTreeLeafMenu_SelectTreeLeafMenu);
/**
 *
 * @param {SelectTreeLeafMenu} elt
 * @constructor
 */

function STLBoxController(elt) {
  this.elt = elt;
  this.ev_click = this.ev_click.bind(this);
  this.ev_clickOut = this.ev_clickOut.bind(this);
  this.elt.on('click', this.ev_click);
}
Object.defineProperty(STLBoxController.prototype, 'isFocus', {
  set: function set(value) {
    var _this2 = this;

    value = !!value;
    if (this.elt.hasClass('as-focus') === value) return;
    if (value && (this.elt.disabled || this.elt.readOnly)) return;
    var bound;

    if (value) {
      this.elt.$selectBox.addTo(document.body);
      this.elt.addClass('as-focus');
      this.elt.$selectBox.addStyle('visible', 'hidden');
      this.elt.off('click', this.ev_click);

      if (this.elt.mobile) {} else {
        bound = this.elt.getBoundingClientRect();
        this.elt.$selectBox.addStyle('min-width', bound.width + 'px');
        this.elt.$selectBox.followTarget = this.elt;
        this.elt.$selectBox.updatePosition();
      }

      setTimeout(function () {
        document.addEventListener('click', this.ev_clickOut);
        this.elt.$selectBox.removeStyle('visibility');
        this.elt.$selectBox.focus();
      }.bind(this), 5);
      this.elt.$selectBox.viewToSelected();
    } else {
      this.elt.removeClass('as-focus');
      this.elt.$selectBox.remove();
      document.removeEventListener('click', this.ev_clickOut);

      if (this.elt.mobile) {} else {
        this.elt.$selectBox.followTarget = null;
      }

      setTimeout(function () {
        _this2.elt.on('click', _this2.ev_click);
      }, 100);
      this.elt.$selectBox.resetSearchState();
    }
  },
  get: function get() {
    return this.elt.hasClass('as-focus');
  }
});

STLBoxController.prototype.ev_click = function (event) {
  if (!this.elt.disabled && !this.elt.readOnly) this.isFocus = true;
};

STLBoxController.prototype.ev_clickOut = function (event) {
  if (!hitElement(this.elt.$selectBox, event) || event.target.attr && event.target.attr('class') && event.target.attr('class').indexOf('modal') >= 0) {
    this.isFocus = false;
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckTreeLeafBox.js










function MultiCheckTreeLeafBox_isBranchStatus(status) {
  return status === 'open' || status === 'close';
}

function MultiCheckTreeLeafBox_invertStatus(status) {
  return {
    open: 'close',
    close: 'open'
  }[status] || 'none';
}
/***
 * @extends Follower
 * @constructor
 */


function MultiCheckTreeLeafBox() {
  this._initControl();

  this._searchCache = {};
  this._items = [];
  this._values = [];
  this.strictValue = true;
  this.$items = [];
  this.$itemByValue = {};
  this.$dislayItems = this.$items;
  this.$dislayItemByValue = this.$itemByValue;
  this.$content = ACore_$('.as-select-tree-leaf-box-content', this);
  this._savedStatus = {};
  this.estimateSize = {
    width: 0,
    height: 0
  };
}

MultiCheckTreeLeafBox.tag = 'MultiCheckTreeLeafBox'.toLowerCase();

MultiCheckTreeLeafBox.render = function () {
  return ACore_({
    tag: js_Follower,
    attr: {
      tabindex: 0
    },
    "class": ['as-select-tree-leaf-box', 'as-select-list-box'],
    extendEvent: ['change'],
    child: [{
      "class": 'as-select-list-box-search-ctn',
      child: 'searchtextinput'
    }, {
      "class": ['as-bscroller', 'as-select-list-box-scroller', 'as-select-tree-leaf-box-content'],
      child: []
    }, 'attachhook.as-dom-signal'],
    props: {
      anchor: [1, 6, 2, 5]
    }
  });
};

MultiCheckTreeLeafBox.prototype.focus = js_SelectListBox.prototype.focus;

MultiCheckTreeLeafBox.prototype._initControl = function () {
  this.$searchInput = ACore_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify);
};

MultiCheckTreeLeafBox.prototype.resetSearchState = function () {
  var value = this.$searchInput.value;

  if (value.length > 0) {
    this.$searchInput.value = '';

    if (value.trim().length) {
      this.$content.clearChild();
      this.$content.addChild(this.$items);
      this.$dislayItems = this.$items;
      this.$dislayItemByValue = this.$itemByValue;

      this._updateSelectedItems();
    }
  }

  this.updatePosition();
};

MultiCheckTreeLeafBox.prototype._findFirstLeaf = function () {
  var found = false;

  function visit(item) {
    if (item.isLeaf) {
      found = item;
      return true;
    }

    if (item.items && item.items.length > 0) {
      item.items.some(visit);
    }

    return !!found;
  }

  this._items.some(visit);

  return found;
};

MultiCheckTreeLeafBox.prototype._makeTree = function (item, dict, savedStatus) {
  var self = this;
  var status = 'none';
  var isLeaf = item.isLeaf;

  if (item.items && item.items.length > 0) {
    status = 'close';
  }

  if (MultiCheckTreeLeafBox_isBranchStatus(status) && MultiCheckTreeLeafBox_isBranchStatus(savedStatus[item.value])) {
    status = savedStatus[item.value];
  }

  var treeElt = ACore_({
    tag: js_ExpTree.tag,
    "class": 'as-select-tree-leaf-item',
    props: {
      name: item.text,
      desc: item.desc,
      icon: item.icon,
      status: status,
      itemData: item
    },
    on: {
      'statuschange': this.updatePosition.bind(this)
    }
  });

  var nodeElt = treeElt.getNode().on({
    press: function press(event) {
      if (MultiCheckTreeLeafBox_isBranchStatus(treeElt.status)) {
        treeElt.status = MultiCheckTreeLeafBox_invertStatus(treeElt.status);
        savedStatus[item.value] = treeElt.status;
        self.updatePosition();
      } else if (isLeaf) {
        if (!hitElement(checkboxElt, event)) {
          var checked = !checkboxElt.checked;
          checkboxElt.checked = checked;

          var idx = self._values.indexOf(item.value);

          var changed = false;

          if (checked && idx < 0) {
            changed = true;

            self._values.push(item.value);
          } else if (!checked && idx >= 0) {
            changed = true;

            self._values.splice(idx, 1);
          }

          if (changed) self.emit('change', {
            item: item,
            target: self,
            itemElt: treeElt,
            originalEvent: event
          }, self);
        }
      }
    }
  });
  var checkboxElt = null;

  if (isLeaf) {
    checkboxElt = ACore_({
      tag: CheckBoxInput.tag,
      on: {
        change: function change(event) {
          var checked = checkboxElt.checked;

          var idx = self._values.indexOf(item.value);

          var changed = false;

          if (checked && idx < 0) {
            changed = true;

            self._values.push(item.value);
          } else if (!checked && idx >= 0) {
            changed = true;

            self._values.splice(idx, 1);
          }

          if (changed) self.emit('change', {
            item: item,
            target: self,
            itemElt: treeElt,
            originalEvent: event
          }, self);
        }
      }
    });
    nodeElt.addChildAfter(checkboxElt, nodeElt.$toggleIcon);
    treeElt.$checkbox = checkboxElt;
  }

  if (dict) {
    if (dict[item.value] && !this.warned) {
      this.warned = true;
      console.warn(this, 'has duplicated value, element will not work correctly!', item);
    }

    dict[item.value] = treeElt;
  }

  if (isLeaf) {
    treeElt.addClass('as-is-leaf');
  }

  if (item.items && item.items.length > 0) {
    item.items.forEach(function (item1) {
      treeElt.addChild(self._makeTree(item1, dict, savedStatus));
    });
  }

  return treeElt;
};

MultiCheckTreeLeafBox.prototype._estimateItemWidth = function (item, level) {
  var width = 12; //padding

  width += 12 * level;
  width += 14.7 + 5; //toggle icon

  if (item.icon) width += 21; //icon

  width += 7 + utils_estimateWidth14(item.text) + 5 + 7; //margin-text

  if (item.desc) width += 6 + utils_estimateWidth14(item.desc) * 0.85;
  if (item.isLeaf) width += 16;
  return width;
};

MultiCheckTreeLeafBox.prototype.viewToSelected = function () {
  var selectedNode = this.$selectedItem;
  if (!selectedNode) return;
  selectedNode.scrollIntoView();
  var parent = selectedNode.getParent();

  while (parent && parent.getParent) {
    if (parent.status === 'close') {
      parent.getNode().emit('press');
    }

    parent = parent.getParent();
  }
};

MultiCheckTreeLeafBox.prototype._calcEstimateSize = function (items) {
  var self = this;
  var width = 0;
  var height = 0;

  function visit(item, level) {
    var itemWidth = self._estimateItemWidth(item, level);

    width = Math.max(width, itemWidth);
    height += 28;

    if (item.items && item.items.length) {
      item.items.forEach(function (item) {
        visit(item, level + 1);
      });
    }
  }

  items.forEach(function (item) {
    visit(item, 0);
  });
  return {
    width: width,
    height: height
  };
};

MultiCheckTreeLeafBox.prototype._updateSelectedItems = function () {
  var dict = this._values.reduce(function (ac, cr) {
    ac[cr] = true;
    return ac;
  }, {});

  var itemElt;

  for (var val in this.$dislayItemByValue) {
    itemElt = this.$dislayItemByValue[val];

    if (itemElt.$checkbox) {
      itemElt.$checkbox.checked = !!dict[itemElt.itemData.value];
    }
  }
};

MultiCheckTreeLeafBox.property = {};
MultiCheckTreeLeafBox.eventHandler = {};
MultiCheckTreeLeafBox.property.items = {
  /***
   * @this MultiCheckTreeLeafBox
   * @param items
   */
  set: function set(items) {
    var self = this;
    this._savedStatus = {};
    this._searchCache = {};
    items = copySelectionItemArray(items || [], {
      removeNoView: true
    });
    this._items = items;
    prepareSearchForList(items);
    this.$content.clearChild();
    this.$itemByValue = {};
    this.$dislayItemByValue = this.$itemByValue;
    this.$items = items.map(function (item) {
      return self._makeTree(item, self.$itemByValue, self._savedStatus);
    });
    this.$dislayItems = this.$items;
    this.$content.addChild(this.$items);
    this.estimateSize = this._calcEstimateSize(items);
    this.addStyle('--select-list-estimate-width', this.estimateSize.width + 'px');

    this._updateSelectedItems();

    this.updatePosition();
  },
  get: function get() {
    return this._items;
  }
};
MultiCheckTreeLeafBox.property.values = {
  set: function set(values) {
    this._values.splice(0, this._values.length);

    values = values || [];
    var arr = this._values;
    values.reduce(function (ac, cr) {
      if (!ac[cr]) {
        ac[cr] = true;
        arr.push(cr);
      }

      return ac;
    }, {});

    this._updateSelectedItems();
  },
  get: function get() {
    return this._values;
  }
};
MultiCheckTreeLeafBox.property.enableSearch = js_SelectListBox.property.enableSearch;

MultiCheckTreeLeafBox.prototype._search = function (query) {
  var self = this;
  var queryItem = prepareSearchForItem({
    text: query
  });
  var minScore = Infinity;
  var maxScore = -Infinity;

  function makeScoreTree(item) {
    var holder = {
      item: item,
      score: calcItemMatchScore(queryItem, item),
      childrenScore: 0,
      children: []
    };
    minScore = Math.min(minScore, holder.score);
    maxScore = Math.max(maxScore, holder.score);
    var children;

    if (item.items && item.items.length > 0) {
      children = item.items.map(makeScoreTree);
      holder.children = children;
      holder.childrenScore = holder.children.reduce(function (ac, cr) {
        return Math.max(ac, cr.score, cr.childrenScore);
      }, 0);
    }

    return holder;
  }

  var treeScores = this._items.map(makeScoreTree);

  var midScore = (maxScore + minScore) / 2;
  var savedStatus = {};

  function filterTree(scoredTrees, ignore) {
    return scoredTrees.filter(function (holder) {
      return ignore || holder.score >= midScore || holder.childrenScore >= midScore;
    }).map(function makeTree(holder) {
      var item = Object.assign({}, holder.item);

      if (!ignore && holder.children && holder.children.length > 0) {
        if (holder.childrenScore >= midScore) {
          savedStatus[item.value] = 'open';
          item.items = filterTree(holder.children, false);
        } else {
          savedStatus[item.value] = 'close';
          item.items = filterTree(holder.children, true);
        }
      }

      return item;
    });
  }

  var resultItems = filterTree(treeScores, false);
  var dict = {};
  var $items = resultItems.map(function (item) {
    return self._makeTree(item, dict, savedStatus);
  });
  return {
    $items: $items,
    items: resultItems,
    savedStatus: Object.assign({}, savedStatus),
    originSavedStatus: savedStatus,
    dict: dict
  };
};
/***
 * @this MultiCheckTreeLeafBox
 */


MultiCheckTreeLeafBox.eventHandler.searchModify = function () {
  var query = this.$searchInput.value.trim();

  if (query.length === 0) {
    this.$content.clearChild().addChild(this.$items);
    this.$dislayItemByValue = this.$itemByValue;
    this.$dislayItems = this.$items;

    this._updateSelectedItems();

    this.updatePosition();
    return;
  }

  if (!this._searchCache[query]) {
    this._searchCache[query] = this._search(query);
  }

  var searchData = this._searchCache[query];
  searchData.savedStatus = Object.assign(searchData.savedStatus, searchData.originSavedStatus);

  for (var val in searchData.dict) {
    if (MultiCheckTreeLeafBox_isBranchStatus(searchData.dict[val].status)) {
      if (searchData.savedStatus[val]) {
        searchData.dict[val].status = searchData.savedStatus[val];
      }
    }
  }

  this.$content.clearChild().addChild(searchData.$items);
  this.$dislayItemByValue = searchData.dict;
  this.$dislayItems = searchData.$items;

  this._updateSelectedItems();

  this.updatePosition();
};

absol_acomp_ACore.install(MultiCheckTreeLeafBox);
/* harmony default export */ const js_MultiCheckTreeLeafBox = (MultiCheckTreeLeafBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckTreeLeafMenu.js







/****
 * Only leafs have checkbox
 * @extends AElement
 * @constructor
 */

function MultiCheckTreeLeafMenu() {
  this.$selectBox = ACore_({
    tag: js_MultiCheckTreeLeafBox.tag,
    on: {
      change: this.eventHandler.selectBoxChange,
      preupdateposition: this.eventHandler.preUpdateListPosition
    }
  });
  this.$selectlistBox = this.$selectBox;
  HTML5_OOP.drillProperty(this, this.$selectBox, 'enableSearch');
  this.on('click', this.eventHandler.click);
  this.$itemCtn = ACore_$('.as-multi-select-menu-item-ctn', this);
  this.boxCtrl = new STLBoxController(this);
  HTML5_OOP.drillProperty(this, this.boxCtrl, 'isFocus');
}

MultiCheckTreeLeafMenu.tag = 'MultiCheckTreeLeafMenu'.toLowerCase();

MultiCheckTreeLeafMenu.render = function () {
  return ACore_({
    "class": ['as-multi-select-menu', 'as-multi-check-tree-leaf-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']
  });
};

MultiCheckTreeLeafMenu.prototype._updateSelectedItems = function () {
  var values = this.$selectBox.values;

  while (this.$itemCtn.childNodes.length > values.length) {
    this.$itemCtn.removeChild(this.$itemCtn.lastChild);
  }

  while (this.$itemCtn.childNodes.length < values.length) {
    this.$itemCtn.addChild(this._makeItem());
  }

  var item;

  for (var i = 0; i < values.length; ++i) {
    item = this.$selectBox.$itemByValue[values[i]] && this.$selectBox.$itemByValue[values[i]].itemData;

    if (item) {
      this.$itemCtn.childNodes[i].data = item;
      this.$itemCtn.childNodes[i].removeStyle('display', 'none');
    } else {
      this.$itemCtn.childNodes[i].addStyle('display', 'none');
    }
  }
};

MultiCheckTreeLeafMenu.prototype._makeItem = function () {
  var itemElt = ACore_({
    tag: js_SelectBoxItem.tag
  });

  itemElt.on('close', this.eventHandler.itemPressClose.bind(null, itemElt));
  return itemElt;
};

MultiCheckTreeLeafMenu.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);
};

MultiCheckTreeLeafMenu.property = {};
MultiCheckTreeLeafMenu.property.items = {
  set: function set(items) {
    this.$selectBox.items = items;
    this.addStyle('--select-list-estimate-width', Math.max(145 + 20, this.$selectBox.estimateSize.width) + 'px');

    this._updateSelectedItems();
  },
  get: function get() {
    return this.$selectBox.items;
  }
};
MultiCheckTreeLeafMenu.property.values = {
  set: function set(values) {
    values = values || [];
    this.pendingValues = values;
    this.$selectBox.values = values;

    this._updateSelectedItems();
  },
  get: function get() {
    var _this = this;

    if ('pendingValues' in this) return this.pendingValues;
    return this.$selectBox.values.slice().filter(function (value) {
      return !!_this.$selectBox.$itemByValue[value];
    });
  }
};
MultiCheckTreeLeafMenu.property.disabled = js_MultiSelectMenu.property.disabled;
MultiCheckTreeLeafMenu.property.readOnly = js_MultiSelectMenu.property.readOnly;
MultiCheckTreeLeafMenu.eventHandler = {};
MultiCheckTreeLeafMenu.eventHandler.clickOut = js_SelectTreeLeafMenu.eventHandler.clickOut;
MultiCheckTreeLeafMenu.eventHandler.preUpdateListPosition = SelectMenu2.eventHandler.preUpdateListPosition;

MultiCheckTreeLeafMenu.eventHandler.click = function (event) {
  if (!this.readOnly && (event.target === this || event.target === this.$itemCtn)) {
    this.isFocus = true;
  }
};

MultiCheckTreeLeafMenu.eventHandler.selectBoxChange = function () {
  delete this.pendingValues;

  this._updateSelectedItems();

  this.emit('change', {
    type: 'change',
    target: this
  }, this);
};

MultiCheckTreeLeafMenu.eventHandler.itemPressClose = function (itemElt, event) {
  delete this.pendingValues;
  var item = itemElt.data;
  this.$selectBox.values = this.$selectBox.values.filter(function (value) {
    return value !== item.value;
  });

  this._updateSelectedItems();

  this.emit('change', {
    type: 'change',
    target: this
  }, this);
};

absol_acomp_ACore.install(MultiCheckTreeLeafMenu);
/* harmony default export */ const js_MultiCheckTreeLeafMenu = (MultiCheckTreeLeafMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/filelistinput.css
var filelistinput = __webpack_require__(7484);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileListItem.js










/***
 * @extends AElement
 * @constructor
 */

function FileListItem() {
  var _this = this;

  this.$parent = null;
  this.$icon = ACore_$('.as-file-list-item-icon', this);
  this.$name = ACore_$('.as-file-list-item-name', this);
  this.$quickMenuBtn = ACore_$('.as-file-list-item-quick-btn', this);
  this.$check = ACore_$('.as-file-list-item-check', this);
  this.value = null;
  this.fileType = null;
  this.fileName = '';
  HTML5_OOP.drillProperty(this, this.$check, 'checked');
  this.on('click', this.eventHandler.click);
  js_QuickMenu.toggleWhenClick(this.$quickMenuBtn, {
    getMenuProps: function getMenuProps() {
      var list = _this.parentElement;
      if (list.disabled) return;
      var self = _this;
      var itemElt = _this;
      var menuItems = [];
      menuItems.push({
        text: HTML5_LanguageSystem.getText('txt_download') || "Download",
        icon: 'span.mdi.mdi-download',
        cmd: 'download'
      });

      if (!list.readOnly) {
        if (itemElt) menuItems.push({
          text: HTML5_LanguageSystem.getText('txt_delete') || "Delete",
          icon: 'span.mdi.mdi-delete',
          cmd: 'delete'
        });
        menuItems.push({
          text: HTML5_LanguageSystem.getText('txt_delete_all') || "Delete All",
          icon: 'span.mdi.mdi-delete-empty',
          cmd: 'delete_all'
        });
      }

      return {
        items: menuItems
      };
    },
    onSelect: function (menuItem) {
      var itemElt = this;
      var self = this.parentElement;
      var files;

      switch (menuItem.cmd) {
        case 'download':
          self.downloadFileItemElt(itemElt);
          break;

        case 'delete':
          self.deleteFileItemElt(itemElt);
          self.emit('change', {
            type: 'change',
            item: itemElt.fileData,
            target: this,
            action: 'delete'
          }, this);
          break;

        case 'delete_all':
          files = self.files;
          self.files = [];
          self.emit('change', {
            type: 'change',
            items: files,
            target: this,
            action: 'delete_all'
          }, this);
          break;
      }
    }.bind(this)
  });
  this.$check.on('change', function (event) {
    if (this.$parent) {
      this.$parent.emit('check', {
        target: this.$parent,
        elt: this,
        type: 'check'
      }, this.$parent);
    }
  }.bind(this));
  /***
   * @name checked
   * @type {boolean}
   * @memberOf FileListItem#
   */
}

FileListItem.tag = 'FileListItem'.toLowerCase();

FileListItem.render = function () {
  return ACore_({
    "class": 'as-file-list-item',
    child: [{
      tag: CheckBoxInput,
      "class": 'as-file-list-item-check'
    }, {
      tag: 'img',
      "class": 'as-file-list-item-icon',
      props: {
        src: messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg'
      }
    }, {
      "class": 'as-file-list-item-name',
      child: {
        text: '..'
      }
    }, {
      tag: 'button',
      "class": 'as-file-list-item-quick-btn',
      child: 'span.mdi.mdi-dots-vertical'
    }]
  });
};

FileListItem.property = {};
FileListItem.property.fileType = {
  set: function set(value) {
    this._fileType = value;

    if (value) {
      if (catalog_namespaceObject.indexOf(value) >= 0) this.$icon.src = messageinput_MessageInput.iconAssetRoot + '/' + value + '.svg';else this.$icon.src = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg';
    } else {
      this.$icon.src = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg';
    }
  },
  get: function get() {
    return this._fileType;
  }
};
FileListItem.property.fileName = {
  set: function set(value) {
    this.$name.firstChild.data = value + '';
  },
  get: function get() {
    return this.$name.firstChild.data;
  }
};
FileListItem.property.value = {
  set: function set(value) {
    value = value || null;
    var info = fileInfoOf(value);
    var type = info.type || null;
    var size = info.size || null;
    var name = info.name || null;
    this._value = value;
    this.fileSize = size;
    this.fileName = name;
    this.fileType = type;

    if (value) {
      this.addClass('as-has-value');
    } else {
      this.removeClass('as-has-value');
    }
  },
  get: function get() {
    return this._value;
  }
};
FileListItem.eventHandler = {};
/***
 * @this FileListItem
 * @param event
 */

FileListItem.eventHandler.click = function (event) {
  if (!isMouseLeft(event)) return;
  if (hitElement(this.$check, event) || hitElement(this.$quickMenuBtn, event)) return;

  if (this.$parent && this.$parent.showCheck) {
    this.$check.checked = !this.$check.checked;
    this.$check.notifyChange();
  }
};

absol_acomp_ACore.install(FileListItem);
/* harmony default export */ const js_FileListItem = (FileListItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileListInput.js
function FileListInput_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { FileListInput_typeof = function _typeof(obj) { return typeof obj; }; } else { FileListInput_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return FileListInput_typeof(obj); }










/***
 * @extends AElement
 * @constructor
 */

function FileListInput() {
  ContextMenu.auto();
  this.$add = ACore_$('.as-file-list-input-add', this);
  this.$attachhook = ACore_$('attachhook', this);
  this.$attachhook.requestUpdateSize = this.updateSize.bind(this);
  this.$attachhook.on('attached', function () {
    HTML5_ResizeSystem.add(this);
    this.requestUpdateSize();
  });
  this.on('filedrop', this.eventHandler.input_fileDrop);
  this.on('contextmenu', this.eventHandler.itemContext);
  this.$addedFile = ACore_$('input', this.$add).on('change', this.eventHandler.clickAdd);
  /***
   *
   * @type {FileInputBox[]}
   */

  this.$fileItems = [];
  this.$activeItem = null;
  this._files = [];
  /***
   * @name files
   * @memberOf FileListInput#
   * @type {*}
   *
   */

  /***
   * @name readOnly
   * @memberOf FileListInput#
   * @type {boolean}
   */

  /***
   * @name disabled
   * @memberOf FileListInput#
   * @type {boolean}
   */

  /***
   * @name multiple
   * @memberOf FileListInput#
   * @type {boolean}
   */

  /***
   * @name droppable
   * @memberOf FileListInput#
   * @type {boolean}
   */
}

FileListInput.tag = 'FileListInput'.toLowerCase();

FileListInput.render = function () {
  return ACore_({
    tag: js_DropZone.tag,
    "class": ['as-file-list-input', 'as-bscroller', 'as-empty', 'as-droppable'],
    extendEvent: ['change', 'contextmenu', 'check'],
    child: [{
      tag: 'label',
      "class": 'as-file-list-input-add',
      child: [{
        tag: 'input',
        attr: {
          type: 'file',
          accept: '*',
          title: null
        }
      }, {
        "class": 'as-file-list-input-add-icon-ctn',
        child: 'span.mdi.mdi-upload-outline'
      }, 'attachhook']
    }, {
      tag: 'span',
      "class": 'as-file-list-drag-file-text',
      child: {
        text: '(Kéo thả  file vào đây để tải lên)'
      }
    }, {
      "class": 'as-file-list-input-upload-overlay',
      child: 'span.mdi.mdi-upload'
    }]
  });
};

FileListInput.prototype.defaultChecked = false;

FileListInput.prototype.updateSize = function () {
  var bound, px, n;
  var requireWidth = this.getComputedStyleValue('--item-require-width') || '300px';

  if (requireWidth.match(/%$/)) {
    this.addStyle('--item-width', requireWidth);
  } else if (requireWidth.match(/px$/)) {
    bound = this.getBoundingClientRect();
    px = parseFloat(requireWidth.replace('px', ''));

    if (!isNaN(px) && px > 0) {
      n = Math.max(1, Math.floor((bound.width - 10 - 2) / px));
      this.addStyle('--item-width', Math.floor(100 / n) + '%');
    } else {
      this.removeStyle('--item-width');
    }
  } else {
    this.removeStyle('--item-width');
  }
};

FileListInput.prototype._makeFileItem = function (file) {
  var fileElt = ACore_({
    tag: js_FileListItem.tag,
    props: {
      $parent: this,
      allowUpload: false,
      fileData: file,
      checked: this.defaultChecked
    }
  });

  fileElt.on('mousedown', this.eventHandler.mouseDownItem.bind(this, fileElt));
  fileElt.value = file;
  return fileElt;
};

FileListInput.prototype.add = function (file, idx) {
  if (!isNaturalNumber(idx)) idx = Infinity;
  idx = Math.min(this.$fileItems.length, idx);

  var fileElt = this._makeFileItem(file);

  var bf = this.$fileItems[idx];

  if (bf) {
    this.$fileItems.splice(idx, 0, fileElt);

    this._files.splice(idx, 0, file);

    this.addChildBefore(fileElt, bf);
  } else {
    this.$fileItems.push(fileElt);

    this._files.push(file);

    this.addChildBefore(fileElt, this.$add);
  }

  this._updateCountClass();
};

FileListInput.prototype._updateCountClass = function () {
  if (this._files.length > 0) {
    this.removeClass('as-empty');
  } else {
    this.addClass('as-empty');
  }
};

FileListInput.prototype.activeFileItemElt = function (itemElt) {
  if (this.$activeItem !== itemElt) {
    if (this.$activeItem) {
      this.$activeItem.removeClass('as-active');
    }

    this.$activeItem = itemElt;

    if (this.$activeItem) {
      this.$activeItem.addClass('as-active');
    }
  }
};

FileListInput.prototype.downloadFileItemElt = function (fileElt) {
  var fileData = fileElt.fileData;
  var name = fileData.name || fileElt.fileName;
  var file;

  if (fileData instanceof File || fileData instanceof Blob) {
    file = fileData;
  } else if (FileListInput_typeof(fileData) === 'object') {
    if (fileData.url) file = fileData.url;
  } else if (typeof fileData === "string") {
    file = fileData;
  }

  if (file) {
    FileSaver_saveAs(file, name);
  }
};

FileListInput.prototype.deleteFileItemElt = function (fileElt) {
  var fileData = fileElt.fileData;

  var idx = this._files.indexOf(fileData);

  if (idx >= 0) {
    this._files.splice(idx, 1);
  }

  fileElt.remove();
};

FileListInput.prototype._findFileItemElt = function (target) {
  while (target && target !== this) {
    if (target.hasClass && target.hasClass('as-file-list-item')) {
      return target;
    }

    target = target.parentElement;
  }

  return null;
};

FileListInput.prototype.getChildren = function () {
  return this.$fileItems.slice();
};

FileListInput.property = {};
FileListInput.property.files = {
  /***
   * @this FileListInput
   * @param files
   */
  set: function set(files) {
    files = files || [];
    files = files.slice();
    var self = this;
    this.$fileItems.forEach(function (fileElt) {
      fileElt.remove();
    });
    files = files || [];
    this._files = files;
    this.$fileItems = files.map(function (file) {
      var elt = self._makeFileItem(file);

      self.addChildBefore(elt, self.$add);
      return elt;
    });

    this._updateCountClass();
  },

  /***
   * @this FileListInput
   */
  get: function get() {
    return (this._files || []).slice();
  }
};
FileListInput.property.readOnly = {
  set: function set(value) {
    value = !!value;

    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }

    this.$fileItems.forEach(function (fileElt) {
      fileElt.removable = !value;
    });
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
FileListInput.property.droppable = {
  set: function set(value) {
    value = !!value;

    if (value) {
      this.addClass('as-droppable');
    } else {
      this.removeClass('as-droppable');
    }

    this.$fileItems.forEach(function (fileElt) {
      fileElt.removable = !value;
    });
  },
  get: function get() {
    return this.hasClass('as-droppable');
  }
};
FileListInput.property.multiple = {
  set: function set(value) {
    this.$addedFile.multiple = !!value;
  },
  get: function get() {
    return this.$addedFile.multiple;
  }
};
FileListInput.property.accept = {
  set: function set(value) {
    if (!value) value = null;
    this.$addedFile.attr('accept', value + '');
  },
  get: function get() {
    return this.$addedFile.attr('accept') || null;
  }
};
FileListInput.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
FileListInput.property.showCheck = {
  set: function set(value) {
    if (value) {
      this.addClass('as-show-check');
    } else {
      this.removeClass('as-show-check');
    }
  },
  get: function get() {
    return this.hasClass('as-show-check');
  }
};
absol_acomp_ACore.install(FileListInput);
/***
 * @memberOf  FileListInput#
 * @type {{}}
 */

FileListInput.eventHandler = {};

FileListInput.eventHandler.clickAdd = function (event) {
  var files = Array.prototype.slice.call(this.$addedFile.files);
  this.$addedFile.files = null;
  if (files.length === 0) return;

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

  this.emit('change', {
    files: files,
    type: 'change',
    target: this,
    originalEvent: event,
    action: 'add'
  }, this);
};
/***
 * @this FileListInput
 * @param itemElt
 * @param event
 */


FileListInput.eventHandler.mouseDownItem = function (itemElt, event) {
  this.activeFileItemElt(itemElt);
};

FileListInput.eventHandler.input_fileDrop = function (event) {
  if (this.readOnly || this.disabled) return;
  var self = this;
  var files = Array.prototype.slice.call(event.files);
  if (files.length === 0) return;
  if (!this.multiple) files = files.slice(0, 1);
  var accept = this.accept;
  files = files.filter(function (file) {
    return fileAccept(accept, file.type) || fileAccept(accept, file.name);
  });

  if (files.length > 0) {
    files.forEach(function (file) {
      self.add(file);
    });
    this.emit('change', {
      type: 'change',
      files: files,
      target: this,
      action: 'drop'
    }, this);
  }
};
/***
 * @this FileListInput
 * @param itemElt
 * @param event
 */


FileListInput.eventHandler.itemContext = function (event) {
  if (this.disabled) return;
  var self = this;

  var itemElt = this._findFileItemElt(event.target);

  var menuItems = [];

  if (itemElt) {
    menuItems.push({
      text: HTML5_LanguageSystem.getText('txt_download') || "Download",
      icon: 'span.mdi.mdi-download',
      cmd: 'download'
    });
  }

  if (!this.readOnly) {
    if (itemElt) menuItems.push({
      text: HTML5_LanguageSystem.getText('txt_delete') || "Delete",
      icon: 'span.mdi.mdi-delete',
      cmd: 'delete'
    });
    menuItems.push({
      text: HTML5_LanguageSystem.getText('txt_delete_all') || "Delete All",
      icon: 'span.mdi.mdi-delete-empty',
      cmd: 'delete_all'
    });
  }

  if (menuItems.length > 0) {
    event.showContextMenu({
      items: menuItems
    }, function (event) {
      var files;

      switch (event.menuItem.cmd) {
        case 'download':
          self.downloadFileItemElt(itemElt);
          break;

        case 'delete':
          self.deleteFileItemElt(itemElt);
          self.emit('change', {
            type: 'change',
            item: itemElt.fileData,
            target: this,
            action: 'delete'
          }, this);
          break;

        case 'delete_all':
          files = self.files;
          self.files = [];
          self.emit('change', {
            type: 'change',
            items: files,
            target: this,
            action: 'delete_all'
          }, this);
          break;
      }
    });
  }
};

/* harmony default export */ const js_FileListInput = (FileListInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dateinyearinput.css
var dateinyearinput = __webpack_require__(1439);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInYearPicker.js




/***
 * @extends AElement
 * @constructor
 */

function DateInYearPicker() {
  this._month = null;
  this._date = null;
  this.$domSignal = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);

  this._setupMonth();

  this._setupDate();
}

DateInYearPicker.tag = 'DateInYearPicker'.toLowerCase();

DateInYearPicker.render = function () {
  return ACore_({
    extendEvent: ['change'],
    "class": 'as-date-in-year-picker',
    child: [{
      "class": 'as-date-in-year-picker-table',
      child: [{
        "class": 'as-date-in-year-picker-row',
        child: [{
          "class": 'as-date-in-year-picker-cell',
          child: {
            tag: 'span',
            child: {
              text: 'Month'
            }
          }
        }, {
          "class": 'as-date-in-year-picker-cell',
          child: {
            tag: 'span',
            child: {
              text: 'Date'
            }
          }
        }]
      }, {
        "class": 'as-date-in-year-picker-row',
        child: [{
          "class": 'as-date-in-year-picker-cell',
          child: {
            "class": 'as-date-in-year-picker-month-col',
            child: [{
              "class": 'as-date-in-year-picker-month-viewport',
              child: [{
                "class": 'as-date-in-year-picker-month-scroller',
                child: Array(36).fill(null).map(function (u, i) {
                  return {
                    tag: 'button',
                    "class": 'as-date-in-year-picker-month',
                    child: {
                      tag: 'span',
                      child: {
                        text: 1 + i % 12 + ''
                      }
                    },
                    props: {
                      monthL: i % 12
                    }
                  };
                })
              }]
            }, {
              tag: 'button',
              "class": ['as-date-in-year-picker-month-btn', 'as-up'],
              child: 'span.mdi.mdi-chevron-up'
            }, {
              tag: 'button',
              "class": ['as-date-in-year-picker-month-btn', 'as-down'],
              child: 'span.mdi.mdi-chevron-down'
            }]
          }
        }, {
          "class": 'as-date-in-year-picker-cell',
          child: {
            "class": 'as-date-in-year-picker-days',
            child: Array(5).fill(null).map(function (u, i) {
              return {
                "class": 'as-date-in-year-picker-week',
                child: Array(7).fill(null).map(function (u1, j) {
                  return {
                    "class": 'as-date-in-year-picker-day',
                    child: {
                      tag: 'span',
                      child: {
                        text: i * 7 + j + 1 + ''
                      }
                    }
                  };
                })
              };
            })
          }
        }]
      }]
    }]
  });
};

DateInYearPicker.prototype._setupMonth = function () {
  this._monthScrollDy = 0;
  this.$monthScroller = ACore_$('.as-date-in-year-picker-month-scroller', this).on('scroll', this.eventHandler.monthScroll).once('wheel', this.eventHandler.monthScroll);
  this.$monthUpBtn = ACore_$('.as-date-in-year-picker-month-btn.as-up', this).on('pointerdown', this.eventHandler.monthPressDown);
  this.$monthDownBtn = ACore_$('.as-date-in-year-picker-month-btn.as-down', this).on('pointerdown', this.eventHandler.monthPressUp);
  this.$months = $$('.as-date-in-year-picker-month', this);

  for (var i = 0; i < 36; ++i) {
    this.$months[i].on('click', this.eventHandler.clickMonth.bind(this, i % 12));
  }
};

DateInYearPicker.prototype._setupDate = function () {
  this.$days = $$('.as-date-in-year-picker-day', this);
  var i;

  for (i = 31; i < 35; ++i) {
    this.$days[i].addStyle('visibility', 'hidden');
  }

  for (i = 0; i < 31; ++i) {
    this.$days[i].on('click', this.eventHandler.clickDate.bind(this, i + 1));
  }
};

DateInYearPicker.prototype.scrollIntoSelected = function () {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('scrollIntoSelected');
    return;
  }

  var d = Infinity;
  var dy;
  var y;
  var ly, hy;
  var lineHeight = this.getFontSize() * 2;

  if (this._month !== null) {
    for (var k = 0; k < 3; ++k) {
      y = this._month * lineHeight + lineHeight * 12 * k;
      ly = this.$monthScroller.scrollTop;
      hy = ly + lineHeight * 4 - lineHeight;

      if (ly <= y && hy >= y) {
        dy = 0;
        break;
      }

      if (y < ly && ly - y < d) {
        d = ly - y;
        dy = y - ly;
      }

      if (y > hy && y - hy < d) {
        d = y - hy;
        dy = y - hy;
      }
    }

    this.$monthScroller.scrollTop += dy;
  }
};
/***
 * @memberOf DateInYearPicker#
 * @type {{}}
 */


DateInYearPicker.eventHandler = {};
/***
 * @this DateInYearPicker
 */

DateInYearPicker.eventHandler.monthPressDown = function () {
  document.addEventListener('pointerup', this.eventHandler.monthRelease);
  this._monthScrollDy = -8;
  this.eventHandler.monthTick();
};
/**
 * @this DateInYearPicker
 */


DateInYearPicker.eventHandler.monthPressUp = function () {
  document.addEventListener('pointerup', this.eventHandler.monthRelease);
  this._monthScrollDy = 8;
  this.eventHandler.monthTick();
};
/**
 * @this DateInYearPicker
 */


DateInYearPicker.eventHandler.monthTick = function () {
  if (!this._monthScrollDy) return;
  var d = this._monthScrollDy;
  var fontSize = this.getFontSize();
  if (this.$monthScroller.scrollTop + d < 0) d += fontSize * 2 * 12;
  this.$monthScroller.scrollTop += d;
  setTimeout(this.eventHandler.monthTick, 30);
};

DateInYearPicker.eventHandler.monthRelease = function () {
  document.removeEventListener('pointerup', this.eventHandler.monthRelease);
  this._monthScrollDy = 0;
};
/**
 * @this DateInYearPicker
 */


DateInYearPicker.eventHandler.monthScroll = function () {
  var scrollTop = this.$monthScroller.scrollTop;
  var fontSize = this.getFontSize();

  if (scrollTop < fontSize * 2 * 12) {
    this.$monthScroller.scrollTop += fontSize * 2 * 12;
  } else if (scrollTop > fontSize * 2 * 12 * 2) {
    this.$monthScroller.scrollTop -= fontSize * 2 * 12;
  }
};
/**
 * @this DateInYearPicker
 */


DateInYearPicker.eventHandler.clickMonth = function (month, event) {
  var pDate = this.date;
  if (this.month === month) return;
  this.month = month;
  this.emit('change', {
    type: 'change',
    originalEvent: event,
    target: this
  }, this);
};
/**
 * @this DateInYearPicker
 */


DateInYearPicker.eventHandler.clickDate = function (date, event) {
  if (this.date === date) return;
  this.date = date;
  this.emit('change', {
    type: 'change',
    originalEvent: event,
    target: this
  }, this);
};

DateInYearPicker.property = {};
DateInYearPicker.property.date = {
  set: function set(value) {
    if (typeof value !== 'number') value = null;
    var cM, dim;

    if (this._month === null) {
      dim = 31;
    } else {
      cM = new Date(2000, this._month, 1);
      dim = compareDate(nextMonth(cM), cM);
    }

    if (typeof value === "number") value = Math.max(1, Math.min(dim, Math.floor(value)));
    if (isNaN(value)) value = null;
    if (this._date === value) return;

    if (this._date !== null) {
      this.$days[this._date - 1].removeClass('as-selected');
    }

    this._date = value;

    if (this._date !== null) {
      this.$days[this._date - 1].addClass('as-selected');
    }
  },
  get: function get() {
    return this._date;
  }
};
DateInYearPicker.property.month = {
  /***
   * @this DateInYearPicker
   * @param value
   */
  set: function set(value) {
    if (typeof value == 'number') {
      value = Math.max(0, Math.min(11, Math.floor(value)));
    } else value = null;

    if (isNaN(value)) value = null;
    if (this._month === value) return;

    if (this._month !== null) {
      this.$months[this._month].removeClass('as-selected');

      this.$months[this._month + 12].removeClass('as-selected');
      this.$months[this._month + 24].removeClass('as-selected');
    }

    this._month = value;
    var cM, dim;

    if (this._month !== null) {
      this.$months[this._month].addClass('as-selected');

      this.$months[this._month + 12].addClass('as-selected');
      this.$months[this._month + 24].addClass('as-selected');
      this.scrollIntoSelected();
      cM = new Date(2000, this._month, 1);
      dim = compareDate(nextMonth(cM), cM);
    } else {
      dim = 31;
    }

    for (var i = 29; i < 31; ++i) {
      if (i < dim) {
        this.$days[i].removeStyle('visibility');
      } else {
        this.$days[i].addStyle('visibility', 'hidden');
      }
    }

    this.date = Math.min(this.date, dim);
  },
  get: function get() {
    return this._month;
  }
};
DateInYearPicker.property.value = {
  set: function set(value) {
    value = value || {
      month: null,
      date: null
    };
    this.month = value.month;
    this.date = value.date;
  },
  get: function get() {
    return {
      month: this.month,
      date: this.date
    };
  }
};
absol_acomp_ACore.install(DateInYearPicker);
/* harmony default export */ const js_DateInYearPicker = (DateInYearPicker);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInYearInput.js






/***
 * @extends AElement
 * @constructor
 */

function DateInYearInput() {
  this._format = 'dd/MM';
  this._value = null;
  this.$clearBtn = ACore_$('.as-time-input-clear-btn', this).on('click', this.clear.bind(this, true));
  this.$input = ACore_$('input', this);
  this.on('click', this.eventHandler.click);
}

DateInYearInput.tag = 'DateInYearInput'.toLowerCase();

DateInYearInput.render = function () {
  return ACore_({
    extendEvent: ['change'],
    "class": ['as-date-time-input', 'as-date-in-year-input', 'as-empty'],
    child: [{
      tag: 'input',
      "class": 'as-date-time-input-text',
      attr: {
        ondrop: "return false;",
        readOnly: true
      },
      props: {
        value: 'dd/MM'
      }
    }, {
      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-today'
    }]
  });
};

DateInYearInput.prototype.share = {
  $follower: null,
  $picker: null,
  $input: null
};

DateInYearInput.prototype._preparePicker = function () {
  if (this.share.$picker) return;
  this.share.$picker = ACore_({
    tag: js_DateInYearPicker.tag,
    "class": 'as-dropdown-box-common-style'
  });
  this.share.$follower = ACore_({
    tag: js_Follower.tag,
    "class": 'as-date-in-year-follower',
    child: this.share.$picker
  });
};

DateInYearInput.prototype.clear = function (userAction, event) {
  var pValue = this.value;
  this.value = null;

  if (pValue) {
    this.emit('change', {
      type: 'change',
      action: 'clear',
      target: this,
      originalEvent: event
    }, this);
  }
};

DateInYearInput.prototype._attachPicker = function () {
  this._preparePicker();

  if (this.share.$input === this) return;
  if (this.share.$input) this.share.$input._releasePicker();
  this.share.$input = this;
  this.share.$follower.addTo(document.body);
  this.share.$follower.followTarget = this;
  this.share.$follower.sponsorElement = this;
  this.share.$picker.value = this._value;
  this.share.$picker.on('change', this.eventHandler.pickerChange);
  setTimeout(function () {
    document.addEventListener('click', this.eventHandler.clickOut);
  }.bind(this), 0);
};

DateInYearInput.prototype._releasePicker = function () {
  if (this.share.$input !== this) return;
  var cValue = this._value;
  var value = this.share.$picker.value;

  var nValue = this._normalizeValue(value);

  this.share.$input = null;
  this.share.$picker.followTarget = null;
  this.share.$follower.remove();
  this.share.$picker.off('change', this.eventHandler.pickerChange);
  document.removeEventListener('click', this.eventHandler.clickOut);
  var changed = !cValue !== !nValue;

  if (nValue && !changed) {
    changed = cValue.date === nValue.date && cValue.month === nValue.month;
  }

  if (changed) {
    this._value = value;
    this.emit('change', {
      type: 'change',
      value: nValue,
      target: this
    }, this);
  }
};

DateInYearInput.prototype._normalizeValue = function (value) {
  if (!value) return null;
  var m = Math.min(11, Math.max(0, Math.floor(value.month)));
  if (isNaN(m)) return null;
  var dim = compareDate(nextMonth(new Date(2000, m, 1)), new Date(2000, m, 1));
  var d = Math.min(dim, Math.max(1, Math.floor(value.date)));
  if (isNaN(d)) return null;
  return {
    date: d,
    month: m
  };
};

DateInYearInput.prototype._updateValueText = function () {
  var value = this._value;

  if (value) {
    this.$input.value = this._format.replace(new RegExp(DATE_TIME_TOKEN_RGX.source, 'g'), function (full) {
      switch (full) {
        case 'dd':
        case 'd':
          if (isRealNumber(value.date)) {
            return zeroPadding(value.date, full.length);
          }

          return full;

        case 'M':
        case 'MM':
          if (isRealNumber(value.month)) {
            return zeroPadding(value.month + 1, full.length);
          }

          return full;

        default:
          return full;
      }
    });
  } else {
    this.$input.value = this._format;
  }

  if (this.$input.value === this._format) {
    this.addClass('as-empty');
  } else {
    this.removeClass('as-empty');
  }
};

DateInYearInput.property = {};
DateInYearInput.property.value = {
  set: function set(value) {
    value = this._normalizeValue(value);
    this._value = value;

    this._updateValueText();
  },
  get: function get() {
    return this._normalizeValue(this._value);
  }
};
DateInYearInput.property.notNull = {
  set: function set(value) {
    if (value) {
      this.addClass('as-must-not-null');
    } else {
      this.removeClass('as-must-not-null');
    }
  },
  get: function get() {
    return this.hasClass('as-must-not-null');
  }
};
DateInYearInput.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
      this.$input.disabled = true;
    } else {
      this.removeClass('as-disabled');
      this.$input.disabled = false;
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
DateInYearInput.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
      this.$input.readOnly = true;
    } else {
      this.removeClass('as-read-only');
      this.$input.readOnly = false;
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
/***
 * @memberOf DateInYearInput#
 * @type {{}}
 */

DateInYearInput.eventHandler = {};
/***
 * @this DateInYearInput
 * @param event
 */

DateInYearInput.eventHandler.click = function (event) {
  if (this.readOnly || hitElement(this.$clearBtn, event)) return;

  this._attachPicker();
};
/***
 * @this DateInYearInput
 * @param event
 */


DateInYearInput.eventHandler.clickOut = function (event) {
  if (hitElement(this.share.$follower, event)) return;

  this._releasePicker();
};

DateInYearInput.eventHandler.pickerChange = function () {
  this._value = this.share.$picker.value;

  this._updateValueText();
};

absol_acomp_ACore.install(DateInYearInput);
/* harmony default export */ const js_DateInYearInput = (DateInYearInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dualselectmenu.css
var dualselectmenu = __webpack_require__(4912);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DualSelectBox.js







/***
 * @extends Follower
 * @constructor
 */

function DualSelectBox() {
  this.domSignal = new HTML5_DelaySignal();
  this.domSignal.on('scrollIntoSelected', this.scrollIntoSelected.bind(this));
  this._items = [];
  this._value = [null, null];
  this.holderByValue = {};
  this.$lists = $$('.as-dual-select-box-list', this);
  this.$searcTextInput = ACore_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchTextInputModify);
  this.$closeBtn = ACore_$('.as-select-list-box-close-btn', this).on('click', this.eventHandler.clickCloseBtn);
  this.cView = new DualSelectView(this, this._items);
  this.searchedView = {
    '*': this.cView
  };
  this.estimateSize = {
    width: 0,
    height: 0
  };
  this._emittedValue = [null, null];
  /***
   * @name strictValue
   * @type {boolean}
   * @memberOf DualSelectBox#
   */

  /***
   * @name enableSearch
   * @type {boolean}
   * @memberOf DualSelectBox#
   */

  /***
   * @name value
   * @type {Array}
   * @memberOf DualSelectBox#
   */

  /***
   * @name items
   * @type {Array}
   * @memberOf DualSelectBox#
   */
}

DualSelectBox.tag = 'DualSelectBox'.toLowerCase();

DualSelectBox.render = function () {
  return ACore_({
    tag: js_Follower.tag,
    "class": 'as-dual-select-box',
    extendEvent: ['change', 'close'],
    child: [{
      "class": 'as-dual-select-box-search-ctn',
      child: {
        tag: 'searchtextinput'
      }
    }, {
      "class": 'as-dual-select-box-list-ctn',
      child: [{
        "class": ['as-dual-select-box-list', 'absol-selectlist', 'as-bscroller']
      }, {
        "class": 'as-dual-select-box-arrow-ctn',
        child: 'span.mdi.mdi-menu-right'
      }, {
        "class": ['as-dual-select-box-list', 'absol-selectlist', 'as-bscroller']
      }]
    }, {
      "class": 'as-dropdown-box-footer',
      child: [{
        "class": 'as-dropdown-box-footer-right',
        child: [{
          tag: 'a',
          "class": 'as-select-list-box-close-btn',
          child: {
            text: 'Close'
          }
        }]
      }]
    }]
  });
};

DualSelectBox.prototype._implicit = function (value) {
  if (value instanceof Array) {
    if (value.length > 2) value = value.slice(0, 2);else {
      value.push.apply(value, Array(2 - value.length).fill(null));
    }
  } else {
    value = [null, null];
  }

  return value;
};

DualSelectBox.prototype._explicit = function (value) {
  value = value.slice();
  var strictValue = this.strictValue;

  if (!this.holderByValue[value[0]]) {
    if (this._items.length > 0 && strictValue) {
      value[0] = this._items[0].value;
    } else {
      return null;
    }
  }

  if (!this.holderByValue[value[0]].child[value[1]]) {
    if (strictValue && this.holderByValue[value[0]].item.items && this.holderByValue[value[0]].item.items.length > 0) {
      value[1] = this.holderByValue[value[0]].item.items[0].value;
    } else {
      return null;
    }
  }

  if (value[0] === null || value[1] === null) {
    return null;
  }

  return value;
};

DualSelectBox.prototype._notifyIfChange = function (event) {
  var value = this._explicit(this._value);

  if (value === this._emittedValue) return;

  if (!value !== !this._emittedValue || value[0] !== this._emittedValue[0] || value[1] !== this._emittedValue[1]) {
    this.emit('change', {
      type: 'change',
      target: this,
      originalEvent: event
    }, this);
  }
};

DualSelectBox.prototype._makeLeftItem = function (item) {
  var itemElt = ACore_({
    "class": 'absol-selectlist-item',
    child: {
      tag: 'span',
      "class": 'absol-selectlist-item-text',
      child: {
        text: item.text
      }
    }
  });

  itemElt.itemData = item;
  itemElt.on('click', this.eventHandler.clickLeftItem.bind(this, itemElt));
  return itemElt;
};

DualSelectBox.prototype.makeRightItem = function (item) {
  var itemElt = ACore_({
    "class": 'absol-selectlist-item',
    child: {
      tag: 'span',
      "class": 'absol-selectlist-item-text',
      child: {
        text: item.text
      }
    }
  });

  itemElt.itemData = item;
  itemElt.on('click', this.eventHandler.clickRightItem.bind(this, itemElt));
  return itemElt;
};

DualSelectBox.prototype._calcEstimateSize = function (items) {
  var fontSize = ACore_$(document.body).getFontSize();
  var longestItem = null;
  var longestE14 = 0;
  var e14, i, j;
  var item, subItem;

  for (i = 0; i < items.length; ++i) {
    item = items[i];
    e14 = utils_estimateWidth14(item.text);

    if (e14 > longestE14) {
      longestItem = item;
      longestE14 = e14;
    }
  }

  var leftTextWidth = longestItem ? utils_measureText(longestItem.text, '14px arial').width : 0;
  var maxN = items.length;

  for (i = 0; i < items.length; ++i) {
    item = items[i];
    if (!item.items || item.items.length === 0) continue;
    maxN = Math.max(maxN, item.items.length);

    for (j = 0; j < item.items.length; ++j) {
      subItem = item.items[j];
      e14 = utils_estimateWidth14(subItem.text);

      if (e14 > longestE14) {
        longestItem = subItem;
        longestE14 = e14;
      }
    }
  }

  var rightTextWidth = longestItem ? utils_measureText(longestItem.text, '14px arial').width : 0;
  return {
    width: (7 + leftTextWidth + 7 + 5 + 7 + 1 + 17 + 1 + 7 + rightTextWidth + 7 + 5 + 7 + 20) * fontSize / 14,
    height: maxN * 20 * fontSize / 14,
    textWidth: (leftTextWidth + rightTextWidth + 12) * fontSize / 14
  };
};

DualSelectBox.prototype.scrollIntoSelected = function () {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('scrollIntoSelected');
    return;
  }

  if (this.cView && this.cView.$leftSelectedItem && this.cView.$leftSelectedItem.isDescendantOf(this.$lists[0])) {
    this.cView.$leftSelectedItem.scrollIntoView();
  }

  if (this.cView && this.cView.$rightSelectedItem && this.cView.$rightSelectedItem.isDescendantOf(this.$lists[1])) {
    this.cView.$rightSelectedItem.scrollIntoView();
  }
};

DualSelectBox.prototype.focus = js_SelectListBox.prototype.focus;
DualSelectBox.property = {};
DualSelectBox.property.items = {
  /***
   * @this DualSelectBox
   * @param items
   */
  set: function set(items) {
    var self = this;
    items = items || [];
    prepareSearchForList(items);
    this._items = items;
    this.holderByValue = items.reduce(function (ac, cr) {
      ac[cr.value] = {
        item: cr,
        child: (cr.items || []).reduce(function (ac1, cr1) {
          ac1[cr1.value] = {
            item: cr1
          };
          return ac1;
        }, {})
      };
      return ac;
    }, {});
    this.estimateSize = this._calcEstimateSize(items);
    this.addStyle('--dual-list-estimate-width', this.estimateSize.width + 'px');
    this.searchedView = {};
    this.cView = new DualSelectView(this, items);
    this.searchedView['*'] = this.cView;
    this.cView.toView();
  },
  get: function get() {
    return this._items;
  }
};
DualSelectBox.property.enableSearch = {
  set: function set(value) {
    if (value) {
      this.addClass('as-enable-search');
    } else {
      this.removeClass('as-enable-search');
    }
  },
  get: function get() {
    return this.hasClass('as-enable-search');
  }
};
DualSelectBox.property.strictValue = {
  set: function set(value) {
    if (value) {
      this.addClass('as-strict-value');
    } else {
      this.removeClass('as-strict-value');
    }

    if (this.cView) this.cView.updateViewByValue();
  },
  get: function get() {
    return this.hasClass('as-strict-value');
  }
};
DualSelectBox.property.value = {
  /***
   * @this DualSelectBox
   * @param value
   */
  set: function set(value) {
    this._value = this._implicit(value);

    if (this.cView) {
      this.cView.updateViewByValue();
      this.cView.toRightList();
    }

    this.scrollIntoSelected();
  },
  get: function get() {
    return this._explicit(this._value);
  }
};
/***
 * @memberOf DualSelectBox#
 * @type {{}}
 */

DualSelectBox.eventHandler = {};
/***
 * @this DualSelectBox
 * @param itemElt
 * @param event
 */

DualSelectBox.eventHandler.clickLeftItem = function (itemElt, event) {
  var item = itemElt.itemData;
  this._value[0] = item.value;
  this.cView.updateLeftSelectedItem();
  this.cView.updateRightList();
  this.cView.toRightList();

  if (this.cView.$leftItemByValue[item.value] && this.cView.$leftItemByValue[item.value].itemData && this.cView.$leftItemByValue[item.value].itemData.items && this.cView.$leftItemByValue[item.value].itemData.items.length > 0) {
    this._value[1] = this.cView.$leftItemByValue[item.value].itemData.items[0].value;
    this.cView.updateRightSelectedItem();
  }

  if (this.cView.$rightSelectedItem) {
    this.cView.$rightSelectedItem.scrollIntoView();
  }

  this._notifyIfChange(event);
};
/***
 * @this DualSelectBox
 * @param itemElt
 * @param event
 */


DualSelectBox.eventHandler.clickRightItem = function (itemElt, event) {
  var item = itemElt.itemData;
  this._value[1] = item.value;
  this.cView.updateRightSelectedItem();

  this._notifyIfChange(event);
};

DualSelectBox.prototype.searchItemByText = function (text) {
  var items = this._items;
  var queryItem = prepareSearchForItem({
    text: text
  });
  var maxScore = 0;
  var holders = items.map(function (item) {
    var h = {
      item: item,
      itemScore: calcItemMatchScore(queryItem, item)
    };
    maxScore = Math.max(maxScore, h.itemScore);
    var childMaxScore = 0;

    if (item.items && item.items.length > 0) {
      h.child = item.items.map(function (cItem) {
        var cItemScore = calcItemMatchScore(queryItem, cItem);
        maxScore = Math.max(maxScore, cItemScore);
        childMaxScore = Math.max(childMaxScore, cItemScore);
        return {
          item: cItem,
          itemScore: cItemScore
        };
      });
      h.childScore = childMaxScore;
    }

    return h;
  });
  holders.sort(function (a, b) {
    return -Math.max(a.itemScore, a.childScore) + Math.max(b.itemScore, b.childScore);
  });
  var midScore = maxScore / 2;
  holders = holders.filter(function (holder) {
    return Math.max(holder.itemScore, holder.childScore) >= midScore;
  });
  return holders.map(function (holder) {
    var oldItem = holder.item;
    var item = {
      text: oldItem.text,
      value: oldItem.value
    };
    var childHolders;

    if (holder.child) {
      childHolders = holder.child.slice();
      childHolders.sort(function (a, b) {
        return -a.itemScore + b.itemScore;
      });
      item.items = childHolders.map(function (cHolder) {
        return cHolder.item;
      });
      item.isSearchItem = true;
    }

    return item;
  });
};

DualSelectBox.prototype.focus = function () {
  if (this.enableSearch) {
    this.$searcTextInput.focus();
  }
};

DualSelectBox.prototype.resetSearchState = function () {
  if (this.$searcTextInput.value.length === 0) return;
  this.$searcTextInput.value = '';
  this.eventHandler.searchTextInputModify();
};
/***
 * @this DualSelectBox
 */


DualSelectBox.eventHandler.searchTextInputModify = function () {
  var query = this.$searcTextInput.value.trim().replace(/\s+/, ' ');
  if (query.length === 0) query = '*';
  var view = this.searchedView[query];

  if (!view) {
    view = new DualSelectView(this, this.searchItemByText(query));
    this.searchedView[query] = view;
  }

  this.cView = view;
  this.cView.updateLeftSelectedItem();
  this.cView.updateRightSelectedItem();
  view.toView();
  this.$lists[0].scrollTop = 0;
  this.$lists[1].scrollTop = 0;
  if (query === '*') this.scrollIntoSelected();
};

DualSelectBox.eventHandler.clickCloseBtn = function (event) {
  this.emit('close', {
    type: 'close',
    target: this,
    originalEvent: event
  }, this);
};

absol_acomp_ACore.install(DualSelectBox);
/* harmony default export */ const js_DualSelectBox = (DualSelectBox);
/***
 *
 * @param {DualSelectBox} box
 * @param items
 * @constructor
 */

function DualSelectView(box, items) {
  var self = this;
  this.box = box;
  this.items = items;
  this.$leftItems = items.map(function (item) {
    return self.box._makeLeftItem(item);
  });
  this.$leftItemByValue = this.$leftItems.reduce(function (ac, cr) {
    ac[cr.itemData.value] = cr;
    return ac;
  }, {});
  this.$rightItems = [];
  this.$rightItemByValue = {};
  this.$leftSelectedItem = null;
  this.$rightSelectedItem = null;
  this.updateViewByValue();
}

DualSelectView.prototype.toView = function () {
  this.box.$lists[0].clearChild();
  this.box.$lists[0].addChild(this.$leftItems);
  this.updateLeftSelectedItem();
  this.toRightList();
};

DualSelectView.prototype.toRightList = function () {
  this.box.$lists[1].clearChild();
  this.box.$lists[1].addChild(this.$rightItems);
  this.updateLeftSelectedItem();
};

DualSelectView.prototype.updateViewByValue = function () {
  this.updateLeftSelectedItem();
  this.updateRightList();
};

DualSelectView.prototype.updateRightList = function () {
  var self = this;
  var leftValue = this.box._value[0];
  var items = this.$leftItemByValue[leftValue] && this.$leftItemByValue[leftValue].itemData.items;

  if (items && items.length > 0) {
    this.$rightItems = items.map(function (item) {
      return self.box.makeRightItem(item);
    });
  } else {
    this.$rightItems = [];
  }

  this.$rightItemByValue = this.$rightItems.reduce(function (ac, cr) {
    ac[cr.itemData.value] = cr;
    return ac;
  }, {});
  this.updateRightSelectedItem();
};

DualSelectView.prototype.updateLeftSelectedItem = function () {
  if (this.$leftSelectedItem) {
    this.$leftSelectedItem.removeClass('as-selected');
  }

  this.$leftSelectedItem = this.$leftItemByValue[this.box._value[0]] || null;

  if (this.$leftSelectedItem) {
    this.$leftSelectedItem.addClass('as-selected');
  }
};

DualSelectView.prototype.updateRightSelectedItem = function () {
  if (this.$rightSelectedItem) {
    this.$rightSelectedItem.removeClass('as-selected');
  }

  this.$rightSelectedItem = this.$rightItemByValue[this.box._value[1]] || null;

  if (this.$rightSelectedItem) {
    this.$rightSelectedItem.addClass('as-selected');
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DualSelectMenu.js





/***
 * @extends AElement
 * @constructor
 */

function DualSelectMenu() {
  this._format = '$0, $1';
  /***
   * @type {DualSelectBox}
   */

  this.$box = ACore_({
    tag: js_DualSelectBox.tag,
    props: {
      anchor: [1, 6, 2, 5]
    },
    on: {
      preupdateposition: this.eventHandler.preUpdatePosition,
      change: this.eventHandler.boxChange,
      close: this.eventHandler.boxClose
    }
  });
  this.$box.cancelWaiting();
  this.$item = ACore_$('.absol-selectlist-item', this);
  this.on('click', this.eventHandler.click);
  HTML5_OOP.drillProperty(this, this.$box, 'enableSearch');
  /***
   * @name strictValue
   * @type {boolean}
   * @memberOf DualSelectMenu#
   */

  /***
   * @name readOnly
   * @type {boolean}
   * @memberOf DualSelectMenu#
   */

  /***
   * @name disabled
   * @type {boolean}
   * @memberOf DualSelectMenu#
   */
}

DualSelectMenu.tag = 'DualSelectMenu'.toLowerCase();

DualSelectMenu.render = function () {
  return ACore_({
    "class": ['absol-selectmenu', 'as-dual-select-menu'],
    extendEvent: ['change'],
    attr: {
      tabindex: '1'
    },
    child: [{
      "class": 'absol-selectmenu-holder-item',
      child: '.absol-selectlist-item'
    }, {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }, 'attachhook']
  });
};

DualSelectMenu.prototype._updateViewValue = function () {
  var format = this._format;
  var value = this.$box.value || [null, null];
  var strictValue = this.strictValue;
  var hbv = this.$box.holderByValue;
  var firstToken = '__';
  var secToken = '__';
  var firstHolder = hbv[value[0]];
  var sectHolder;

  if (firstHolder) {
    firstToken = firstHolder.item.text;
    sectHolder = firstHolder.child[value[1]];
    if (sectHolder) secToken = sectHolder.item.text;
  }

  var text = format.replace('$0', firstToken).replace('$1', secToken);
  this.$item.clearChild().addChild(ACore_({
    tag: 'span',
    "class": ['as-selectlist-item-text', 'absol-selectlist-item-text'],
    child: {
      text: text
    }
  }));
};

DualSelectMenu.property = {};
DualSelectMenu.property.selectedItems = {
  get: function get() {
    var value = this.$box.value || [null, null];
    var hbv = this.$box.holderByValue;
    var firstHolder = hbv[value[0]];
    var sectHolder;
    var res = [null, null];

    if (firstHolder) {
      res[0] = firstHolder.item;
      sectHolder = firstHolder.child[value[1]];
      if (sectHolder) res[1] = sectHolder.item;
    }

    return res;
  }
};
DualSelectMenu.property.isFocus = {
  /***
   * @this DualSelectMenu
   * @param value
   */
  set: function set(value) {
    var self = this;
    value = !!value;
    if (value && (this.disabled || this.readOnly)) return;
    if (this.hasClass('as-focus') === value) return;

    if (value) {
      this._prevValue = (this.$box.value || [null, null]).join('//');
      this.addClass('as-focus');
      this.off('click', this.eventHandler.click);
      this.$box.followTarget = this;
      this.$box.sponsorElement = this;
      this.$box.addTo(document.body);
      this.$box.updatePosition();
      this.$box.scrollIntoSelected();
      setTimeout(function () {
        self.$box.focus();
        document.addEventListener('click', self.eventHandler.clickOut);
      }, 10);
    } else {
      this.removeClass('as-focus');
      this.$box.selfRemove();
      this.$box.resetSearchState();
      document.removeEventListener('click', self.eventHandler.clickOut);
      setTimeout(function () {
        self.on('click', self.eventHandler.click);
      }, 10);

      if ((this.$box.value || [null, null]).join('//') !== this._prevValue) {
        this._updateViewValue();

        this.emit('change', {
          type: 'change',
          target: this
        }, this);
      }
    }
  },
  get: function get() {
    return this.hasClass('as-focus');
  }
};
/****
 * @memberOf DualSelectMenu#
 * @type {{}}
 */

DualSelectMenu.eventHandler = {};
DualSelectMenu.property.items = {
  /***
   * @this DualSelectMenu
   * @param items
   */
  set: function set(items) {
    this.$box.items = items;
    this.addStyle('--dual-list-estimate-text-width', this.$box.estimateSize.textWidth + 'px');

    this._updateViewValue();
  },
  get: function get() {
    return this.$box.items;
  }
};
DualSelectMenu.property.value = {
  set: function set(value) {
    this.$box.value = value;

    this._updateViewValue();
  },
  get: function get() {
    return this.$box.value;
  }
};
DualSelectMenu.property.strictValue = {
  set: function set(value) {
    this.$box.strictValue = value;

    this._updateViewValue();
  },
  get: function get() {
    return this.$box.strictValue;
  }
};
DualSelectMenu.property.format = {
  set: function set(value) {
    this._format = value || '$0, $1';

    this._updateViewValue();
  },
  get: function get() {
    return this._format;
  }
};
DualSelectMenu.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
DualSelectMenu.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
/**
 * @this DualSelectMenu
 */

DualSelectMenu.eventHandler.click = function () {
  if (this.readOnly) return;
  this.isFocus = true;
};
/**
 * @this DualSelectMenu
 */


DualSelectMenu.eventHandler.clickOut = function (event) {
  if (hitElement(this.$box, event)) return;
  this.isFocus = false;
};
/***
 * @this DualSelectMenu
 */


DualSelectMenu.eventHandler.preUpdatePosition = function () {
  var bound = this.getBoundingClientRect();
  var screenSize = getScreenSize();
  var availableTop = bound.top - 5;
  var availableBot = screenSize.height - 5 - bound.bottom;
  this.$box.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;
  }
};

DualSelectMenu.eventHandler.boxChange = function () {
  this._updateViewValue();
};

DualSelectMenu.eventHandler.boxClose = function () {
  this.isFocus = false;
};

absol_acomp_ACore.install(DualSelectMenu);
/* harmony default export */ const js_DualSelectMenu = (DualSelectMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/toclist.css
var toclist = __webpack_require__(1812);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TOCItem.js






/***
 * @extends AElement
 * @constructor
 */

function TOCItem() {
  this.$iconP = null;
  this.$iconCtn = ACore_$('.as-toc-item-ext-icon-ctn', this);
  this._status = 'none';
  this.$name = ACore_$('.as-toc-item-name', this);
  this.$nameInput = ACore_$('.as-toc-item-name-input', this).on('keydown', this.eventHandler.keyDownNameInput).on('paste', this.eventHandler.keyDownNameInput);
  this.$toggleCtn = ACore_$('.as-toc-item-toggle-ico-ctn', this);
  this._level = 0;
  this.$checkbox = ACore_$(CheckBoxInput.tag, this).on('change', this.eventHandler.checkedChange);
  this.$checkbox.disabled = true;
  this.$checkbox.addStyle('display', 'none');
  this.$checkIco = ACore_$('.as-toc-item-check-ctn .mdi-check', this).addStyle('display', 'none').addStyle('font-size', '18px');
  this.$quickMenuBtn = ACore_$('.as-toc-item-quick-menu-ctn button', this).on('click', this.eventHandler.clickQuickMenuBtn);
  this.on('click', this.eventHandler.click);
  this._lastClickTime = 0;
  /***
   * @name hasQuickMenu
   * @type {boolean}
   * @memberOf TOCItem#
   */

  /***
  * @name name
  * @type {string}
  * @memberOf TOCItem#
  */

  /***
   * @name status
   * @type {"none"|"open"|"close"}
   * @memberOf TOCItem#
   */

  /***
   * @name level
   * @type {number}
   * @memberOf TOCItem#
   */

  /***
   * @name checked
   * @type {boolean}
   * @memberOf TOCItem#
   */

  /***
   * @name nodeData
   * @type {{}}
   * @memberOf TOCItem#
   */
}

TOCItem.tag = 'TOCItem'.toLowerCase();

TOCItem.render = function () {
  return ACore_({
    "class": ['as-toc-item', 'as-has-quick-menu'],
    extendEvent: ['presstoggle', 'checkedchange', 'pressquickmenu', 'press', 'renamefinish'],
    child: [{
      "class": 'as-toc-item-toggle-ico-ctn',
      child: 'toggler-ico'
    }, '.as-toc-item-ext-icon-ctn', {
      "class": 'as-toc-item-name-ctn',
      child: [{
        tag: 'span',
        "class": 'as-toc-item-name',
        child: {
          text: 'đây là cái tên'
        }
      }, {
        tag: 'input',
        "class": 'as-toc-item-name-input',
        attr: {
          type: 'text'
        }
      }]
    }, {
      "class": 'as-toc-item-check-ctn',
      child: [{
        tag: CheckBoxInput.tag
      }, 'span.mdi.mdi-check']
    }, {
      "class": 'as-toc-item-quick-menu-ctn',
      child: {
        tag: 'button',
        child: 'span.mdi.mdi-dots-vertical'
      }
    }]
  });
};

TOCItem.property = {};
TOCItem.property.icon = {
  set: function set(value) {
    if (this.$iconP) {
      this.$iconP.remove();
      this.$iconP = undefined;
    }

    if (value) {
      var newE;

      if (!HTML5_Dom.isDomNode(value)) {
        newE = ACore_(value);
      }

      this.$iconP = newE;
      this.$iconCtn.addChild(newE);
      this._icon = value;
    } else {
      this._icon = undefined;
    }
  },
  get: function get() {
    return this._icon;
  }
};
TOCItem.property.status = {
  set: function set(value) {
    if (['none', 'open', 'close'].indexOf(value) < 0) value = 'none';
    this.removeClass('as-status-' + this._status);
    this._status = value;
    this.addClass('as-status-' + value);
  },
  get: function get() {
    return this._status;
  }
};
TOCItem.property.name = {
  set: function set(value) {
    this.$name.firstChild.data = value || '';
  },
  get: function get() {
    return this.$name.firstChild.data;
  }
};
TOCItem.property.level = {
  set: function set(value) {
    this._level = value;
    this.addStyle('--level', value + '');
  },
  get: function get() {
    return this._level;
  }
};
TOCItem.property.checked = {
  set: function set(value) {
    this.$checkbox.checked = value;

    if (value) {
      this.$checkIco.removeStyle('display');
    } else {
      this.$checkIco.addStyle('display', 'none');
    }
  },
  get: function get() {
    return this.$checkbox.checked;
  }
};
TOCItem.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
TOCItem.property.hasQuickMenu = {
  set: function set(value) {
    if (value) {
      this.addClass('as-has-quick-menu');
    } else {
      this.removeClass('as-has-quick-menu');
    }
  },
  get: function get() {
    return this.hasClass('as-has-quick-menu');
  }
};
TOCItem.property.extendClasses = {
  set: function set(value) {
    var _this = this;

    value = value || [];
    if (typeof value === 'string') value = value.trim().split(/\s/).filter(function (x) {
      return !!x;
    });

    if (this._extendClasses) {
      this._extendClasses.forEach(function (c) {
        return _this.removeClass(c);
      });
    }

    this._extendClasses = value;

    this._extendClasses.forEach(function (c) {
      return _this.addClass(c);
    });
  },
  get: function get() {
    return this._extendClasses || [];
  }
};

TOCItem.prototype.rename = function () {
  this.addClass('as-renaming');
  var name = this.name;
  var textWidth = utils_measureText(name, '14px Arial, Helvetica, sans-serif').width;
  this.$nameInput.addStyle('width', textWidth + 2 + 'px');
  this.$nameInput.value = name;
  this.$nameInput.focus();
  this.$nameInput.select();
  this.$nameInput.once('blur', function (event) {
    var event1;

    if (this.$nameInput.value !== name) {
      event1 = copyEvent(event, {
        originalEvent: event,
        type: 'renamefinish',
        newName: this.$nameInput.value,
        __promise__: Promise.resolve(true),
        waitFor: function waitFor(promise) {
          if (promise && promise.then) {
            this.__promise__ = promise;
          } else {
            this.__promise__ = Promise.resolve(promise);
          }
        }
      });
      this.emit('renamefinish', event1, this);

      event1.__promise__.then(function (result) {
        if (result === true) {
          this.name = event1.newName;
        } else if (typeof result === 'string') {
          this.name = result;
        }
      }.bind(this));
    }

    this.removeClass('as-renaming');
  }.bind(this));
};
/***
 * @memberOf TOCItem#
 * @type {{}}
 */


TOCItem.eventHandler = {};

TOCItem.eventHandler.keyDownNameInput = function (event) {
  var extendText = '';

  if (event.type === 'paste') {
    extendText = (event.clipboardData || window.clipboardData).getData('text') || '';
  } else if (event.key.length === 1 && !(event.ctrl && event.key === 'C')) {
    extendText = event.key;
  } else if (event.key === 'Enter') {
    this.$nameInput.blur();
  }

  if (extendText.length > 0) {
    this.$nameInput.addStyle('width', utils_measureText(this.$nameInput.value + extendText, '14px Arial, Helvetica, sans-serif').width + 2 + 'px');
  }

  setTimeout(function () {
    var name = this.$nameInput.value;
    this.$nameInput.addStyle('width', utils_measureText(name, '14px Arial, Helvetica, sans-serif').width + 2 + 'px');
  }.bind(this), 0);
};

TOCItem.eventHandler.checkedChange = function (event) {
  this.emit('checkedchange', {
    type: 'checkedchange',
    target: this,
    originalEvent: event
  }, this);
};

TOCItem.eventHandler.clickQuickMenuBtn = function (event) {
  this.emit('pressquickmenu', {
    type: 'pressquickmenu',
    originalEvent: event
  }, this);
};

TOCItem.eventHandler.click = function (event) {
  if (hitElement(this.$checkbox, event) || hitElement(this.$quickMenuBtn, event)) return;
  var now = Date.now();

  if (hitElement(this.$toggleCtn, event)) {
    this.emit('presstoggle', {
      originalEvent: event,
      type: 'presstoggle'
    }, this);
  } else {
    if (now - this._lastClickTime > 500) {
      this.emit('press', {
        type: 'press',
        originalEvent: event
      }, this);
    } else if (this.status === "close" || this.status === 'open') {
      this.emit('presstoggle', {
        originalEvent: event,
        type: 'presstoggle'
      }, this);
    }

    this._lastClickTime = now;
  }
};

absol_acomp_ACore.install(TOCItem);
/* harmony default export */ const js_TOCItem = (TOCItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TOCList.js








/***
 * @extends AElement
 * @constructor
 */

function TOCList() {
  this.$searchInput = null;
  this.$body = ACore_$('.as-toc-list-body', this);
  this.$searching = ACore_$('.as-toc-list-searching', this);
  this.rootController = new TOCVirtualRootController(this, [], this.$body);
  this.searchCache = {};
  this.savedState = {
    active: [],
    status: {}
  };
  /***
   * @name nodes
   * @type {{}[]}
   * @memberOf TOCList#
   */
}

TOCList.tag = 'TOCList'.toLowerCase();

TOCList.render = function () {
  return ACore_({
    extendEvent: ['pressnode', 'checkednodechange', 'pressnodequickmmenu', 'statechange'],
    "class": 'as-toc-list',
    child: ['.as-toc-list-body', '.as-toc-list-searching']
  });
};

TOCList.prototype.applySavedState = function () {
  var savedStatus = this.savedState.status;

  function visitArr(arr) {
    arr.forEach(function (ct) {
      var status = savedStatus[ct.ident];

      if (status) {
        ct.status = status;
      }

      savedStatus[ct.ident] = ct.status;
      visitArr(ct.children);
    });
  }

  visitArr(this.rootController.children);

  if (this.savedState.active) {
    this.savedState.active.forEach(function (ident) {
      var activeCt = this.findControllerByIdent(ident);
      if (activeCt) activeCt.active();
    }.bind(this));
  }
};

TOCList.prototype.resetSavedState = function () {
  this.savedState = {
    active: null,
    status: {}
  };
};

TOCList.prototype.saveState = function () {
  var oldState = this.savedState;
  var savedState = {
    active: [],
    status: {}
  };
  var changed = false;

  function visitArr(arr) {
    arr.forEach(function (ct) {
      savedState.status[ct.ident] = ct.status;
      changed = changed || savedState.status[ct.ident] !== oldState.status[ct.ident];

      if (ct.nodeElt.hasClass('as-active')) {
        savedState.active.push(ct.ident);
      }

      visitArr(ct.children);
    });
  }

  var oldActive = (oldState.active || []).slice();
  oldActive.sort();
  var newActive = (savedState.active || []).slice();
  newActive.sort();
  changed = changed || oldActive.join('/') !== newActive.join('/');
  visitArr(this.rootController.children);
  this.savedState = savedState;
  if (changed) this.notifySavedStateChange();
};

TOCList.prototype.notifySavedStateChange = function () {
  this.emit('statechange', {
    target: this,
    type: 'statechange'
  }, this);
};

TOCList.prototype.loadSavedState = function (savedState) {
  savedState = savedState || {};
  if (typeof savedState.active === 'string') savedState.active = [savedState.active];
  this.savedState = {
    active: savedState.active || [],
    status: savedState.status || {}
  };
  this.applySavedState();
};
/***
 * @param {number=} n
 */


TOCList.prototype.openAllNodeRecursive = function (n) {
  this.rootController.openRecursive(n);
  this.saveState();
};

TOCList.prototype.closeAllNodeRecursive = function () {
  this.rootController.closeRecursive();
  this.saveState();
};

TOCList.prototype.deactivateAllNode = function () {
  this.rootController.deactivateRecursive();
};
/***
 *
 * @param ident
 * @returns {TOCNodeController|null}
 */


TOCList.prototype.activeNode = function (ident) {
  var nodeCt = this.findControllerByIdent(ident);
  var parent;

  if (nodeCt) {
    nodeCt.active();
    parent = nodeCt.parent;

    while (parent) {
      if (parent.open && parent.status === 'close') parent.open();
      parent = parent.parent;
    }

    setTimeout(function () {
      vScrollIntoView(nodeCt.nodeElt);
    }, 100);
  }

  return nodeCt;
};

TOCList.prototype.getActivatedNodes = function () {
  var res = [];
  this.rootController.traverse(function (node) {
    if (node.activated) {
      res.push(node);
    }
  });
  return res;
};
/***
 *
 * @param {string} ident
 * @param {TOCNodeController|TOCVirtualRootController=} rootController
 * @returns {TOCNodeController}
 */


TOCList.prototype.findControllerByIdent = function (ident, rootController) {
  var res = null;
  rootController = rootController || this.rootController;

  function visitArr(arr) {
    arr.some(function (ct) {
      if (ct.ident + '' === ident + '') {
        res = ct;
        return true;
      }

      visitArr(ct.children);
    });
  }

  visitArr(rootController.children);
  return res;
};

TOCList.prototype.makeNodeController = function (nodeData) {
  return new TOCNodeController(this, nodeData, null);
};
/**
 *
 * @param query
 * @private
 * @returns {TOCVirtualRootController}
 */


TOCList.prototype._calcSearch = function (query) {
  var searchRootController = this.searchCache[query];
  if (searchRootController) return searchRootController;
  var itemTree = this.searchCache.__itemTree__;

  if (!itemTree) {
    itemTree = this.nodes.map(function visit(node) {
      var item = prepareSearchForItem({
        text: node.name,
        value: Object.assign({}, node)
      });

      if (node.children && node.children.length > 0) {
        item.items = node.children.map(visit);
      }

      return item;
    });
    this.searchCache.__itemTree__ = itemTree;
  }

  var resultItemTree = searchTreeListByText(query, itemTree);
  var resultNodes = resultItemTree.map(function visit2(item) {
    var node = Object.assign({}, item.value);
    delete node.children;

    if (item.items && item.items.length > 0) {
      node.children = item.items.map(visit2);
    }

    return node;
  });
  this.searchCache[query] = new TOCVirtualRootController(this, resultNodes);
  return this.searchCache[query];
};

TOCList.prototype.search = function (query) {
  query = query || '';
  query = query.trim().replace('\s(\s+)', ' ');

  var searchRoot = this._calcSearch(query);

  var activeNodeCt;

  if (query.length === 0) {
    this.removeClass('as-searching');
    this.$searching.clearChild();
  } else {
    this.addClass('as-searching');
    this.$searching.clearChild();
    searchRoot.openRecursive();
    activeNodeCt = this.findControllerByIdent(this.savedState.active, searchRoot);
    if (activeNodeCt) activeNodeCt.active();
    searchRoot.view = this.$searching;
  }
};

TOCList.property = {};
TOCList.property.nodes = {
  /***
   * @this TOCList
   * @param nodes
   */
  set: function set(nodes) {
    this.searchCache = {};
    nodes = nodes || [];
    this.rootController = new TOCVirtualRootController(this, nodes);
    this.rootController.view = this.$body;
    this.applySavedState();
  },
  get: function get() {
    return this.rootController.nodes;
  }
};
TOCList.property.searchInput = {
  /***
   * @this TOCList
   */
  set: function set(elt) {
    if (this.$searchInput) {
      this.$searchInput.off('stoptyping', this.eventHandler.searchTextInputModify);
    }

    this.$searchInput = elt;

    if (this.$searchInput) {
      this.$searchInput.on('stoptyping', this.eventHandler.searchTextInputModify);
    }
  },

  /***
   * @this TOCList
   */
  get: function get() {
    return this.$searchInput;
  }
};
/***
 * @memberOf TOCList#
 * @type {{}}
 */

TOCList.eventHandler = {};

TOCList.eventHandler.pressNode = function (nodeController, event) {
  var newEvent = copyEvent(event.originalEvent || event, {
    type: 'pressnode',
    target: this,
    originalEvent: event.originalEvent || event,
    controller: nodeController,
    nodeData: nodeController.nodeElt.nodeData,
    nodeElt: nodeController.nodeElt
  });
  this.emit('pressnode', newEvent, this);
};

TOCList.eventHandler.checkedNodeChange = function (nodeController, event) {
  var newEvent = {
    type: 'checkednodechange',
    target: this,
    originalEvent: event.originalEvent || event,
    controller: nodeController,
    nodeData: nodeController.nodeElt.nodeData,
    nodeElt: nodeController.nodeElt
  };
  this.emit('checkednodechange', newEvent, this);
};

TOCList.eventHandler.pressNodeQuickMenu = function (nodeController, event) {
  var newEvent = {
    type: 'pressnodequickmmenu',
    target: this,
    originalEvent: event.originalEvent || event,
    controller: nodeController,
    nodeData: nodeController.nodeElt.nodeData,
    nodeElt: nodeController.nodeElt
  };

  newEvent.showMenu = function (menuProps, onSelect) {
    var token = js_QuickMenu.show(nodeController.nodeElt.$quickMenuBtn, menuProps, [3, 4], onSelect, false);
    var blurTrigger = new tool_BlurTrigger([], 'click', function () {
      js_QuickMenu.close(token);
    }, 10, 30);
  };

  this.emit('pressnodequickmmenu', newEvent, this);
};
/***
 * @this TOCList
 */


TOCList.eventHandler.searchTextInputModify = function () {
  this.search(this.$searchInput.value);
};

absol_acomp_ACore.install(TOCList);
/***
 *
 * @param {TOCList} listElt
 * @param {{}[]} nodes
 * @constructor
 */

function TOCVirtualRootController(listElt, nodes) {
  Object.defineProperties(this, {
    root: {
      value: this
    }
  });
  this.listElt = listElt;
  this.level = -1;
  this.nodes = nodes;
  /***
   *
   * @type {TOCNodeController[]}
   */

  this.children = nodes.map(function (nodeData) {
    return new TOCNodeController(listElt, nodeData, this);
  }.bind(this));
  this._view = null;
  /****
   * @type {AElement}
   * @name view
   * @memberOf TOCVirtualRootController#
   */
}

TOCVirtualRootController.prototype.deactivateRecursive = function () {
  this.children.forEach(function (ct) {});
};

TOCVirtualRootController.prototype.openRecursive = function (n) {
  this.children.forEach(function (ct) {
    ct.openRecursive(n);
  });
};

TOCVirtualRootController.prototype.closeRecursive = function () {
  this.children.forEach(function (ct) {
    ct.closeRecursive();
  });
};

TOCVirtualRootController.prototype.getViewElements = function () {
  var ac = [];
  this.children.forEach(function (ct) {
    ct.getViewElements(ac);
  });
  return ac;
};

TOCVirtualRootController.prototype.indexOfChild = function (child) {
  for (var i = 0; i < this.children.length; ++i) {
    if (child === this.children[i] || this.children[i].ident === child) return i;
  }

  return -1;
};
/***
 *
 * @param {TOCNodeController} controller
 * @param {TOCNodeController} at
 * @returns {TOCVirtualRootController}
 */


TOCVirtualRootController.prototype.addChildBefore = function (controller, at) {
  var atIdx;

  if (at) {
    atIdx = this.indexOfChild(at);

    if (atIdx >= 0) {
      if (controller.parent) controller.remove();
      this.children.splice(atIdx, 0, controller);
      controller.__parent__ = this;

      if (at.nodeElt.parentElement) {
        addElementsBefore(at.nodeElt.parentElement, controller.getViewElements(), at.nodeElt);
      }

      this.updateStatus();
    } else {
      throw new Error("The node before which the new node is to be inserted is not a child of this node.");
    }
  } else {
    if (controller.parent) controller.remove();
    this.children.push(controller);
    if (this.view) this.addChild(controller.getViewElements());
    this.updateStatus();
  }

  controller.setLevelRecursive(this.level + 1);
  return this;
};

TOCVirtualRootController.prototype.addChild = function (controller) {
  this.addChildBefore(controller, null);
  return this;
};
/***
 *
 * @param {TOCNodeController} controller
 * @param at
 */


TOCVirtualRootController.prototype.addChildAfter = function (controller, at) {
  var atIdx;
  var lastElement;

  if (at) {
    atIdx = this.indexOfChild(at);

    if (atIdx === this.children.length) {
      if (controller.parent) controller.remove();
      controller.__parent__ = this;
      this.children.push(controller);
      if (this.view) this.view.addChild(controller.getViewElements());
    } else if (atIdx >= 0) {
      if (controller.parent) controller.remove();
      controller.__parent__ = this;
      this.children.splice(atIdx, 0, controller);

      if (at.nodeElt.parentElement) {
        lastElement = at.getViewElements().pop();
        addElementAfter(at.nodeElt.parentElement, controller.getViewElements(), lastElement);
      }
    } else {
      throw new Error("The node before which the new node is to be inserted is not a child of this node.");
    }
  } else {
    if (controller.parent) controller.remove();
    controller.__parent__ = this;
    this.children.unshift(controller);
    addElementAfter(this.view, controller.getViewElements(), this.view.firstChild);
  }

  return this;
};

TOCVirtualRootController.prototype.updateStatus = noop;
/***
 * @param {TOCNodeController} child
 * @returns {TOCVirtualRootController|TOCNodeController}
 */

TOCVirtualRootController.prototype.removeChild = function (child) {
  var idx = this.children.indexOf(child);

  if (idx >= 0) {
    this.children.splice(idx, 1);
    child.getViewElements().forEach(function (elt) {
      elt.remove();
    });
    this.updateStatus();
  }

  return this;
};
/***
 *
 * @param {function(nodeCt:TOCNodeController):(void|boolean)} callback return true to stop
 */


TOCVirtualRootController.prototype.traverse = function (callback) {
  this.children.some(function visit(ct) {
    return callback(ct) || ct.children.some(visit);
  });
};

Object.defineProperties(TOCVirtualRootController.prototype, {
  firstChild: {
    get: function get() {
      return this.children[0] || null;
    }
  },
  lastChild: {
    get: function get() {
      return this.children[this.children.length - 1] || null;
    }
  },
  view: {
    /***
     * @this TOCVirtualRootController
     * @param view
     */
    set: function set(view) {
      view = view || null;
      if (view === this._view) return;

      if (this._view) {
        this._view.clearChild();

        this._view.rootController = null;
        this._view = null;
      }

      if (view) {
        if (view.rootController) {
          view.rootController.view = null;
        }

        view.rootController = this;
        this._view = view;

        this._view.addChild(this.getViewElements());
      }
    },
    get: function get() {
      return this._view;
    }
  }
});
/***
 *
 * @param {TOCList} listElt
 * @param {{}} nodeData
 * @param {TOCNodeController|TOCVirtualRootController} parent
 * @constructor
 */

function TOCNodeController(listElt, nodeData, parent) {
  Object.defineProperties(this, {
    listElt: {
      value: listElt
    },
    __parent__: {
      value: parent,
      enumerable: false,
      writable: true
    }
  });
  this.level = parent ? parent.level + 1 : 0;
  /***
   * @type {TOCItem}
   */

  this.nodeElt = ACore_({
    tag: js_TOCItem.tag,
    props: {
      nodeData: nodeData,
      checked: !!nodeData.checked,
      name: nodeData.name,
      icon: nodeData.icon,
      level: this.level,
      controller: this,
      status: 'none',
      extendClasses: nodeData.extendClasses
    },
    on: {
      presstoggle: this.toggle.bind(this),
      press: this.ev_press.bind(this),
      checkedchange: this.ev_checkedChange.bind(this),
      pressquickmenu: this.ev_pressQuickMenu.bind(this)
    }
  });
  if (nodeData.hasQuickMenu === false) this.nodeElt.hasQuickMenu = false;
  this.nodeElt.on('presstoggle', this.listElt.saveState.bind(this.listElt));
  /***
   * @name children
   * @type {TOCNodeController[]}
   * @memberOf TOCNodeController#
   */

  if (nodeData.children && nodeData.children.length > 0) {
    this.nodeElt.status = 'close';
    this.children = nodeData.children.map(function (c) {
      return new TOCNodeController(listElt, c, this);
    }.bind(this));
  } else {
    this.children = [];
  }
}

TOCNodeController.prototype.indexOfChild = TOCVirtualRootController.prototype.indexOfChild;
TOCNodeController.prototype.traverse = TOCVirtualRootController.prototype.traverse;

TOCNodeController.prototype.updateStatus = function () {
  if (this.children.length === 0 && this.nodeElt.status !== 'none') {
    this.nodeElt.status = 'none';
  } else if (this.children.length > 0 && this.nodeElt.status === 'none') {
    this.nodeElt.status = 'close';
  }
};

TOCNodeController.prototype.deactivateRecursive = function () {
  this.nodeElt.removeClass('as-active');
  this.children.forEach(function (ct) {
    ct.deactivateRecursive();
  });
};

TOCNodeController.prototype.removeChild = TOCVirtualRootController.prototype.removeChild;

TOCNodeController.prototype.remove = function () {
  this.parent.removeChild(this);
};
/***
 *
 * @param {TOCNodeController} controller
 * @param {TOCNodeController} at
 * @returns {TOCNodeController}
 */


TOCNodeController.prototype.addChildBefore = function (controller, at) {
  var atIdx;

  if (at) {
    atIdx = this.indexOfChild(at);

    if (atIdx >= 0) {
      if (controller.parent) controller.remove();
      this.children.splice(atIdx, 0, controller);
      controller.__parent__ = this;

      if (this.status === 'open') {
        addElementsBefore(this.nodeElt.parentElement, controller.getViewElements(), at.nodeElt);
      }

      controller.setLevelRecursive(this.level + 1);
      this.updateStatus();
    } else {
      throw new Error("The node before which the new node is to be inserted is not a child of this node.");
    }
  } else {
    if (controller.parent) controller.remove();
    this.children.push(controller);
    this.updateStatus();

    if (this.status === "open") {
      addElementsBefore(this.nodeElt.parentElement, controller.getViewElements(), at.nodeElt);
    }
  }

  return this;
};

TOCNodeController.prototype.addChild = TOCVirtualRootController.prototype.addChild;

TOCNodeController.prototype.addChildAfter = function (controller, at) {
  throw new Error("Not implement!");
};

TOCNodeController.prototype.toggle = function () {
  if (this.status === 'close') this.open();else if (this.status === 'open') this.close();
};

TOCNodeController.prototype.open = function () {
  if (this.status !== 'close') return;
  this.nodeElt.status = 'open';
  var pE = this.nodeElt.parentElement;
  if (!pE) return;
  var veArr = this.getViewElements();
  veArr.shift();
  var at = pE.findChildAfter(this.nodeElt);

  if (at) {
    while (veArr.length > 0) {
      pE.addChildBefore(veArr.shift(), at);
    }
  } else {
    pE.addChild(veArr);
  }
};

TOCNodeController.prototype.close = function () {
  if (this.status !== 'open') return;
  var veArr = this.getViewElements();
  veArr.shift();

  while (veArr.length > 0) {
    veArr.pop().remove();
  }

  this.nodeElt.status = 'close';
};

TOCNodeController.prototype.getViewElements = function (ac) {
  if (ac === undefined) ac = [];
  ac.push(this.nodeElt);

  if (this.status === 'open' && this.children.length > 0) {
    this.children.forEach(function (ct) {
      ct.getViewElements(ac);
    });
  }

  return ac;
};

TOCNodeController.prototype.setLevelRecursive = function (value) {
  this.level = value;
  this.nodeElt.level = value;
  this.children.forEach(function (ct) {
    ct.setLevelRecursive(value + 1);
  });
};
/**
 *
 * @param {number=} level
 */


TOCNodeController.prototype.openRecursive = function (level) {
  if (typeof level === "number" && this.level >= level) return;

  if (this.status === 'close') {
    this.open();
  }

  this.children.forEach(function (ct) {
    ct.openRecursive(level);
  });
};

TOCNodeController.prototype.ev_press = function (event) {
  this.listElt.eventHandler.pressNode(this, event);
};

TOCNodeController.prototype.ev_checkedChange = function (event) {
  this.nodeElt.nodeData.checked = this.nodeElt.checked;
  this.listElt.eventHandler.checkedNodeChange(this, event);
};

TOCNodeController.prototype.ev_pressQuickMenu = function (event) {
  this.listElt.eventHandler.pressNodeQuickMenu(this, event);
};

TOCNodeController.prototype.ev_renameFinish = function (event) {};

TOCNodeController.prototype.closeRecursive = function () {
  if (this.status === 'open') {
    this.close();
  }

  this.children.forEach(function (ct) {
    ct.closeRecursive();
  });
};

TOCNodeController.prototype.rename = function () {};
/***
 *
 * @param {boolean=true} isActive default: true
 * @param {boolean=false} append default: false
 */


TOCNodeController.prototype.active = function (isActive, append) {
  var self = this;
  if (arguments.length === 0) isActive = true;
  append = !!append;
  var idx = this.listElt.savedState.active ? this.listElt.savedState.active.indexOf(this.ident) : -1;

  if (isActive) {
    this.root.traverse(function (ct) {
      if (ct === self) {
        ct.nodeElt.addClass('as-active');
      } else if (!append) ct.nodeElt.removeClass('as-active');
    });

    if (idx < 0) {
      this.listElt.savedState.active = this.listElt.savedState.active || [];

      if (append) {
        this.listElt.savedState.active.push(this.ident);
      } else {
        this.listElt.savedState.active = [this.ident];
      }

      this.listElt.notifySavedStateChange();
    }
  } else {
    if (idx >= 0) {
      if (append) {
        this.listElt.savedState.active.splice(idx, 1);
        this.nodeElt.removeClass('as-active');
      } else {
        this.listElt.savedState.active = [];
        this.root.traverse(function (ct) {
          ct.nodeElt.removeClass('as-active');
        });
      }
    }
  }
};

Object.defineProperties(TOCNodeController.prototype, {
  /***
   * @memberOf TOCNodeController#
   * @name status
   * @type {"open"|"close"|"none"}
   */
  status: {
    get: function get() {
      return this.nodeElt.status;
    },
    set: function set(value) {
      if (value === 'open' && this.nodeElt.status === 'close') this.open();else if (value === 'close' && this.nodeElt.status === 'open') this.close();
    }
  },
  root: {
    get: function get() {
      return this.parent ? this.parent.root : this;
    }
  },
  checked: {
    get: function get() {
      return !!this.nodeElt.nodeData.checked;
    },
    set: function set(value) {
      this.nodeElt.checked = !!value;
      this.nodeElt.nodeData.checked = !!value;
    }
  },
  name: {
    set: function set(value) {
      value = value || '';
      this.nodeElt.name = value;
      this.nodeElt.nodeData.name = value;
    },
    get: function get() {
      return this.nodeElt.nodeData.name;
    }
  },
  ident: {
    get: function get() {
      return this.nodeElt.nodeData.ident;
    },
    set: function set(value) {
      this.nodeElt.nodeData.ident = value;
    }
  },
  nodeData: {
    get: function get() {
      return this.nodeElt.nodeData;
    },
    set: function set(value) {
      this.nodeElt.nodeData = value;
    }
  },
  parent: {
    get: function get() {
      return this.__parent__;
    }
  },
  firstChild: {
    get: function get() {
      return this.children[0] || null;
    }
  },
  lastChild: {
    get: function get() {
      return this.children[this.children.length - 1] || null;
    }
  },
  activated: {
    get: function get() {
      return this.nodeElt.hasClass('as-active');
    }
  }
});
/* harmony default export */ const js_TOCList = (TOCList);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/ckplaceholder.css
var ckplaceholder = __webpack_require__(9538);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/ckcontentstyle.css.tpl
/* harmony default export */ const ckcontentstyle_css = ("\r\n.as-ck-alert {\r\n    padding: .75rem 1.25rem;\r\n    margin-bottom: 1rem;\r\n    border: 1px solid transparent;\r\n    border-radius: .188rem;\r\n}\r\n\r\n.as-ck-alert.as-variant-notice {\r\n    color: #7b5700;\r\n    background-color: #fbedcc;\r\n    border-color: #fae6b8;\r\n}\r\n\r\n.as-ck-alert.as-variant-warning {\r\n    color: #852d19;\r\n    background-color: #ffddd6;\r\n    border-color: #ffd0c5;\r\n}\r\n\r\n.as-ck-alert.as-variant-info {\r\n    color: #352c64;\r\n    background-color: #e0ddf2;\r\n    border-color: #d4cfed;\r\n}\r\n\r\n.as-ck-alert.as-variant-success {\r\n    color: #2a601f;\r\n    background-color: #dcf1d8;\r\n    border-color: #ceebc8;\r\n}\r\n\r\n\r\n.cke_contents_ltr ul {\r\n    list-style: none;\r\n}\r\n\r\n.cke_contents_ltr ul li {\r\n    position: relative;\r\n}\r\n\r\n.cke_contents_ltr ul li::before {\r\n    color: #007bff;\r\n    content: '●';\r\n    position: absolute;\r\n    left: -1.2em;\r\n    top: -0.1em;\r\n    display: inline-block;\r\n}\r\n\r\n.cke_contents_ltr thead {\r\n    background-color: #d6d6d6;\r\n\r\n}\r\n\r\n.cke_contents_ltr table {\r\n    border-collapse: collapse;\r\n}\r\n\r\n.cke_contents_ltr table[align=\"center\"] {\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n}\r\n\r\n.cke_contents_ltr table[align=\"right\"] {\r\n    margin-left: auto;\r\n}\r\n\r\n\r\n.cke_contents_ltr thead td {\r\n    padding: 10px;\r\n    border: 1px solid #efefef;\r\n    font-weight: bold;\r\n}\r\n\r\n.cke_contents_ltr thead td:last-child {\r\n    border-right-color: #dddddd;\r\n}\r\n\r\n\r\n.cke_contents_ltr thead td:first-child {\r\n    border-left-color: #dddddd;\r\n}\r\n\r\n\r\n.cke_contents_ltr tbody td {\r\n\r\n}\r\n\r\n.cke_contents_ltr tbody tr:nth-child(odd) {\r\n    background-color: rgb(245, 245, 245);\r\n}\r\n\r\n.cke_contents_ltr tbody tr:nth-child(even) {\r\n    background-color: white;\r\n}\r\n\r\n.cke_contents_ltr tbody td {\r\n    padding: 5px 10px;\r\n    border: 1px solid #ddd;\r\n}\r\n\r\n\r\n.cke_button_icon.cke_button__insert_expression_icon {\r\n    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik01LDNIN1Y1SDVWMTBBMiwyIDAgMCwxIDMsMTJBMiwyIDAgMCwxIDUsMTRWMTlIN1YyMUg1QzMuOTMsMjAuNzMgMywyMC4xIDMsMTlWMTVBMiwyIDAgMCwwIDEsMTNIMFYxMUgxQTIsMiAwIDAsMCAzLDlWNUEyLDIgMCAwLDEgNSwzTTE5LDNBMiwyIDAgMCwxIDIxLDVWOUEyLDIgMCAwLDAgMjMsMTFIMjRWMTNIMjNBMiwyIDAgMCwwIDIxLDE1VjE5QTIsMiAwIDAsMSAxOSwyMUgxN1YxOUgxOVYxNEEyLDIgMCAwLDEgMjEsMTJBMiwyIDAgMCwxIDE5LDEwVjVIMTdWM0gxOU0xMiwxNUExLDEgMCAwLDEgMTMsMTZBMSwxIDAgMCwxIDEyLDE3QTEsMSAwIDAsMSAxMSwxNkExLDEgMCAwLDEgMTIsMTVNOCwxNUExLDEgMCAwLDEgOSwxNkExLDEgMCAwLDEgOCwxN0ExLDEgMCAwLDEgNywxNkExLDEgMCAwLDEgOCwxNU0xNiwxNUExLDEgMCAwLDEgMTcsMTZBMSwxIDAgMCwxIDE2LDE3QTEsMSAwIDAsMSAxNSwxNkExLDEgMCAwLDEgMTYsMTVaIiAvPgo8L3N2Zz4=');\r\n    background-position: 0 0px;\r\n    background-size: 16px;\r\n}\r\n\r\n.cke_button_icon.cke_button__insert_variable_icon {\r\n    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0yMC40MSwzQzIxLjgsNS43MSAyMi4zNSw4Ljg0IDIyLDEyQzIxLjgsMTUuMTYgMjAuNywxOC4yOSAxOC44MywyMUwxNy4zLDIwQzE4LjkxLDE3LjU3IDE5Ljg1LDE0LjggMjAsMTJDMjAuMzQsOS4yIDE5Ljg5LDYuNDMgMTguNyw0TDIwLjQxLDNNNS4xNywzTDYuNyw0QzUuMDksNi40MyA0LjE1LDkuMiA0LDEyQzMuNjYsMTQuOCA0LjEyLDE3LjU3IDUuMywyMEwzLjYxLDIxQzIuMjEsMTguMjkgMS42NSwxNS4xNyAyLDEyQzIuMiw4Ljg0IDMuMyw1LjcxIDUuMTcsM00xMi4wOCwxMC42OEwxNC40LDcuNDVIMTYuOTNMMTMuMTUsMTIuNDVMMTUuMzUsMTcuMzdIMTMuMDlMMTEuNzEsMTRMOS4yOCwxNy4zM0g2Ljc2TDEwLjY2LDEyLjIxTDguNTMsNy40NUgxMC44TDEyLjA4LDEwLjY4WiIgLz4KPC9zdmc+');\r\n    background-position: 0 0px;\r\n    background-size: 16px;\r\n}\r\n\r\n.cke_button_icon.cke_button__insert_dynamic_link_icon {\r\n    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0zIDFDMS44OSAxIDEgMS44OSAxIDNWMTRDMSAxNS4xMSAxLjg5IDE2IDMgMTZIMTRDMTUuMTEgMTYgMTYgMTUuMTEgMTYgMTRWMTFIMTRWMTRIM1YzSDE0VjVIMTZWM0MxNiAxLjg5IDE1LjExIDEgMTQgMU05IDdDNy44OSA3IDcgNy44OSA3IDlWMTJIOVY5SDIwVjIwSDlWMThIN1YyMEM3IDIxLjExIDcuODkgMjIgOSAyMkgyMEMyMS4xMSAyMiAyMiAyMS4xMSAyMiAyMFY5QzIyIDcuODkgMjEuMTEgNyAyMCA3SDkiIC8+Cjwvc3ZnPg==');\r\n    background-position: 0 0px;\r\n    background-size: 16px;\r\n}\r\n\r\n\r\n.as-ck-widget-expression {\r\n    color: #1da1ff;\r\n}\r\n\r\n.as-ck-widget-variable {\r\n    color: #144f25;\r\n}\r\n\r\n\r\n.cke_button__image_mgn_dialog_icon {\r\n    background: url($basePath/plugins/icons.png) no-repeat 0 -960px !important;\r\n}\r\n\r\n\r\nbody .cke_contents_ltr h1,\r\nbody .cke_contents_ltr h2,\r\nbody .cke_contents_ltr h3,\r\nbody .cke_contents_ltr h4,\r\nbody .cke_contents_ltr h5,\r\nbody .cke_contents_ltr h6 {\r\n    font-weight: normal;\r\n    line-height: 1.2;\r\n}\r\n\r\nbody .cke_contents_ltr {\r\n    line-height: 1.6;\r\n    font-size: inherit;\r\n    font-family: sans-serif, Arial, Verdana, \"Trebuchet MS\", \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\r\n    background-color: #fff;\r\n    word-wrap: break-word;\r\n    text-align: left;\r\n}\r\n\r\n.cke_contents_ltr blockquote {\r\n    font-style: italic;\r\n    font-family: inherit;\r\n    border-style: solid;\r\n    border-color: #ccc;\r\n    border-width: 0;\r\n    padding-left: 20px;\r\n    padding-right: 8px;\r\n    border-left-width: 5px;\r\n}\r\n\r\nbody .cke_contents_ltr a {\r\n    color: #0782C1;\r\n}\r\n\r\nbody .cke_contents_ltr ol,\r\nbody .cke_contents_ltr ul,\r\nbody .cke_contents_ltr dl {\r\n    /* IE7: reset rtl list margin. (#7334) */\r\n    *margin-right: 0px;\r\n    /* Preserved spaces for list items with text direction different than the list. (#6249,#8049)*/\r\n    padding: 0 40px;\r\n}\r\n\r\n\r\nbody.cke_contents_ltr { /*editor*/\r\n    font-size: 14px;\r\n}\r\n\r\n\r\nbody .cke_contents_ltr hr\r\n{\r\n    border: 0px;\r\n    border-top: 1px solid #ccc;\r\n}\r\n\r\nbody .cke_contents_ltr img.right\r\n{\r\n    border: 1px solid #ccc;\r\n    float: right;\r\n    margin-left: 15px;\r\n    padding: 5px;\r\n}\r\n\r\nbody .cke_contents_ltr img.left\r\n{\r\n    border: 1px solid #ccc;\r\n    float: left;\r\n    margin-right: 15px;\r\n    padding: 5px;\r\n}\r\n\r\nbody .cke_contents_ltr pre\r\n{\r\n    white-space: pre-wrap; /* CSS 2.1 */\r\n    word-wrap: break-word; /* IE7 */\r\n    -moz-tab-size: 4;\r\n    tab-size: 4;\r\n}\r\n\r\nbody .cke_contents_ltr .marker\r\n{\r\n    background-color: Yellow;\r\n}\r\n\r\nbody .cke_contents_ltr span[lang]\r\n{\r\n    font-style: italic;\r\n}\r\n\r\nbody .cke_contents_ltr figure\r\n{\r\n    text-align: center;\r\n    outline: solid 1px #ccc;\r\n    background: rgba(0,0,0,0.05);\r\n    padding: 10px;\r\n    margin: 10px 20px;\r\n    display: inline-block;\r\n}\r\n\r\nbody .cke_contents_ltr figure > figcaption\r\n{\r\n    text-align: center;\r\n    display: block; /* For IE8 */\r\n}\r\n\r\nbody .cke_contents_ltr a > img {\r\n    padding: 1px;\r\n    margin: 1px;\r\n    border: none;\r\n    outline: 1px solid #0782C1;\r\n}\r\n\r\n/* Widget Styles */\r\nbody .cke_contents_ltr .code-featured\r\n{\r\n    border: 5px solid red;\r\n}\r\n\r\nbody .cke_contents_ltr .math-featured\r\n{\r\n    padding: 20px;\r\n    box-shadow: 0 0 2px rgba(200, 0, 0, 1);\r\n    background-color: rgba(255, 0, 0, 0.05);\r\n    margin: 10px;\r\n}\r\n\r\nbody .cke_contents_ltr .image-clean\r\n{\r\n    border: 0;\r\n    background: none;\r\n    padding: 0;\r\n}\r\n\r\nbody .cke_contents_ltr .image-clean > figcaption\r\n{\r\n    font-size: .9em;\r\n    text-align: right;\r\n}\r\n\r\nbody .cke_contents_ltr .image-grayscale\r\n{\r\n    background-color: white;\r\n    color: #666;\r\n}\r\n\r\nbody .cke_contents_ltr .image-grayscale img, img.image-grayscale\r\n{\r\n    filter: grayscale(100%);\r\n}\r\n\r\nbody .cke_contents_ltr .embed-240p\r\n{\r\n    max-width: 426px;\r\n    max-height: 240px;\r\n    margin:0 auto;\r\n}\r\n\r\nbody .cke_contents_ltr .embed-360p\r\n{\r\n    max-width: 640px;\r\n    max-height: 360px;\r\n    margin:0 auto;\r\n}\r\n\r\nbody .cke_contents_ltr .embed-480p\r\n{\r\n    max-width: 854px;\r\n    max-height: 480px;\r\n    margin:0 auto;\r\n}\r\n\r\nbody .cke_contents_ltr .embed-720p\r\n{\r\n    max-width: 1280px;\r\n    max-height: 720px;\r\n    margin:0 auto;\r\n}\r\n\r\nbody .cke_contents_ltr .embed-1080p\r\n{\r\n    max-width: 1920px;\r\n    max-height: 1080px;\r\n    margin:0 auto;\r\n}\r\n");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/ExpressionExtension.js


var ExpressionExtension_name = 'expression';
var command = 'insert_expression';

function init(editor) {
  editor.widgets.add(ExpressionExtension_name, {
    button: 'Create Expression',
    template: '<span class="as-ck-widget-expression">&#0123;&#0123; expression &#0125;&#0125;</span>',
    allowedContent: 'span(!as-ck-widget-expression)',
    requiredContent: 'span(as-ck-widget-expression)',
    upcast: function upcast(element) {
      return element.name === 'span' && element.hasClass('as-ck-widget-expression');
    }
  });
  editor.ui.addButton(command, {
    label: 'Insert expression',
    command: command
  });
  editor.addCommand(command, {
    exec: function exec(editor) {
      if (editor.placeHolderElt) {
        editor.placeHolderElt.emit('command', {
          command: command,
          target: editor,
          type: 'command'
        });
      }
    }
  });
}

var parserDiv = ACore_('div');

function explicit(data, placeHolderElt) {
  parserDiv.innerHTML = data;
  $$('.as-ck-widget-expression', parserDiv).forEach(function (elt) {
    var text = elt.innerHTML;
    text.replace(/&#0123;/g, '{').replace(/&#0125;/g, '}');
    elt.parentElement.replaceChild(ACore_({
      text: text
    }), elt);
  });
  return parserDiv.innerHTML;
}

function implicit(data, placeHolderElt) {
  var template = JSMaker_TemplateString.parse(data);
  return template.parts.slice().map(function (part) {
    if (part.type === 1) {
      return '<span class="as-ck-widget-expression">&#0123;&#0123; ' + part.data.trim() + ' &#0125;&#0125;</span>';
    } else return part.data;
  }).join('');
}

/* harmony default export */ const ExpressionExtension = ({
  name: ExpressionExtension_name,
  command: command,
  implicit: implicit,
  explicit: explicit,
  plugin: {
    requires: 'widget',
    init: init
  },
  extendMethods: {
    /***
     * @this CKPlaceholder
     * @memberOf CKPlaceholder#
     * @param expression
     *
     */
    insertExpression: function insertExpression(expression) {
      this.editor.insertHtml('<span class="as-ck-widget-expression">&#0123;&#0123; ' + expression.trim() + ' &#0125;&#0125;</span>');
    },
    getSelectedExpression: function getSelectedExpression() {
      var sel = this.editor.getSelection();
      if (!sel) return null;
      var elt = sel.getSelectedElement();
      if (!elt) return null;
      if (!elt.hasClass('cke_widget_wrapper_as-ck-widget-expression')) return null;
      var exp = elt.getText();
      exp = exp.replace(/&#0123;|&#0125;|\{|\}/g, '').trim();
      return exp;
    }
  }
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/SimpleTextExtension.js

var SimpleTextExtension_name = 'simple_text';

var SimpleTextExtension_parserDiv = ACore_('div');

function SimpleTextExtension_explicit(data, placeHolderElt) {
  SimpleTextExtension_parserDiv.innerHTML = data.replace(/&nbsp;/g, ' ');
  return SimpleTextExtension_parserDiv.innerText;
}

function SimpleTextExtension_implicit(data, placeHolderElt) {
  return data //.replace(/</g, '&lt;').replace(/</g, '&gt;').replace(/"/g, '&quot;').replace(/&/g, '&amp;')
  .replace(/[\r\n]/g, '');
}

/* harmony default export */ const SimpleTextExtension = ({
  name: SimpleTextExtension_name,
  implicit: SimpleTextExtension_implicit,
  explicit: SimpleTextExtension_explicit
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/VariableExtension.js


var VariableExtension_name = 'variable';
var VariableExtension_command = 'insert_variable';

function VariableExtension_init(editor) {
  editor.widgets.add(VariableExtension_name, {
    button: 'Create Variable',
    template: '<span class="as-ck-widget-variable" title="variable">variable</span>',
    allowedContent: 'span(!as-ck-widget-variable)',
    requiredContent: 'span(as-ck-widget-variable)',
    upcast: function upcast(element) {
      return element.name === 'span' && element.hasClass('as-ck-widget-variable');
    }
  });
  editor.ui.addButton(VariableExtension_command, {
    label: 'Insert Variable',
    command: VariableExtension_command
  });
  editor.addCommand(VariableExtension_command, {
    exec: function exec(editor) {
      if (editor.placeHolderElt) {
        editor.placeHolderElt.emit('command', {
          command: VariableExtension_command,
          target: editor,
          type: 'command'
        });
      }
    }
  });
}

var VariableExtension_parserDiv = ACore_('div');

function VariableExtension_explicit(data, placeHolderElt) {
  VariableExtension_parserDiv.innerHTML = data;
  $$('.as-ck-widget-variable', VariableExtension_parserDiv).forEach(function (elt) {
    var text = elt.innerHTML;
    elt.parentElement.replaceChild(ACore_({
      text: text
    }), elt);
  });
  return VariableExtension_parserDiv.innerHTML;
}

var tokenRgx = /("([^\\"]|(\\.))*")|([a-zA-Z_$A-Z]([a-zA-Z_$A-Z0-9]*))/g;

function VariableExtension_implicit(data, placeHolderElt) {
  data = (data || '') + '';
  data = data.replace(tokenRgx, function (full, isString, u1, u2, isIdent) {
    if (isIdent && placeHolderElt.variables && placeHolderElt.variables[isIdent]) {
      return placeHolderElt.makeVariableHtml(isIdent);
    } else return full;
  });
  return data;
}

/* harmony default export */ const VariableExtension = ({
  name: VariableExtension_name,
  command: VariableExtension_command,
  implicit: VariableExtension_implicit,
  explicit: VariableExtension_explicit,
  plugin: {
    requires: 'widget',
    init: VariableExtension_init
  },
  extendMethods: {
    makeVariableHtml: function makeVariableHtml(variable, text) {
      variable = variable.trim();

      if (this.variables && this.variables[variable]) {
        text = this.variables[variable].text;
      }

      text = text || variable;
      return '<span class="as-ck-widget-variable"  title="' + text + '">' + variable.trim() + '</span>';
    },

    /***
     * @this CKPlaceholder
     * @memberOf CKPlaceholder#
     * @param variable
     *
     */
    insertVariable: function insertVariable(variable, text) {
      this.editor.insertHtml(this.makeVariableHtml(variable, text));
    },
    getSelectedVariable: function getSelectedVariable() {
      var sel = this.editor.getSelection();
      if (!sel) return null;
      var elt = sel.getSelectedElement();
      if (!elt) return null;
      if (!elt.hasClass('cke_widget_wrapper_as-ck-widget-variable')) return null;
      var exp = elt.getText();
      exp = exp.trim();
      return exp;
    }
  }
});
/***
 * @name variables
 * @type {{}}
 * @memberOf CKPlaceholder#
 */
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/DynamicLinkExtension.js

var DynamicLinkExtension_name = 'dynamic_link';
var DynamicLinkExtension_command = 'insert_dynamic_link';

function DynamicLinkExtension_init(editor) {
  editor.widgets.add(DynamicLinkExtension_name, {
    button: 'Create Dynamic Link',
    template: '<a class="as-ck-widget-dynamic-link" data-link-id="1234" href="https://absol.cf">absol.cf</a>',
    allowedContent: 'a(!as-ck-widget-dynamic-link)',
    requiredContent: 'a(as-ck-widget-dynamic-link)',
    upcast: function upcast(element) {
      return element.name === 'a' && element.hasClass('as-ck-widget-dynamic-link');
    }
  });
  editor.ui.addButton(DynamicLinkExtension_command, {
    label: 'Insert Dynamic Link',
    command: DynamicLinkExtension_command
  });
  editor.addCommand(DynamicLinkExtension_command, {
    exec: function exec(editor) {
      if (editor.placeHolderElt) {
        editor.placeHolderElt.emit('command', {
          command: DynamicLinkExtension_command,
          target: editor,
          type: 'command'
        });
      }
    }
  });
}

var DynamicLinkExtension_parserDiv = ACore_('div');

function DynamicLinkExtension_explicit(data, placeHolderElt) {
  DynamicLinkExtension_parserDiv.innerHTML = data;
  $$('.as-ck-widget-dynamic-link', DynamicLinkExtension_parserDiv).forEach(function (elt) {});
  return DynamicLinkExtension_parserDiv.innerHTML;
}

function DynamicLinkExtension_implicit(data, placeHolderElt) {
  DynamicLinkExtension_parserDiv.innerHTML = data;
  $$('.as-ck-widget-dynamic-link', DynamicLinkExtension_parserDiv).forEach(function (elt) {
    var id = elt.getAttribute('data-link-id');
    var info = placeHolderElt.dynamicLinks && placeHolderElt.dynamicLinks[id];

    if (info) {
      elt.setAttribute('href', info.href);
      elt.innerHTML = info.text || info.href;
    }
  });
  return DynamicLinkExtension_parserDiv.innerHTML;
}

/* harmony default export */ const DynamicLinkExtension = ({
  name: DynamicLinkExtension_name,
  command: DynamicLinkExtension_command,
  implicit: DynamicLinkExtension_implicit,
  explicit: DynamicLinkExtension_explicit,
  plugin: {
    requires: 'widget',
    init: DynamicLinkExtension_init
  },
  extendMethods: {
    /***
     * @this CKPlaceholder
     * @memberOf CKPlaceholder#
     * @param {string} id
     * @param {string=} href
     * @param {string=} text
     *
     */
    insertDynamicLink: function insertDynamicLink(id, href, text) {
      var info = this.dynamicLinks && this.dynamicLinks[id] || {
        href: '.',
        text: 'undefined'
      };

      if (!href) {
        href = info.href;
      }

      if (!text) {
        text = info.text;
      }

      this.editor.insertHtml('<a class="as-ck-widget-dynamic-link" data-link-id="' + id + '" href="' + href + '">' + text + '</a>');
    },
    getSelectedDynamicLink: function getSelectedDynamicLink() {
      var sel = this.editor.getSelection();
      if (!sel) return null;
      var elt = sel.getSelectedElement();
      if (!elt) return null;
      if (!elt.hasClass('cke_widget_wrapper_as-ck-widget-dynamic-link')) return null;
      return elt.$.firstChild && elt.$.firstChild.getAttribute('data-link-id') || null;
    }
  }
});
/***
 * @name dynamicLinks
 * @type {{}}
 * @memberOf CKPlaceholder#
 */
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/ImageFileExtension.js

var ImageFileExtension_name = 'image_mgn';
var ImageFileExtension_command = 'image_mgn_dialog';

function ImageFileExtension_init(editor) {
  editor.ui.addButton(ImageFileExtension_command, {
    label: 'Insert Image',
    command: ImageFileExtension_command
  });
  editor.addCommand(ImageFileExtension_command, {
    exec: function exec(editor) {
      if (window.contentModule && window.contentModule.chooseFile) {
        window.contentModule.chooseFile({
          type: "image_file"
        }).then(function (result) {
          if (result instanceof Array) result = result[0];

          if (result) {
            editor.insertHtml('<img alt="' + (result.title || result.name) + '" src="' + result.url + '"  style="max-width: 100%; border-width: 1px; border-style: solid;"/>');
          }
        }.bind(this));
      }
    }
  });
}

function ImageFileExtension_explicit(data, placeHolderElt) {
  return data;
}

var ImageFileExtension_tokenRgx = /("([^\\"]|(\\.))*")|([a-zA-Z_$A-Z]([a-zA-Z_$A-Z0-9]*))/g;

function ImageFileExtension_implicit(data, placeHolderElt) {
  return data;
}

/* harmony default export */ const ImageFileExtension = ({
  name: ImageFileExtension_name,
  command: ImageFileExtension_command,
  // implicit: implicit,
  // explicit: explicit,
  plugin: {
    init: ImageFileExtension_init
  }
});
/***
 * @name variables
 * @type {{}}
 * @memberOf CKPlaceholder#
 */
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/videourldialog.css
var videourldialog = __webpack_require__(1132);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/videourldialog/videoUtils.js


var videoUrlRules = [['youtube', /^https:\/\/www.youtube.com\//, /[^a-zAZ]v=([^&]+)/, function (o) {
  return 'https://www.youtube.com/embed/' + o.videoId;
}], ['youtube', /^https:\/\/www.youtube.com\/embed\//, /^https:\/\/www.youtube.com\/embed\/([^&\/]+)/, function (o) {
  return o.url;
}, function (o) {
  return 'https://www.youtube.com/watch?v=' + o.videoId;
}], ['vimeo', /^https:\/\/vimeo.com\//, /vimeo.com\/([0-9A-Za-z_]+)/, function (o) {
  return 'https://player.vimeo.com/video/' + o.videoId;
}], ['dailymotion', /^https:\/\/www.dailymotion.com\/video\//, /dailymotion\.com\/video\/([0-9A-Za-z_]+)/, function (o) {
  return 'https://www.dailymotion.com/embed/video/' + o.videoId;
}], ['facebook', /^https:\/\/www.facebook.com\/watch/, /[^a-zAZ]v=([^&]+)/, function (o) {
  return 'https://www.facebook.com/plugins/video.php?height=315&width=560&show_text=false&t=0&href=' + encodeURIComponent(o.url);
}, function (o) {
  return o.embedUrl;
}],
/* INVAID VIDEO ID   */
['youtube', /^https:\/\/www.youtube.com(\/|$)/, 'INVALID_URL'], ['vimeo', /^https:\/\/vimeo.com(\/|$)/, /vimeo.com\/([0-9A-Za-z_]+)/, 'INVALID_URL'], ['dailymotion', /^https:\/\/www.dailymotion.com(\/|$)/, null], ['facebook', /^https:\/\/www.facebook.com/, 'INVALID_URL'],
/********************/
['*', /./, /\/([^\/]+)$/, function (o) {
  return o.url;
}]];
function parseVideoUrl(url) {
  url = (url || "").trim();
  var res = {
    url: url
  };
  videoUrlRules.some(function (rule) {
    var matched = url.match(rule[1]);
    if (!matched) return false;
    res.hostType = rule[0];

    if (rule[2] instanceof RegExp) {
      matched = url.match(rule[2]);
      if (!matched) return false;
      res.videoId = matched[1];
    } else if (rule[2] === 'INVALID_URL') {
      res.videoId = "INVALID_URL";
    }

    if (res.videoId !== 'INVALID_URL') {
      res.embedUrl = rule[3](res);
    }

    if (typeof rule[4] === "function") {
      res.originalUrl = rule[4](res);
    } else {
      res.originalUrl = res.url;
    }

    return true;
  });
  return res;
}
var embedVideoSizeCache = {};
var metaRules = [['width', 'og:video:width', /content\s*=\s*"([0-9]+)/, 'number'], ['height', 'og:video:height', /content\s*=\s*"([0-9]+)/, 'number'], ['title', 'og:title', /content\s*=\s*"([^"]+)/, function (s) {
  return s.replace(/\s*-\s*Video Dailymotion$/, '');
}], ['image', 'og:image', /content\s*=\s*"([^"]+)/], ['width', /^video\s/, /width\s*=\s*"([0-9]+)/, 'number', true], ['height', /^video\s/, /height\s*=\s*"([0-9]+)/, 'number', true], ['image', /^img/, /src\s*=\s*"([^"]+)/, function (x) {
  return x.replace(/&amp;/g, '&');
}], ['title', "a href=\"https://www.facebook.com/watch", />([^<]+)/]];
function getEmbedVideoInfo(url, fullPage) {
  // fullPage = false;
  var xUrl = fullPage ? 'https://absol.cf/getpage.php?url=' : 'https://absol.cf/getpagemeta.php?url=';
  embedVideoSizeCache[url] = embedVideoSizeCache[url] || fetch(xUrl + encodeURIComponent(url)).then(function (res) {
    return res.text();
  }).then(function (metaText) {
    if (metaText === 'DOWNLOAD_ERROR') return {
      error: metaText
    };
    var lines = metaText.replace(/\n|(>\s*<)/g, '__spliter__').split('__spliter__');
    var res = {};
    lines.forEach(function (line) {
      metaRules.some(function (rule) {
        var key = rule[0];
        if (key in res) return false;
        var matched;

        if (rule[1] instanceof RegExp) {
          matched = line.match(rule[1]);
          if (!matched) return false;
        } else if (typeof rule[1] === "string") {
          if (line.indexOf(rule[1]) < 0) return false;
        }

        matched = line.match(rule[2]);
        if (!matched) return false;
        var value = matched[1];

        if (rule[3] === 'number') {
          value = parseFloat(value);
          if (isNaN(value)) return false;
        } else if (typeof rule[3] === "function") {
          value = rule[3](value);
        }

        res[key] = value;
        if (rule[4]) return false;
        return true;
      });
    });
    return res;
  });
  return embedVideoSizeCache[url];
}
var videoFileHeaderInfoCache = {};
function getVideoFileHeader(url) {
  videoFileHeaderInfoCache[url] = videoFileHeaderInfoCache[url] || new Promise(function (resolve) {
    var xhr = new XMLHttpRequest();
    xhr.open('HEAD', url, true);

    xhr.onreadystatechange = function () {
      if (this.readyState === 4) {
        if (this.status === 200) {
          var res = {
            type: xhr.getResponseHeader('Content-Type')
          };
          var title;
          var header = xhr.getAllResponseHeaders();

          if (header && (header.indexOf('inline') !== -1 || header.indexOf('attachment') !== -1)) {
            var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
            var matches = filenameRegex.exec(header);

            if (matches != null && matches[1]) {
              title = matches[1].replace(/['"]/g, '');
            }
          } else {
            title = url.split('/').filter(function (x) {
              return !!x;
            }).pop() || '';
            title = title.split('?').shift();
            title = decodeURIComponent(title);
          }

          if (title) res.title = title;
          resolve(res);
        } else {
          resolve({
            error: "STATUS_" + this.status
          });
        }
      }
    };

    xhr.send();
  });
  return videoFileHeaderInfoCache[url];
}
function getVideoPreview(url) {
  return new Promise(function (resolve, reject) {
    var renderDiv = ACore_({
      style: {
        position: 'fixed',
        left: 0,
        top: 0,
        overflow: 'hidden',
        'z-index': -1000,
        pointerEvents: 'none',
        visibility: 'hidden'
      }
    }).addTo(document.body);

    var videoElt = ACore_({
      tag: 'video',
      attr: {
        crossorigin: "anonymous",
        crossOrigin: "anonymous",
        preload: 'metadata',
        src: url
      },
      on: {
        loadeddata: function loadeddata() {
          clearTimeout(timeout);
          var scale = Math.min(200, videoElt.videoWidth, videoElt.videoHeight) / videoElt.videoWidth;
          var cWidth = Math.ceil(videoElt.videoWidth * scale);
          var cHeight = Math.ceil(videoElt.videoHeight * scale);

          var canvas = ACore_({
            tag: 'canvas',
            attr: {
              width: cWidth + 'px',
              height: cHeight + 'px'
            }
          }).addTo(renderDiv);

          var ctx = canvas.getContext('2d');
          ctx.drawImage(videoElt, 0, 0, cWidth, cHeight);
          var image = canvas.toDataURL('image/jpeg', 0.1);
          renderDiv.remove();
          resolve({
            width: videoElt.videoWidth,
            height: videoElt.videoHeight,
            image: image
          });
        },
        error: function error() {
          clearTimeout(timeout);
          renderDiv.remove();
          reject();
        }
      }
    });

    renderDiv.addChild(videoElt);
    videoElt.currentTime = 0.1;
    var timeout = setTimeout(function () {
      renderDiv.remove();
      reject();
    }, 5000);
  });
}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/videourldialog/VideoUrlDialog.js









/***
 * @extends Fragment
 * @constructor
 */

function VideoUrlDialog() {
  var _this = this;

  AppPattern_Fragment.call(this);
  this.task = null;
  this.pendingResult = null;
  Object.keys(VideoUrlDialog.prototype).filter(function (key) {
    return key.startsWith('ev_');
  }).forEach(function (key) {
    _this[key] = _this[key].bind(_this);
  });
}

HTML5_OOP.mixClass(VideoUrlDialog, AppPattern_Fragment);
VideoUrlDialog.prototype.cache = {};

VideoUrlDialog.prototype.createView = function () {
  var _this2 = this;

  this.$view = ACore_({
    tag: js_Modal.tag,
    "class": 'as-video-url-dialog-modal',
    child: {
      tag: js_MessageDialog.tag,
      "class": 'as-video-url-dialog',
      props: {
        dialogTitle: 'Video',
        dialogActions: [{
          text: 'OK',
          name: 'ok'
        }, {
          text: 'Cancel',
          name: 'cancel'
        }]
      },
      child: [{
        "class": 'as-video-url-dialog-row',
        child: [{
          tag: 'label',
          child: {
            text: 'URL*'
          }
        }, {
          tag: 'input',
          attr: {
            type: 'text'
          },
          "class": ['as-video-url-dialog-url', 'as-text-input']
        }]
      }, {
        "class": 'as-video-url-dialog-row',
        child: [{
          tag: 'label',
          child: {
            text: 'Video Info'
          }
        }, {
          tag: 'span',
          "class": ['as-video-url-dialog-video-info']
        }]
      }, {
        "class": 'as-video-url-dialog-row',
        child: [{
          tag: 'label',
          child: {
            text: 'Display Size'
          }
        }, {
          tag: 'input',
          "class": ['as-text-input', 'as-video-url-dialog-width'],
          attr: {
            type: 'number',
            min: '4'
          }
        }, {
          tag: 'span',
          child: {
            text: ' x '
          }
        }, {
          tag: 'input',
          "class": ['as-text-input', 'as-video-url-dialog-height'],
          attr: {
            type: 'number',
            min: '3'
          }
        }, {
          tag: 'checkbox',
          style: {
            marginLeft: '1em'
          },
          props: {
            text: 'keep ratio'
          }
        }]
      }, {
        "class": 'as-video-url-dialog-row',
        child: [{
          tag: 'label',
          child: {
            text: 'Preview'
          }
        }, {
          tag: 'img',
          "class": 'as-video-url-dialog-video-image'
        }]
      }]
    }
  });
  var keyTimeout = -1;
  this.$urlInput = ACore_$('.as-video-url-dialog-url', this.$view).on('paste', function (event) {
    setTimeout(_this2.ev_urlChange.bind(_this2, event), 100);
  }).on('change', this.ev_urlChange).on('keyup', function (event) {
    if (keyTimeout > 0) {
      clearTimeout(keyTimeout);
    }

    keyTimeout = setTimeout(function () {
      keyTimeout = -1;

      _this2.ev_urlChange(event);
    }, 300);
  });
  this.$dialog = ACore_$('.as-video-url-dialog', this.$view).on('action', this.ev_action);
  this.$info = ACore_$('.as-video-url-dialog-video-info', this.$view);
  this.$image = ACore_$('.as-video-url-dialog-video-image', this.$view);
  this.$width = ACore_$('.as-video-url-dialog-width', this.$view).on('change', this.ev_widthChange);
  this.$height = ACore_$('.as-video-url-dialog-height', this.$view).on('change', this.ev_heightChange);
  this.$ratio = ACore_$('checkbox', this.$view).on('change', this.ev_widthChange);
  this.$actionBtns = $$('.as-message-dialog-footer button', this.$view);
  this.$okBtn = this.$actionBtns[0];
};

VideoUrlDialog.prototype.onStart = function () {
  if (this.$view) {
    this.$urlInput.value = '';
    this.$width.value = '';
    this.$height.value = '';
    this.$info.innerHTML = '';
    this.$image.attr('src', undefined);
    this.$okBtn.disabled = true;
  }

  this._prevUrl = null;
};

VideoUrlDialog.prototype.onResume = function () {
  document.body.appendChild(this.getView());
  /*var testcase = [
      'https://www.facebook.com/watch?v=794088524953444',
      'https://www.youtube.com/watch?v=_YzngEllRgM&list=RDGMEMQ1dJ7wXfLlqCjwV0xfSNbAVMX8mhF6HgzVA&index=14',
      'https://vimeo.com/735513454',
      'https://www.dailymotion.com/video/x8d2trt',
      'https://www.youtube.com/embed/AoN__ZtGenc',
      'https://www.youtube.com',
      'https://absol.cf/share/10h.mp4(1).mp4',
      'https://absol.cf/share',
      'https://www.facebook.com/watch?v=386823333524397'
  ]
  this.$urlInput.value = testcase[0];
  this.ev_urlChange();*/
};

VideoUrlDialog.prototype.onPause = function () {
  this.getView().remove();
};

VideoUrlDialog.prototype.resolveCurrentTask = function (result) {
  if (this.task) {
    this.task.resolve(result || this.pendingResult);
    this.task = null;
  }
};

VideoUrlDialog.prototype.cancelCurrentTask = function () {
  if (this.task) {
    this.task.cancel();
    this.task = null;
  }
};

VideoUrlDialog.prototype.assignTask = function (task) {
  this.cancelCurrentTask();
  this._prevUrl = null;
  this.task = task;
  if (task.initInfo) this.onInfo(task.initInfo);
};

VideoUrlDialog.prototype.onInfo = function (info) {
  this.getView();
  this._prevUrl = info.url;

  if (info.error) {
    this.pendingResult = null;
    this.$image.attr('src', undefined);
    this.$info.innerHTML = '<span style="color:#ff2c2c">Can not load video!</span>';
    return;
  }

  this.pendingResult = info;
  if (info.image) this.$image.attr('src', info.image);else {
    this.$image.attr('src', undefined);
  }
  var infoText = [];

  if (isRealNumber(info.width) && isRealNumber(info.height)) {
    infoText.push([info.width, ' x ', info.height].join(''));
  }

  if ('displayWidth' in info) {
    this.$width.value = info.displayWidth;
    this.$height.value = info.displayHeight;
    this.$urlInput.value = info.url;
  } else if (isRealNumber(info.width) && isRealNumber(info.height)) {
    infoText.push([info.width, ' x ', info.height].join(''));
    this.$width.value = info.width;
    this.$height.value = info.height;
    this.$ratio.checked = true;
  } else {
    this.$width.value = 560;
    this.$height.value = 315;
  }

  if ('keepRatio' in info) {
    this.$ratio.checked = true;
  }

  if (info.type.startsWith('video/')) {
    infoText.push(info.type.substring(6).toUpperCase());
  }

  if (info.title) {
    infoText.push('<strong>' + info.title + '</strong>');
  }

  this.$info.innerHTML = infoText.join(', ');
  this.$okBtn.disabled = false;
};
/***
 * @param event
 */


VideoUrlDialog.prototype.ev_urlChange = function (event) {
  var _this3 = this;

  var newUrl = this.$urlInput.value;
  if (this._prevUrl === newUrl) return;
  this.$okBtn.disabled = true;
  this._prevUrl = newUrl;
  var info = parseVideoUrl(newUrl);
  var sync;

  if (info.videoId === 'INVALID_URL') {
    info.error = 'INVALID_URL';
    sync = Promise.resolve();
  } else if (info.hostType !== '*') {
    info.type = 'text/html';
    sync = getEmbedVideoInfo(info.originalUrl, info.hostType === 'facebook').then(function (result) {
      if (newUrl !== _this3._prevUrl) return;
      Object.assign(info, result);

      if (!isNaturalNumber(result.width)) {
        info.error = "INVALID_VIDEO";
      }
    });
  } else {
    sync = getVideoFileHeader(info.url).then(function (result) {
      if (newUrl !== _this3._prevUrl) return;
      Object.assign(info, result);

      if (result.error) {
        _this3.$info.innerHTML = '<span style="color:#ff2c2c">Can not load video!</span>';
      }
    }).then(function () {
      if (newUrl !== _this3._prevUrl) return;
      if (info.error) return;
      if (info.type.startsWith('video/')) return getVideoPreview(info.url).then(function (result1) {
        if (newUrl !== _this3._prevUrl) return;
        Object.assign(info, result1);
      }, function (error1) {
        info.error = "CAN_NOT_LOAD";
      });
    });
  }

  sync.then(function () {
    if (newUrl !== _this3._prevUrl) return;

    _this3.onInfo(info);
  });
};
/***
 * @param event
 */


VideoUrlDialog.prototype.ev_action = function (event) {
  var _this4 = this;

  setTimeout(function () {
    var action = event.action;

    if (action.name === 'cancel') {
      _this4.cancelCurrentTask();
    }

    var width = parseInt(_this4.$width.value);
    var height = parseInt(_this4.$height.value);
    var result = Object.assign({}, _this4.pendingResult);

    if (!isNaN(width) && !isNaN(height)) {
      result.displayWidth = width;
      result.displayHeight = height;
    } else {
      result.displayWidth = 560;
      result.displayHeight = 315;
    }

    result.keepRatio = _this4.$ratio.checked;

    if (action.name === 'ok') {
      _this4.resolveCurrentTask(result);
    }

    _this4.stop();
  }, 100);
};

VideoUrlDialog.prototype.ev_widthChange = function () {
  if (!this.$ratio.checked || !this.pendingResult || !isRealNumber(this.pendingResult.width) || !isRealNumber(this.pendingResult.height)) return;
  var ratio = this.pendingResult.width / this.pendingResult.height;
  var width = parseFloat(this.$width.value);
  this.$height.value = Math.round(width / ratio);
};

VideoUrlDialog.prototype.ev_heightChange = function () {
  if (!this.$ratio.checked || !this.pendingResult || !isRealNumber(this.pendingResult.width) || !isRealNumber(this.pendingResult.height)) return;
  var ratio = this.pendingResult.width / this.pendingResult.height;
  var height = parseFloat(this.$height.value);
  this.$width.value = Math.round(height * ratio);
};
/***
 * @type {VideoUrlDialog}
 */


var shareInstance;
function openVideUrlDialog(initInfo) {
  shareInstance = shareInstance || new VideoUrlDialog();
  return new Promise(function (rs) {
    var task = {
      resolved: false,
      canceled: false,
      resolve: function resolve(info) {
        if (this.resolved) return;
        this.resolved = true;
        rs(info);
      },
      cancel: function cancel() {
        if (this.resolved || this.canceled) return;
        if (shareInstance.task !== this) return;
        this.canceled = true;
        rs(null);
      },
      initInfo: initInfo
    };
    shareInstance.start();
    shareInstance.assignTask(task);
  });
}
/* harmony default export */ const videourldialog_VideoUrlDialog = ((/* unused pure expression or super */ null && (VideoUrlDialog)));
;// 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-acomp/js/ckeditor/VideoExtension.js



var VideoExtension_name = 'video';
var VideoExtension_command = 'insert_video';

function getInfoFromCKImage(elt) {
  var initInfo = null;

  if (elt.getAttribute('data-node-type') === 'video') {
    initInfo = JSON.parse(base64DecodeUnicode(elt.getAttribute('data-info')));
    initInfo.embedUrl = elt.getAttribute('data-embed-url');
    initInfo.image = elt.getAttribute('src');
    initInfo.image = elt.getAttribute('src');
  }

  return initInfo;
}

function VideoExtension_init(editor) {
  editor.ui.addButton(VideoExtension_command, {
    label: 'Insert Video',
    command: VideoExtension_command
  });
  editor.on('doubleclick', function (event) {
    var info;

    if (event.data && event.data.element) {
      info = getInfoFromCKImage(event.data.element);

      if (info) {
        event.cancel();
        editor.execCommand(VideoExtension_command);
      }
    }
  });
  editor.addCommand(VideoExtension_command, {
    exec: function exec(editor) {
      var initInfo;
      var sel = editor.getSelection();
      var elt;

      if (sel) {
        elt = sel.getSelectedElement();
      }

      if (elt) {
        initInfo = getInfoFromCKImage(elt);
      }

      openVideUrlDialog(initInfo).then(function (result) {
        var savedInfo = Object.assign({}, result);
        delete savedInfo.image;
        delete savedInfo.embedUrl;

        if (result) {
          var html = "<img src=\"".concat(result.image, "\" data-type=\"").concat(result.type, "\"                         onload=\"window.ckeditorVideoInit && window.ckeditorVideoInit(this)\"                         data-embed-url=\"").concat(result.embedUrl, "\"                         width=\"").concat(result.displayWidth, "px\"  height=\"").concat(result.displayHeight, "px\"                          data-node-type=\"video\"                           data-info=\"").concat(base64EncodeUnicode(JSON.stringify(savedInfo)), "\"\n                          \n                         >");
          editor.insertHtml(html);
        }
      });
    }
  });
}

window.ckeditorVideoInit = function (elt) {
  ACore_$(elt);
  if (!elt.isDescendantOf(document.body)) return;
  var newElt;
  var type = elt.attr('data-type');

  if (type.startsWith('video/')) {
    newElt = ACore_({
      tag: 'video',
      attr: {
        crossorigin: "anonymous",
        crossOrigin: "anonymous",
        preload: 'auto',
        src: elt.attr('data-embed-url'),
        width: elt.attr('width'),
        height: elt.attr('height'),
        controls: true
      }
    });
  } else {
    newElt = ACore_({
      tag: 'iframe',
      attr: {
        src: elt.attr('data-embed-url'),
        width: elt.attr('width'),
        height: elt.attr('height')
      }
    });
  }

  elt.selfReplace(newElt);
};

/* harmony default export */ const VideoExtension = ({
  name: VideoExtension_name,
  command: VideoExtension_command,
  plugin: {
    init: VideoExtension_init
  },
  extendMethods: {}
});
/***
 * @name variables
 * @type {{}}
 * @memberOf CKPlaceholder#
 */
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/plugins.js










var ckContentStyleUrl;
var ckPluginInitialized = false;
var CKExtensions = [ExpressionExtension, SimpleTextExtension, VariableExtension, DynamicLinkExtension, ImageFileExtension, VideoExtension];
var CKExtensionDict = CKExtensions.reduce(function (ac, cr) {
  ac[cr.name] = cr;
  return ac;
}, {});
var CKStylesSetDefault = [{
  name: 'Notice',
  element: 'p',
  attributes: {
    "class": 'as-ck-alert as-variant-notice'
  }
}, {
  name: 'Warning',
  element: 'p',
  attributes: {
    "class": 'as-ck-alert as-variant-warning'
  }
}, {
  name: 'Tip',
  element: 'p',
  attributes: {
    "class": 'as-ck-alert as-variant-info'
  }
}, {
  name: 'Success',
  element: 'p',
  attributes: {
    "class": 'as-ck-alert as-variant-success'
  }
}];
function ckInit() {
  if (!window.CKEDITOR) return;
  if (ckPluginInitialized) return;
  var styleCode = ckcontentstyle_css.replace(/\$basePath/g, CKEDITOR.basePath);
  ckContentStyleUrl = URL.createObjectURL(stringToBlob(styleCode, 'css'));
  ckPluginInitialized = true;
  document.head.appendChild(ACore_('<link rel="stylesheet" href="' + ckContentStyleUrl + '">'));
  CKEDITOR.stylesSet.add('as_styles_set_default', CKStylesSetDefault);
  CKExtensions.forEach(function (e) {
    if (e.plugin) {
      CKEDITOR.plugins.add(e.name, e.plugin);
    }
  });
}
function ckMakeDefaultConfig(config, extensions, holderElt) {
  ckInit();
  var userImageFileDialog = !!(window.contentModule && window.contentModule.chooseFile);
  /*
  * if (!this.attributes.directUpload && window.contentModule && window.contentModule.chooseFile) {
      window.contentModule.chooseFile({ type: "image_file" }).then(function (result) {
          if (result) {
              this.attributes.value = result;
          }
      }.bind(this));
  }
  * */

  config = config || {}; //disable special chars encode

  config.entities = false;
  config.stylesSet = ['as_styles_set_default'].concat(arrayUnique((config.stylesSet || '').trim().split(/\s*,\s*/))).filter(function (c) {
    return !!c;
  }).join(',');
  if (extensions) extensions.push('video');

  if (extensions && extensions.indexOf(VariableExtension.name) >= 0) {
    config.title = false;
  }

  if (config.toolbar === 'SIMPLE') {
    config.toolbar = [{
      name: 'basicstyles',
      items: ['Bold', 'Italic', 'Underline', 'TextColor', 'BGColor', 'NumberedList', 'BulletedList', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', userImageFileDialog ? 'image_mgn_dialog' : 'Image']
    }, // { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },
    {
      name: "extensions",
      items: extensions.map(function (eName) {
        if (CKExtensionDict[eName] && CKExtensionDict[eName].command) {
          return CKExtensionDict[eName].command;
        }
      }).filter(function (u) {
        return !!u;
      })
    }, {
      name: 'tools',
      items: ['Maximize']
    }];
  } else if (!config.toolbar || config.toolbar === "ADVANCED") {
    config.toolbar = [{
      name: 'basicstyles',
      items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript']
    }, {
      name: 'colors',
      items: ['TextColor', 'BGColor']
    }, {
      name: "format",
      items: ['CopyFormatting', 'RemoveFormat']
    }, {
      name: 'paragraph',
      items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote', 'CreateDiv', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']
    }, {
      name: 'styles',
      items: ['Styles', 'Format', 'Font', 'FontSize']
    }, {
      name: 'links',
      items: ['Link', 'Unlink', 'Anchor']
    }, {
      name: 'insert',
      items: [userImageFileDialog ? 'image_mgn_dialog' : 'Image', 'Table', 'HorizontalRule', 'Smiley', 'SpecialChar', 'PageBreak', 'Iframe']
    }, {
      name: 'tools',
      items: ['Maximize', 'ShowBlocks']
    }, {
      name: 'editing',
      items: ['Find', 'Replace']
    }, {
      name: "extensions",
      items: extensions.map(function (eName) {
        if (CKExtensionDict[eName] && CKExtensionDict[eName].command) {
          return CKExtensionDict[eName].command;
        }
      }).filter(function (u) {
        return !!u;
      })
    }, {
      name: 'document',
      items: ['Source']
    }];
  }

  config.toolbar = config.toolbar.filter(function (i) {
    return i.items && i.items.length > 0;
  });
  config.toolbar = [config.toolbar.reduce(function (ac, cr) {
    // if (ac.items.length > 0)
    //     ac.items.push('-');
    var items = cr.items.filter(function (it) {
      return it !== '-';
    });
    ac.items.push.apply(ac.items, items);
    return ac;
  }, {
    name: 'nogroup',
    items: []
  })];

  if (!config.height) {
    config.height = '500px';
  }

  var contentsCss = [ckContentStyleUrl];

  if (typeof config.contentsCss === "string") {
    contentsCss.push(config.contentsCss);
  } else if (config.contentsCss instanceof Array) {
    contentsCss.push.apply(contentsCss, config.contentsCss);
  }

  var has = contentsCss.some(function (url) {
    return url.indexOf('family=Material+Icons') >= 0;
  });

  if (!has) {
    contentsCss.push('https://fonts.googleapis.com/icon?family=Material+Icons');
  }

  has = contentsCss.some(function (url) {
    return url.indexOf(CKEDITOR.basePath + 'contents.css') >= 0;
  });

  if (!has) {
    contentsCss.push(CKEDITOR.basePath + 'contents.css?time=' + Math.random());
  }

  config.contentsCss = contentsCss;
  var extraPlugins = ['image_mgn'];

  if (holderElt.stickyToolbar) {
    extraPlugins.push('autogrow');
    config.autoGrow_minHeight = 400;
  }

  if (typeof config.extraPlugins === 'string') {
    extraPlugins.push.apply(extraPlugins, config.extraPlugins.trim().split(/\s*,\s*/));
  } else if (extraPlugins instanceof Array) {
    extraPlugins.push.apply(extraPlugins, config.extraPlugins);
  }

  extraPlugins = extraPlugins.filter(function (c) {
    return typeof c === 'string' && !!c;
  });
  CKExtensions.forEach(function (e) {
    if (extensions.indexOf(e.name) >= 0 && e.plugin) extraPlugins.push(e.name);
  });
  extraPlugins = arrayUnique(extraPlugins);
  config.extraPlugins = extraPlugins.join(',');
  config.allowedContent = true; //false: you must add button ui => bug

  Object.assign(config, {//style
    // htmlEncodeOutput: false,
    // entities: false,
    // basicEntities: false,
    // // config.cloudServices_uploadUrl: 'DDFFE2739B83A73DDF16AB641ECA2',
    // // config.cloudServices_tokenUrl: 'https://lab.daithangminh.vn/hr_system_settings/php/uploadMedia.php',
    // extraPlugins: 'LinkDB, Note',
    // filebrowserBrowseUrl: 'js/ckfinder/ckfinder.html',
    // filebrowserImageBrowseUrl: 'js/ckfinder/ckfinder.html?type=Images',
    // filebrowserFlashBrowseUrl: 'js/ckfinder/ckfinder.html?type=Flash',
    // filebrowserUploadUrl: 'js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Files',
    // filebrowserImageUploadUrl: 'js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Images',
    // filebrowserFlashUploadUrl: 'js/ckfinder/core/connector/php/connector.php?command=QuickUpload&type=Flash'
  });
  return config;
}
function ckAddDefaultStyleSet(ckEditor) {}
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/CKStickyToolbarController.js




function CKStickyToolbarController(holderElt) {
  this.editor = holderElt.editor;
  this.$elt = this.editor.container.$;
  this.activated = false;
  this['onScroll'] = this.onScroll.bind(this);
  this.trackedScroller = [];
}

CKStickyToolbarController.prototype.start = function () {
  if (this.activated) return;
  var c = this.$elt.parentElement;

  while (c) {
    c.addEventListener('scroll', this.onScroll);
    c = c.parentElement;
  }
};

CKStickyToolbarController.prototype.stop = function () {
  if (!this.activated) return;

  while (this.trackedScroller.length > 0) {
    this.trackedScroller.pop().removeEventListener('scroll', this.onScroll);
  }
};

CKStickyToolbarController.prototype.onScroll = function (event) {
  if (!HTML5_AElement.prototype.isDescendantOf.call(this.$elt, document.body)) {
    this.stop();
    return;
  }

  this.$toolbar = this.$toolbar || ACore_$('.cke_top', this.$elt);
  if (!this.$toolbar) return;
  var oBound = traceOutBoundingClientRect(this.$elt.parentElement);
  var bound = this.$elt.getBoundingClientRect();
  var tBound = this.$toolbar.getBoundingClientRect();

  if (bound.top < oBound.top && oBound.top + tBound.height + 30 < bound.bottom) {
    this.$toolbar.addStyle('transform', 'translate(0, ' + (oBound.top - bound.top) + 'px)');
  } else {
    this.$toolbar.removeStyle('transform');
  }
};

/* harmony default export */ const ckeditor_CKStickyToolbarController = (CKStickyToolbarController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/CKPlaceholder.js





HTML5_Dom.documentReady.then(function () {
  setTimeout(ckInit, 100);
});
/***
 * @extends AElement
 * @constructor
 */

function CKPlaceholder() {
  var _this = this;

  ckInit();
  this.$attachhook = ACore_('attachhook').addTo(this);
  this.$attachhook.once('attached', this.eventHandler.attached);
  this._pendingData = '';
  this.isReady = false;
  this.editor = null;
  this._extensions = [];
  this._config = this._makeInitConfig();
  this.afterReady = new Promise(function (rs) {
    _this.on('editorready', rs);
  });
  this.stickyToolbarCtrl = null;
  /***
   * @type {{}}
   * @name config
   * @memberOf CKPlaceholder#
   */

  /***
   * @type {string[]}
   * @name extensions
   * @memberOf CKPlaceholder#
   */

  /***
   *
   * @type {boolean}
   */

  this.stickyToolbar = true;
}

CKPlaceholder.tag = 'CKPlaceholder'.toLowerCase();

CKPlaceholder.render = function () {
  return ACore_({
    extendEvent: ['editorcreated', 'editorready', 'change', 'command', 'focus'],
    "class": 'as-ck-placeholder'
  });
};

CKPlaceholder.prototype.mode = 'replace';
/**
 *
 * @param {string}data
 * @private
 * @returns {string}
 */

CKPlaceholder.prototype._implicit = function (data) {
  if (typeof data !== "string") data = '';
  var self = this;
  return this._extensions.reverse().reduce(function (ac, cr) {
    var extension = CKExtensionDict[cr];

    if (extension.implicit) {
      ac = extension.implicit(ac, self);
    }

    return ac;
  }, data);
};
/**
 *
 * @param {string}data
 * @private
 * @returns {string}
 */


CKPlaceholder.prototype._explicit = function (data) {
  var self = this;
  return this._extensions.reduce(function (ac, cr) {
    var extension = CKExtensionDict[cr];

    if (extension && extension.explicit) {
      ac = extension.explicit(ac, self);
    }

    return ac;
  }, data);
};
/***
 * @returns {{}}
 * @protected
 */


CKPlaceholder.prototype._makeInitConfig = function () {
  return {};
};

CKPlaceholder.prototype.selectNext = function () {
  var editor = this.editor;
  if (!editor) return;
  var ranges = editor.getSelection().getRanges(); // var startIndex = editor.element.getHtml().indexOf(findString);
  // if (startIndex != -1)  {
  //     ranges[0].setStart(element.getFirst(), startIndex);
  //     ranges[0].setEnd(element.getFirst(), startIndex + findString.length);
  //     sel.selectRanges([ranges[0]]);
  // }
};
/***
 * @memberOf CKPlaceholder#
 * @type {{}}
 */


CKPlaceholder.eventHandler = {};
/***
 * @this CKPlaceholder
 */

CKPlaceholder.eventHandler.attached = function () {
  this.$attachhook.remove();
  this.editor = this.mode === 'replace' ? CKEDITOR.replace(this, ckMakeDefaultConfig(this.config, this.extensions, this)) : CKEDITOR.inline(this, ckMakeDefaultConfig(this.config, this.extensions, this));
  this.editor.placeHolderElt = this;
  this.editor.on('instanceReady', this.eventHandler.instanceReady);
  this.editor.on('change', this.eventHandler.change);

  if (this.mode === 'replace') {
    this.editor.on('focus', function (event) {
      this.emit('focus', {
        target: this,
        type: 'focus',
        originalEvent: event
      });
    }.bind(this));
  }

  this._extensions.forEach(function (name) {
    var e = CKExtensionDict[name];

    if (e && e.extendMethods) {
      Object.assign(this, e.extendMethods);
    }
  }.bind(this));

  this.emit('editorcreated', {
    type: 'editorcreated',
    target: this,
    editor: this.editor
  }, this);
};

CKPlaceholder.eventHandler.instanceReady = function () {
  this.isReady = true;

  if (this._pendingData && this._pendingData.length > 0) {
    this.editor.setData(this._implicit(this._pendingData));
    this._pendingData = null;
  }

  this.emit('editorready', {
    type: 'editorready',
    target: this,
    editor: this.editor
  }, this);
};

CKPlaceholder.eventHandler.change = function () {
  this.emit('change', {
    type: 'change',
    target: this,
    editor: this.editor
  }, this);
};

CKPlaceholder.property = {};
CKPlaceholder.property.data = {
  /***
   * @this CKPlaceholder
   * @param data
   */
  set: function set(data) {
    if (typeof data !== "string") data = '';

    if (this.isReady) {
      this.editor.setData(this._implicit(data));
    } else {
      this._pendingData = data;
    }
  },

  /***
   * @this CKPlaceholder
   * @returns {string}
   */
  get: function get() {
    if (this.isReady) return this._explicit(this.editor.getData());
    return this._pendingData;
  }
};
CKPlaceholder.property.rawData = {
  get: function get() {
    if (this.editor) this.editor.getData();else return this._implicit(this._pendingData);
  }
};
CKPlaceholder.property.config = {
  set: function set(value) {
    if (this.editor) {
      throw new Error("Can not set config after the CKEditor created");
    }

    this._config = Object.assign(this._makeInitConfig(), value);
  },
  get: function get() {
    return this._config;
  }
};
CKPlaceholder.property.extensions = {
  set: function set(value) {
    if (this.editor) {
      throw new Error("Can not set extensions after the CKEditor created");
    }

    value = value || [];
    if (typeof value === "string") value = [value];
    if (!(value instanceof Array)) value = [];
    this._extensions = value.filter(function (c) {
      return typeof c === "string" && c.length > 0 && CKExtensionDict[c];
    });
    this._extensions = value;
  },
  get: function get() {
    return this._extensions;
  }
};
CKPlaceholder.property.stickyToolbar = {
  set: function set(value) {
    var _this2 = this;

    if (value) {
      this.addClass('as-has-sticky-toolbar');
    } else {
      return this.removeClass('as-has-sticky-toolbar');
    }

    this.afterReady.then(function () {
      if (_this2.mode !== 'replace') return;

      if (_this2.stickyToolbar) {
        if (!_this2.stickyToolbarCtrl) {
          _this2.stickyToolbarCtrl = new ckeditor_CKStickyToolbarController(_this2);
        }

        _this2.stickyToolbarCtrl.start();
      } else {
        _this2.editor.container.$.classList.remove('as-has-sticky-toolbar');

        if (_this2.stickyToolbarCtrl) _this2.stickyToolbarCtrl.stop();
      }
    });
  },
  get: function get() {
    return this.hasClass('as-has-sticky-toolbar');
  }
};
absol_acomp_ACore.install(CKPlaceholder);
/* harmony default export */ const ckeditor_CKPlaceholder = (CKPlaceholder);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/CKInlineShortText.js








/***
 * @extends CKPlaceholder
 * @constructor
 */

function CKInlineShortText() {
  ckeditor_CKPlaceholder.call(this);
  this.once('editorcreated', this.eventHandler.afterEditorCreated).on('paste', this.eventHandler.paste, true).once('editorready', this.eventHandler.afterEditorReady);
}

HTML5_OOP.mixClass(CKInlineShortText, ckeditor_CKPlaceholder);
CKInlineShortText.tag = 'CKInlineShortText'.toLowerCase();
CKInlineShortText.property = Object.assign({}, ckeditor_CKPlaceholder.property);
CKInlineShortText.eventHandler = Object.assign({}, ckeditor_CKPlaceholder.eventHandler);

CKInlineShortText.render = function () {
  return ACore_({
    "class": 'as-ck-inline-short-text',
    extendEvent: ['editorcreated', 'editorready', 'change', 'command'],
    id: randomIdent(8),
    attr: {
      contenteditable: 'true'
    }
  });
};

CKInlineShortText.prototype.mode = 'inline';

CKInlineShortText.prototype._makeInitConfig = function () {
  var config = {
    toolbar: [{
      name: 'extension',
      items: arrayRemoveNone(this._extensions.map(function (eName) {
        if (CKExtensionDict[eName] && CKExtensionDict[eName].command) {
          return CKExtensionDict[eName].command;
        }
      }))
    }],
    keystrokes: [[13
    /* Enter */
    , 'blur'], [CKEDITOR.SHIFT + 13
    /* Shift + Enter */
    , 'blur']]
  };
  return config;
};

CKInlineShortText.property.extensions = Object.assign({}, ckeditor_CKPlaceholder.property.extensions, {
  set: function set(value) {
    value = value || [];
    value.push('simple_text');
    value = arrayUnique(value);
    ckeditor_CKPlaceholder.property.extensions.set.call(this, value);
    this._config = this._makeInitConfig();
  }
});

CKInlineShortText.prototype._hookScroll = function () {
  this.$scrollers = [];
  var c = this.parentElement;

  while (c) {
    this.$scrollers.push(c);
    c = c.parentElement;
  }

  this.$scrollers.push(document);
  this.$scrollers.forEach(function (elt) {
    elt.addEventListener('scroll', this.eventHandler.scroll);
  }.bind(this));
};

CKInlineShortText.prototype._unhookScroll = function () {
  this.$scrollers.forEach(function (elt) {
    elt.removeEventListener('scroll', this.eventHandler.scroll);
  }.bind(this));
};

CKInlineShortText.eventHandler.afterEditorCreated = function () {
  this.editor.on('paste', function (evt) {
    evt.cancel();
  });
};

CKInlineShortText.eventHandler.afterEditorReady = function () {
  this.$toolbarElt = this.$toolbarElt || ACore_$('#cke_' + this.attr('id'));
  this['removeToolbar'] = this.removeToolbar;

  this._hookScroll();

  setTimeout(this.eventHandler.tick, 5000);
};

CKInlineShortText.eventHandler.paste = function (event) {
  var self = this;
  var clipboardData = event.clipboardData || window.clipboardData;
  /**Safari bug */

  event.preventDefault();

  if (clipboardData) {
    if (clipboardData.items) {
      var items = Array.prototype.slice.call(clipboardData.items);
      var plainTextItems = items.filter(function (item) {
        return item.type.indexOf('text/plain') >= 0;
      });

      if (plainTextItems.length > 0) {
        var plainTextItem = plainTextItems[0]; //only one item

        plainTextItem.getAsString(function (text) {
          self.editor.insertHtml(self._implicit(text));
        });
      }
    } else {
      var text = event.clipboardData.getData('text/plain');

      if (text) {
        self.editor.insertHtml(self._implicit(text));
      }
    }
  }
};

CKInlineShortText.eventHandler.tick = function () {
  if (!this.isDescendantOf(document.body)) {
    this._unhookScroll();

    return;
  }

  setTimeout(this.eventHandler.tick, 5000);
};
/***
 * @this CKInlineShortText
 */


CKInlineShortText.eventHandler.scroll = function () {
  // If we don't have any active instance of CKEDITOR - return
  if (!CKEDITOR.currentInstance) {
    return;
  }

  if (CKEDITOR.currentInstance.element.$ !== this) return; // Save the elements we need to work with

  if (!this.isDescendantOf(document.body)) {
    this._unhookScroll();

    return;
  }

  this.$toolbarElt = this.$toolbarElt || ACore_$('#cke_' + this.attr('id'));
  var toolbarElt = this.$toolbarElt;
  if (!toolbarElt) return;
  var bound = this.getBoundingClientRect();
  var toolBound = toolbarElt.getBoundingClientRect();
  var outbound = traceOutBoundingClientRect(this);
  var left = Math.max(0, bound.left);
  var top = bound.top - toolBound.height;

  if (outbound.top > bound.bottom || outbound.bottom < bound.top) {
    top = -1000;
  } else if (bound.top < toolBound.height) {
    top = bound.bottom;
  }

  toolbarElt.addStyle({
    top: top + 'px',
    left: left + 'px'
  });
};

CKInlineShortText.property.removeToolbar = {
  set: function set(value) {
    this._removeToolbar = !!value;

    if (this.$toolbarElt) {
      if (this._removeToolbar) {
        this.$toolbarElt.addClass('as-hidden');
      } else {
        this.$toolbarElt.removeClass('as-hidden');
      }
    }
  },
  get: function get() {
    return this._removeToolbar;
  }
};
absol_acomp_ACore.install(CKInlineShortText);
/* harmony default export */ const ckeditor_CKInlineShortText = (CKInlineShortText);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/verticaltimeline.css
var verticaltimeline = __webpack_require__(431);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/VerticalTimeline.js



/***
 * @extends AElement
 * @constructor
 */

function VerticalTimeline() {
  this._current = 0;
  this._items = [];
  this.$items = [];
  this.current = 0;
}

VerticalTimeline.tag = 'VerticalTimeline'.toLowerCase();

VerticalTimeline.render = function () {
  return ACore_({
    "class": 'as-vertical-timeline',
    child: []
  });
};

VerticalTimeline.prototype._makeItem = function (item, i) {
  var iconElt = ACore_('span.mdi.mdi-circle');

  return ACore_({
    "class": 'as-vertical-timeline-item',
    props: {
      $icon: iconElt
    },
    child: [{
      "class": 'as-vertical-timeline-icon-ctn',
      child: iconElt
    }, {
      "class": 'as-vertical-timeline-tile',
      child: {
        tag: 'span',
        child: {
          text: item.text
        }
      }
    }]
  });
};

VerticalTimeline.property = {};
VerticalTimeline.property.items = {
  /***
   * @this VerticalTimeline
   * @param items
   */
  set: function set(items) {
    items = items || [];
    this._items = items;
    this.clearChild();
    this.$items = items.map(function (item, i) {
      return this._makeItem(item, i);
    }.bind(this));
    this.addChild(this.$items);
    this.current = this._current; //update
  },
  get: function get() {}
};
VerticalTimeline.property.current = {
  set: function set(value) {
    value = isRealNumber(value) ? value >> 0 : -1;
    this._current = value;
    var itemElt;

    for (var i = 0; i < this.$items.length; ++i) {
      itemElt = this.$items[i]; //.$icon.removeClass('');

      if (i < value) {
        itemElt.$icon.removeClass('mdi-numeric-' + (i + 1) + '-circle').removeClass('mdi-circle').addClass('mdi-check-circle');
        itemElt.removeClass('as-inactive').removeClass('as-active');
      } else if (i === value) {
        itemElt.$icon.addClass('mdi-numeric-' + (i + 1) + '-circle').removeClass('mdi-circle').removeClass('mdi-check-circle');
        itemElt.removeClass('as-inactive').addClass('as-active');
      } else {
        itemElt.addClass('as-inactive').removeClass('as-active');
        itemElt.$icon.removeClass('mdi-numeric-' + (i + 1) + '-circle').addClass('mdi-circle').removeClass('mdi-check-circle');
      }
    }
  },
  get: function get() {
    return Math.max(-1, Math.min(this._current, this._items.length));
  }
};
absol_acomp_ACore.install(VerticalTimeline);
/* harmony default export */ const js_VerticalTimeline = (VerticalTimeline);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MarkerClusterer.js
function MarkerClusterer_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { MarkerClusterer_typeof = function _typeof(obj) { return typeof obj; }; } else { MarkerClusterer_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return MarkerClusterer_typeof(obj); }

/**
 * @name MarkerClustererPlus for Google Maps V3
 * @version 2.1.1 [November 4, 2013]
 * @author Gary Little
 * @fileoverview
 * The library creates and manages per-zoom-level clusters for large amounts of markers.
 * <p>
 * This is an enhanced V3 implementation of the
 * <a href="http://gmaps-utility-library-dev.googlecode.com/svn/tags/markerclusterer/"
 * >V2 MarkerClusterer</a> by Xiaoxi Wu. It is based on the
 * <a href="http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerclusterer/"
 * >V3 MarkerClusterer</a> port by Luke Mahe. MarkerClustererPlus was created by Gary Little.
 * <p>
 * v2.0 release: MarkerClustererPlus v2.0 is backward compatible with MarkerClusterer v1.0. It
 *  adds support for the <code>ignoreHidden</code>, <code>title</code>, <code>batchSizeIE</code>,
 *  and <code>calculator</code> properties as well as support for four more events. It also allows
 *  greater control over the styling of the text that appears on the cluster marker. The
 *  documentation has been significantly improved and the overall code has been simplified and
 *  polished. Very large numbers of markers can now be managed without causing Javascript timeout
 *  errors on Internet Explorer. Note that the name of the <code>clusterclick</code> event has been
 *  deprecated. The new name is <code>click</code>, so please change your application code now.
 */

/**
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @name ClusterIconStyle
 * @class This class represents the object for values in the <code>styles</code> array passed
 *  to the {@link MarkerClusterer} constructor. The element in this array that is used to
 *  style the cluster icon is determined by calling the <code>calculator</code> function.
 *
 * @property {string} url The URL of the cluster icon image file. Required.
 * @property {number} height The display height (in pixels) of the cluster icon. Required.
 * @property {number} width The display width (in pixels) of the cluster icon. Required.
 * @property {Array} [anchorText] The position (in pixels) from the center of the cluster icon to
 *  where the text label is to be centered and drawn. The format is <code>[yoffset, xoffset]</code>
 *  where <code>yoffset</code> increases as you go down from center and <code>xoffset</code>
 *  increases to the right of center. The default is <code>[0, 0]</code>.
 * @property {Array} [anchorIcon] The anchor position (in pixels) of the cluster icon. This is the
 *  spot on the cluster icon that is to be aligned with the cluster position. The format is
 *  <code>[yoffset, xoffset]</code> where <code>yoffset</code> increases as you go down and
 *  <code>xoffset</code> increases to the right of the top-left corner of the icon. The default
 *  anchor position is the center of the cluster icon.
 * @property {string} [textColor="black"] The color of the label text shown on the
 *  cluster icon.
 * @property {number} [textSize=11] The size (in pixels) of the label text shown on the
 *  cluster icon.
 * @property {string} [textDecoration="none"] The value of the CSS <code>text-decoration</code>
 *  property for the label text shown on the cluster icon.
 * @property {string} [fontWeight="bold"] The value of the CSS <code>font-weight</code>
 *  property for the label text shown on the cluster icon.
 * @property {string} [fontStyle="normal"] The value of the CSS <code>font-style</code>
 *  property for the label text shown on the cluster icon.
 * @property {string} [fontFamily="Arial,sans-serif"] The value of the CSS <code>font-family</code>
 *  property for the label text shown on the cluster icon.
 * @property {string} [backgroundPosition="0 0"] The position of the cluster icon image
 *  within the image defined by <code>url</code>. The format is <code>"xpos ypos"</code>
 *  (the same format as for the CSS <code>background-position</code> property). You must set
 *  this property appropriately when the image defined by <code>url</code> represents a sprite
 *  containing multiple images. Note that the position <i>must</i> be specified in px units.
 */

/**
 * @name ClusterIconInfo
 * @class This class is an object containing general information about a cluster icon. This is
 *  the object that a <code>calculator</code> function returns.
 *
 * @property {string} text The text of the label to be shown on the cluster icon.
 * @property {number} index The index plus 1 of the element in the <code>styles</code>
 *  array to be used to style the cluster icon.
 * @property {string} title The tooltip to display when the mouse moves over the cluster icon.
 *  If this value is <code>undefined</code> or <code>""</code>, <code>title</code> is set to the
 *  value of the <code>title</code> property passed to the MarkerClusterer.
 */

/**
 * A cluster icon.
 *
 * @constructor
 * @extends google.maps.OverlayView
 * @param {Cluster} cluster The cluster with which the icon is to be associated.
 * @param {Array} [styles] An array of {@link ClusterIconStyle} defining the cluster icons
 *  to use for various cluster sizes.
 * @private
 */
function ClusterIcon(cluster, styles) {
  cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView);
  this.cluster_ = cluster;
  this.className_ = cluster.getMarkerClusterer().getClusterClass();
  this.styles_ = styles;
  this.center_ = null;
  this.div_ = null;
  this.sums_ = null;
  this.visible_ = false;
  this.setMap(cluster.getMap()); // Note: this causes onAdd to be called
}
/**
 * Adds the icon to the DOM.
 */


ClusterIcon.prototype.onAdd = function () {
  var cClusterIcon = this;
  var cMouseDownInCluster;
  var cDraggingMapByCluster;
  this.div_ = document.createElement("div");
  this.div_.className = this.className_;

  if (this.visible_) {
    this.show();
  }

  this.getPanes().overlayMouseTarget.appendChild(this.div_); // Fix for Issue 157

  this.boundsChangedListener_ = google.maps.event.addListener(this.getMap(), "bounds_changed", function () {
    cDraggingMapByCluster = cMouseDownInCluster;
  });
  this.div_.addEventListener("mousedown", function () {
    cMouseDownInCluster = true;
    cDraggingMapByCluster = false;
  });
  this.div_.addEventListener("click", function (e) {
    cMouseDownInCluster = false;

    if (!cDraggingMapByCluster) {
      var theBounds;
      var mz;
      var mc = cClusterIcon.cluster_.getMarkerClusterer();
      /**
       * This event is fired when a cluster marker is clicked.
       * @name MarkerClusterer#click
       * @param {Cluster} c The cluster that was clicked.
       * @event
       */

      google.maps.event.trigger(mc, "click", cClusterIcon.cluster_);
      google.maps.event.trigger(mc, "clusterclick", cClusterIcon.cluster_); // deprecated name
      // The default click handler follows. Disable it by setting
      // the zoomOnClick property to false.

      if (mc.getZoomOnClick()) {
        // Zoom into the cluster.
        mz = mc.getMaxZoom();
        theBounds = cClusterIcon.cluster_.getBounds();
        mc.getMap().fitBounds(theBounds); // There is a fix for Issue 170 here:

        setTimeout(function () {
          mc.getMap().fitBounds(theBounds); // Don't zoom beyond the max zoom level

          if (mz !== null && mc.getMap().getZoom() > mz) {
            mc.getMap().setZoom(mz + 1);
          }
        }, 100);
      } // Prevent event propagation to the map:


      e.cancelBubble = true;

      if (e.stopPropagation) {
        e.stopPropagation();
      }
    }
  });
  this.div_.addEventListener("mouseover", function () {
    var mc = cClusterIcon.cluster_.getMarkerClusterer();
    /**
     * This event is fired when the mouse moves over a cluster marker.
     * @name MarkerClusterer#mouseover
     * @param {Cluster} c The cluster that the mouse moved over.
     * @event
     */

    google.maps.event.trigger(mc, "mouseover", cClusterIcon.cluster_);
    google.maps.event.trigger(cClusterIcon.cluster_, "mouseover");
  });
  this.div_.addEventListener("mouseout", function () {
    var mc = cClusterIcon.cluster_.getMarkerClusterer();
    /**
     * This event is fired when the mouse moves out of a cluster marker.
     * @name MarkerClusterer#mouseout
     * @param {Cluster} c The cluster that the mouse moved out of.
     * @event
     */

    google.maps.event.trigger(mc, "mouseout", cClusterIcon.cluster_);
    google.maps.event.trigger(cClusterIcon.cluster_, "mouseout");
  });
  var mc = this.cluster_.getMarkerClusterer();

  if (mc.markers_.caculateSum !== undefined) {
    var infowindow = new google.maps.InfoWindow({
      maxWidth: 350
    });
    google.maps.event.addListener(this.cluster_, 'mouseover', function (event) {
      var tooltip = mc.markers_.caculateSum(this.cluster_.markers_);
      var content, style;

      if (MarkerClusterer_typeof(tooltip) == "object") {
        if (tooltip.style) style = tooltip.style;
        if (tooltip.element) content = tooltip.element;
      } else content = tooltip;

      if (style !== undefined) infowindow.setOptions(style);
      infowindow.setContent(content);
      var info = new google.maps.MVCObject();
      info.set('position', this.center_);
      info.set('anchorPoint', new google.maps.Point(0, -12));
      infowindow.open(mc.map, info);
    }.bind(this));
    google.maps.event.addListener(this.cluster_, 'mouseout', function (event) {
      infowindow.close();
    }.bind(this));
    google.maps.event.addListener(mc.map, "zoom_changed", function () {
      infowindow.close();
    });
  }
};
/**
 * Removes the icon from the DOM.
 */


ClusterIcon.prototype.onRemove = function () {
  if (this.div_ && this.div_.parentNode) {
    this.hide();
    google.maps.event.removeListener(this.boundsChangedListener_);
    google.maps.event.clearInstanceListeners(this.div_);
    this.div_.parentNode.removeChild(this.div_);
    this.div_ = null;
  }
};
/**
 * Draws the icon.
 */


ClusterIcon.prototype.draw = function () {
  if (this.visible_) {
    var pos = this.getPosFromLatLng_(this.center_);
    this.div_.style.top = pos.y + "px";
    this.div_.style.left = pos.x + "px";
  }
};
/**
 * Hides the icon.
 */


ClusterIcon.prototype.hide = function () {
  if (this.div_) {
    this.div_.style.display = "none";
  }

  this.visible_ = false;
};
/**
 * Positions and shows the icon.
 */


ClusterIcon.prototype.show = function () {
  if (this.div_) {
    var img = ""; // NOTE: values must be specified in px units

    var bp = this.backgroundPosition_.split(" ");
    var spriteH = parseInt(bp[0].trim(), 10);
    var spriteV = parseInt(bp[1].trim(), 10);
    var pos = this.getPosFromLatLng_(this.center_);
    this.div_.style.cssText = this.createCss(pos);
    img = "<img src='" + this.url_ + "' style='position: absolute; top: " + spriteV + "px; left: " + spriteH + "px; ";

    if (!this.cluster_.getMarkerClusterer().enableRetinaIcons_) {
      img += "clip: rect(" + -1 * spriteV + "px, " + (-1 * spriteH + this.width_) + "px, " + (-1 * spriteV + this.height_) + "px, " + -1 * spriteH + "px);";
    } else {
      img += "width: " + this.width_ + "px;" + "height: " + this.height_ + "px;";
    }

    img += "'>";
    this.div_.innerHTML = img + "<div style='" + "position: absolute;" + "top: " + this.anchorText_[0] + "px;" + "left: " + this.anchorText_[1] + "px;" + "color: " + this.textColor_ + ";" + "font-size: " + this.textSize_ + "px;" + "font-family: " + this.fontFamily_ + ";" + "font-weight: " + this.fontWeight_ + ";" + "font-style: " + this.fontStyle_ + ";" + "text-decoration: " + this.textDecoration_ + ";" + "text-align: center;" + "width: " + this.width_ + "px;" + "line-height:" + this.height_ + "px;" + "'>" + (this.cluster_.hideLabel_ ? ' ' : this.sums_.text) + "</div>";

    if (typeof this.sums_.title === "undefined" || this.sums_.title === "") {
      this.div_.title = this.cluster_.getMarkerClusterer().getTitle();
    } else {
      this.div_.title = this.sums_.title;
    }

    this.div_.style.display = "";
  }

  this.visible_ = true;
};
/**
 * Sets the icon styles to the appropriate element in the styles array.
 *
 * @param {ClusterIconInfo} sums The icon label text and styles index.
 */


ClusterIcon.prototype.useStyle = function (sums) {
  this.sums_ = sums;
  var index = Math.max(0, sums.index - 1);
  index = Math.min(this.styles_.length - 1, index);
  var style = this.styles_[index];
  this.url_ = style.url;
  this.height_ = style.height;
  this.width_ = style.width;
  this.anchorText_ = style.anchorText || [0, 0];
  this.anchorIcon_ = style.anchorIcon || [parseInt(this.height_ / 2, 10), parseInt(this.width_ / 2, 10)];
  this.textColor_ = style.textColor || "black";
  this.textSize_ = style.textSize || 11;
  this.textDecoration_ = style.textDecoration || "none";
  this.fontWeight_ = style.fontWeight || "bold";
  this.fontStyle_ = style.fontStyle || "normal";
  this.fontFamily_ = style.fontFamily || "Arial,sans-serif";
  this.backgroundPosition_ = style.backgroundPosition || "0 0";
};
/**
 * Sets the position at which to center the icon.
 *
 * @param {google.maps.LatLng} center The latlng to set as the center.
 */


ClusterIcon.prototype.setCenter = function (center) {
  this.center_ = center;
};
/**
 * Creates the cssText style parameter based on the position of the icon.
 *
 * @param {google.maps.Point} pos The position of the icon.
 * @return {string} The CSS style text.
 */


ClusterIcon.prototype.createCss = function (pos) {
  var style = [];
  style.push("cursor: pointer;");
  style.push("position: absolute; top: " + pos.y + "px; left: " + pos.x + "px;");
  style.push("width: " + this.width_ + "px; height: " + this.height_ + "px;");
  return style.join("");
};
/**
 * Returns the position at which to place the DIV depending on the latlng.
 *
 * @param {google.maps.LatLng} latlng The position in latlng.
 * @return {google.maps.Point} The position in pixels.
 */


ClusterIcon.prototype.getPosFromLatLng_ = function (latlng) {
  var pos = this.getProjection().fromLatLngToDivPixel(latlng);
  pos.x -= this.anchorIcon_[1];
  pos.y -= this.anchorIcon_[0];
  pos.x = parseInt(pos.x, 10);
  pos.y = parseInt(pos.y, 10);
  return pos;
};
/**
 * Creates a single cluster that manages a group of proximate markers.
 *  Used internally, do not call this constructor directly.
 * @constructor
 * @param {MarkerClusterer} mc The <code>MarkerClusterer</code> object with which this
 *  cluster is associated.
 */


function Cluster(mc) {
  this.markerClusterer_ = mc;
  this.map_ = mc.getMap();
  this.gridSize_ = mc.getGridSize();
  this.minClusterSize_ = mc.getMinimumClusterSize();
  this.averageCenter_ = mc.getAverageCenter();
  this.hideLabel_ = mc.getHideLabel();
  this.markers_ = [];
  this.center_ = null;
  this.bounds_ = null;
  this.clusterIcon_ = new ClusterIcon(this, mc.getStyles());
}
/**
 * Returns the number of markers managed by the cluster. You can call this from
 * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler
 * for the <code>MarkerClusterer</code> object.
 *
 * @return {number} The number of markers in the cluster.
 */


Cluster.prototype.getSize = function () {
  return this.markers_.length;
};
/**
 * Returns the array of markers managed by the cluster. You can call this from
 * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler
 * for the <code>MarkerClusterer</code> object.
 *
 * @return {Array} The array of markers in the cluster.
 */


Cluster.prototype.getMarkers = function () {
  return this.markers_;
};
/**
 * Returns the center of the cluster. You can call this from
 * a <code>click</code>, <code>mouseover</code>, or <code>mouseout</code> event handler
 * for the <code>MarkerClusterer</code> object.
 *
 * @return {google.maps.LatLng} The center of the cluster.
 */


Cluster.prototype.getCenter = function () {
  return this.center_;
};
/**
 * Returns the map with which the cluster is associated.
 *
 * @return {google.maps.Map} The map.
 * @ignore
 */


Cluster.prototype.getMap = function () {
  return this.map_;
};
/**
 * Returns the <code>MarkerClusterer</code> object with which the cluster is associated.
 *
 * @return {MarkerClusterer} The associated marker clusterer.
 * @ignore
 */


Cluster.prototype.getMarkerClusterer = function () {
  return this.markerClusterer_;
};
/**
 * Returns the bounds of the cluster.
 *
 * @return {google.maps.LatLngBounds} the cluster bounds.
 * @ignore
 */


Cluster.prototype.getBounds = function () {
  var i;
  var bounds = new google.maps.LatLngBounds(this.center_, this.center_);
  var markers = this.getMarkers();

  for (i = 0; i < markers.length; i++) {
    bounds.extend(markers[i].getPosition());
  }

  return bounds;
};
/**
 * Removes the cluster from the map.
 *
 * @ignore
 */


Cluster.prototype.remove = function () {
  this.clusterIcon_.setMap(null);
  this.markers_ = [];
  delete this.markers_;
};
/**
 * Adds a marker to the cluster.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to be added.
 * @return {boolean} True if the marker was added.
 * @ignore
 */


Cluster.prototype.addMarker = function (marker) {
  var i;
  var mCount;
  var mz;

  if (this.isMarkerAlreadyAdded_(marker)) {
    return false;
  }

  if (!this.center_) {
    this.center_ = marker.getPosition();
    this.calculateBounds_();
  } else {
    if (this.averageCenter_) {
      var l = this.markers_.length + 1;
      var lat = (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l;
      var lng = (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l;
      this.center_ = new google.maps.LatLng(lat, lng);
      this.calculateBounds_();
    }
  }

  marker.isAdded = true;
  this.markers_.push(marker);
  mCount = this.markers_.length;
  mz = this.markerClusterer_.getMaxZoom();

  if (mz !== null && this.map_.getZoom() > mz) {
    // Zoomed in past max zoom, so show the marker.
    if (marker.getMap() !== this.map_) {
      marker.setMap(this.map_);
    }
  } else if (mCount < this.minClusterSize_) {
    // Min cluster size not reached so show the marker.
    if (marker.getMap() !== this.map_) {
      marker.setMap(this.map_);
    }
  } else if (mCount === this.minClusterSize_) {
    // Hide the markers that were showing.
    for (i = 0; i < mCount; i++) {
      this.markers_[i].setMap(null);
    }
  } else {
    marker.setMap(null);
  }

  return true;
};
/**
 * Determines if a marker lies within the cluster's bounds.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to check.
 * @return {boolean} True if the marker lies in the bounds.
 * @ignore
 */


Cluster.prototype.isMarkerInClusterBounds = function (marker) {
  return this.bounds_.contains(marker.getPosition());
};
/**
 * Calculates the extended bounds of the cluster with the grid.
 */


Cluster.prototype.calculateBounds_ = function () {
  var bounds = new google.maps.LatLngBounds(this.center_, this.center_);
  this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds);
};
/**
 * Updates the cluster icon.
 */


Cluster.prototype.updateIcon_ = function () {
  var mCount = this.markers_.length;
  var mz = this.markerClusterer_.getMaxZoom();

  if (mz !== null && this.map_.getZoom() > mz) {
    this.clusterIcon_.hide();
    return;
  }

  if (mCount < this.minClusterSize_) {
    // Min cluster size not yet reached.
    this.clusterIcon_.hide();
    return;
  }

  var numStyles = this.markerClusterer_.getStyles().length;
  var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles);
  this.clusterIcon_.setCenter(this.center_);
  this.clusterIcon_.useStyle(sums);
  this.clusterIcon_.show();
};
/**
 * Determines if a marker has already been added to the cluster.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to check.
 * @return {boolean} True if the marker has already been added.
 */


Cluster.prototype.isMarkerAlreadyAdded_ = function (marker) {
  for (var i = 0, n = this.markers_.length; i < n; i++) {
    if (marker === this.markers_[i]) {
      return true;
    }
  }

  return false;
};
/**
 * @name MarkerClustererOptions
 * @class This class represents the optional parameter passed to
 *  the {@link MarkerClusterer} constructor.
 * @property {number} [gridSize=60] The grid size of a cluster in pixels. The grid is a square.
 * @property {number} [maxZoom=null] The maximum zoom level at which clustering is enabled or
 *  <code>null</code> if clustering is to be enabled at all zoom levels.
 * @property {boolean} [zoomOnClick=true] Whether to zoom the map when a cluster marker is
 *  clicked. You may want to set this to <code>false</code> if you have installed a handler
 *  for the <code>click</code> event and it deals with zooming on its own.
 * @property {boolean} [averageCenter=false] Whether the position of a cluster marker should be
 *  the average position of all markers in the cluster. If set to <code>false</code>, the
 *  cluster marker is positioned at the location of the first marker added to the cluster.
 * @property {number} [minimumClusterSize=2] The minimum number of markers needed in a cluster
 *  before the markers are hidden and a cluster marker appears.
 * @property {boolean} [ignoreHidden=false] Whether to ignore hidden markers in clusters. You
 *  may want to set this to <code>true</code> to ensure that hidden markers are not included
 *  in the marker count that appears on a cluster marker (this count is the value of the
 *  <code>text</code> property of the result returned by the default <code>calculator</code>).
 *  If set to <code>true</code> and you change the visibility of a marker being clustered, be
 *  sure to also call <code>MarkerClusterer.repaint()</code>.
 * @property {string} [title=""] The tooltip to display when the mouse moves over a cluster
 *  marker. (Alternatively, you can use a custom <code>calculator</code> function to specify a
 *  different tooltip for each cluster marker.)
 * @property {function} [calculator=MarkerClusterer.CALCULATOR] The function used to determine
 *  the text to be displayed on a cluster marker and the index indicating which style to use
 *  for the cluster marker. The input parameters for the function are (1) the array of markers
 *  represented by a cluster marker and (2) the number of cluster icon styles. It returns a
 *  {@link ClusterIconInfo} object. The default <code>calculator</code> returns a
 *  <code>text</code> property which is the number of markers in the cluster and an
 *  <code>index</code> property which is one higher than the lowest integer such that
 *  <code>10^i</code> exceeds the number of markers in the cluster, or the size of the styles
 *  array, whichever is less. The <code>styles</code> array element used has an index of
 *  <code>index</code> minus 1. For example, the default <code>calculator</code> returns a
 *  <code>text</code> value of <code>"125"</code> and an <code>index</code> of <code>3</code>
 *  for a cluster icon representing 125 markers so the element used in the <code>styles</code>
 *  array is <code>2</code>. A <code>calculator</code> may also return a <code>title</code>
 *  property that contains the text of the tooltip to be used for the cluster marker. If
 *   <code>title</code> is not defined, the tooltip is set to the value of the <code>title</code>
 *   property for the MarkerClusterer.
 * @property {string} [clusterClass="cluster"] The name of the CSS class defining general styles
 *  for the cluster markers. Use this class to define CSS styles that are not set up by the code
 *  that processes the <code>styles</code> array.
 * @property {Array} [styles] An array of {@link ClusterIconStyle} elements defining the styles
 *  of the cluster markers to be used. The element to be used to style a given cluster marker
 *  is determined by the function defined by the <code>calculator</code> property.
 *  The default is an array of {@link ClusterIconStyle} elements whose properties are derived
 *  from the values for <code>imagePath</code>, <code>imageExtension</code>, and
 *  <code>imageSizes</code>.
 * @property {boolean} [enableRetinaIcons=false] Whether to allow the use of cluster icons that
 * have sizes that are some multiple (typically double) of their actual display size. Icons such
 * as these look better when viewed on high-resolution monitors such as Apple's Retina displays.
 * Note: if this property is <code>true</code>, sprites cannot be used as cluster icons.
 * @property {number} [batchSize=MarkerClusterer.BATCH_SIZE] Set this property to the
 *  number of markers to be processed in a single batch when using a browser other than
 *  Internet Explorer (for Internet Explorer, use the batchSizeIE property instead).
 * @property {number} [batchSizeIE=MarkerClusterer.BATCH_SIZE_IE] When Internet Explorer is
 *  being used, markers are processed in several batches with a small delay inserted between
 *  each batch in an attempt to avoid Javascript timeout errors. Set this property to the
 *  number of markers to be processed in a single batch; select as high a number as you can
 *  without causing a timeout error in the browser. This number might need to be as low as 100
 *  if 15,000 markers are being managed, for example.
 * @property {string} [imagePath=MarkerClusterer.IMAGE_PATH]
 *  The full URL of the root name of the group of image files to use for cluster icons.
 *  The complete file name is of the form <code>imagePath</code>n.<code>imageExtension</code>
 *  where n is the image file number (1, 2, etc.).
 * @property {string} [imageExtension=MarkerClusterer.IMAGE_EXTENSION]
 *  The extension name for the cluster icon image files (e.g., <code>"png"</code> or
 *  <code>"jpg"</code>).
 * @property {Array} [imageSizes=MarkerClusterer.IMAGE_SIZES]
 *  An array of numbers containing the widths of the group of
 *  <code>imagePath</code>n.<code>imageExtension</code> image files.
 *  (The images are assumed to be square.)
 */

/**
 * Creates a MarkerClusterer object with the options specified in {@link MarkerClustererOptions}.
 * @constructor
 * @extends google.maps.OverlayView
 * @param {google.maps.Map} map The Google map to attach to.
 * @param {Array.<google.maps.marker.AdvancedMarkerElement>} [opt_markers] The markers to be added to the cluster.
 * @param {MarkerClustererOptions} [opt_options] The optional parameters.
 */


function MarkerClusterer(map, opt_markers, opt_options) {
  // MarkerClusterer implements google.maps.OverlayView interface. We use the
  // extend function to extend MarkerClusterer with google.maps.OverlayView
  // because it might not always be available when the code is defined so we
  // look for it at the last possible moment. If it doesn't exist now then
  // there is no point going ahead :)
  this.extend(MarkerClusterer, google.maps.OverlayView);
  opt_markers = opt_markers || [];
  opt_options = opt_options || {};
  this.markers_ = [];
  this.clusters_ = [];
  this.listeners_ = [];
  this.activeMap_ = null;
  this.ready_ = false;
  this.gridSize_ = opt_options.gridSize || 60;
  this.minClusterSize_ = opt_options.minimumClusterSize || 2;
  this.maxZoom_ = opt_options.maxZoom || null;
  this.styles_ = opt_options.styles || [];
  this.title_ = opt_options.title || "";
  this.zoomOnClick_ = true;

  if (opt_options.zoomOnClick !== undefined) {
    this.zoomOnClick_ = opt_options.zoomOnClick;
  }

  this.averageCenter_ = false;

  if (opt_options.averageCenter !== undefined) {
    this.averageCenter_ = opt_options.averageCenter;
  }

  this.ignoreHidden_ = false;

  if (opt_options.ignoreHidden !== undefined) {
    this.ignoreHidden_ = opt_options.ignoreHidden;
  }

  this.enableRetinaIcons_ = false;

  if (opt_options.enableRetinaIcons !== undefined) {
    this.enableRetinaIcons_ = opt_options.enableRetinaIcons;
  }

  this.hideLabel_ = false;

  if (opt_options.hideLabel !== undefined) {
    this.hideLabel_ = opt_options.hideLabel;
  }

  this.imagePath_ = opt_options.imagePath || MarkerClusterer.IMAGE_PATH;
  this.imageExtension_ = opt_options.imageExtension || MarkerClusterer.IMAGE_EXTENSION;
  this.imageSizes_ = opt_options.imageSizes || MarkerClusterer.IMAGE_SIZES;
  this.calculator_ = opt_options.calculator || MarkerClusterer.CALCULATOR;
  this.batchSize_ = opt_options.batchSize || MarkerClusterer.BATCH_SIZE;
  this.batchSizeIE_ = opt_options.batchSizeIE || MarkerClusterer.BATCH_SIZE_IE;
  this.clusterClass_ = opt_options.clusterClass || "cluster";

  if (navigator.userAgent.toLowerCase().indexOf("msie") !== -1) {
    // Try to avoid IE timeout when processing a huge number of markers:
    this.batchSize_ = this.batchSizeIE_;
  }

  this.setupStyles_();
  this.addMarkers(opt_markers, true);
  this.setMap(map); // Note: this causes onAdd to be called
}
/**
 * Implementation of the onAdd interface method.
 * @ignore
 */


MarkerClusterer.prototype.onAdd = function () {
  var cMarkerClusterer = this;
  this.activeMap_ = this.getMap();
  this.ready_ = true;
  this.repaint(); // Add the map event listeners

  this.listeners_ = [google.maps.event.addListener(this.getMap(), "zoom_changed", function () {
    cMarkerClusterer.resetViewport_(false); // Workaround for this Google bug: when map is at level 0 and "-" of
    // zoom slider is clicked, a "zoom_changed" event is fired even though
    // the map doesn't zoom out any further. In this situation, no "idle"
    // event is triggered so the cluster markers that have been removed
    // do not get redrawn. Same goes for a zoom in at maxZoom.

    if (this.getZoom() === (this.get("minZoom") || 0) || this.getZoom() === this.get("maxZoom")) {
      google.maps.event.trigger(this, "idle");
    }
  }), google.maps.event.addListener(this.getMap(), "idle", function () {
    cMarkerClusterer.redraw_();
  })];
};
/**
 * Implementation of the onRemove interface method.
 * Removes map event listeners and all cluster icons from the DOM.
 * All managed markers are also put back on the map.
 * @ignore
 */


MarkerClusterer.prototype.onRemove = function () {
  var i; // Put all the managed markers back on the map:

  for (i = 0; i < this.markers_.length; i++) {
    if (this.markers_[i].getMap() !== this.activeMap_) {
      this.markers_[i].setMap(this.activeMap_);
    }
  } // Remove all clusters:


  for (i = 0; i < this.clusters_.length; i++) {
    this.clusters_[i].remove();
  }

  this.clusters_ = []; // Remove map event listeners:

  for (i = 0; i < this.listeners_.length; i++) {
    google.maps.event.removeListener(this.listeners_[i]);
  }

  this.listeners_ = [];
  this.activeMap_ = null;
  this.ready_ = false;
};
/**
 * Implementation of the draw interface method.
 * @ignore
 */


MarkerClusterer.prototype.draw = function () {};
/**
 * Sets up the styles object.
 */


MarkerClusterer.prototype.setupStyles_ = function () {
  var i, size;

  if (this.styles_.length > 0) {
    return;
  }

  for (i = 0; i < this.imageSizes_.length; i++) {
    size = this.imageSizes_[i];
    this.styles_.push({
      url: this.imagePath_ + (i + 1) + "." + this.imageExtension_,
      height: size,
      width: size
    });
  }
};
/**
 *  Fits the map to the bounds of the markers managed by the clusterer.
 */


MarkerClusterer.prototype.fitMapToMarkers = function () {
  var i;
  var markers = this.getMarkers();
  var bounds = new google.maps.LatLngBounds();

  for (i = 0; i < markers.length; i++) {
    bounds.extend(markers[i].getPosition());
  }

  this.getMap().fitBounds(bounds);
};
/**
 * Returns the value of the <code>gridSize</code> property.
 *
 * @return {number} The grid size.
 */


MarkerClusterer.prototype.getGridSize = function () {
  return this.gridSize_;
};
/**
 * Sets the value of the <code>gridSize</code> property.
 *
 * @param {number} gridSize The grid size.
 */


MarkerClusterer.prototype.setGridSize = function (gridSize) {
  this.gridSize_ = gridSize;
};
/**
 * Returns the value of the <code>minimumClusterSize</code> property.
 *
 * @return {number} The minimum cluster size.
 */


MarkerClusterer.prototype.getMinimumClusterSize = function () {
  return this.minClusterSize_;
};
/**
 * Sets the value of the <code>minimumClusterSize</code> property.
 *
 * @param {number} minimumClusterSize The minimum cluster size.
 */


MarkerClusterer.prototype.setMinimumClusterSize = function (minimumClusterSize) {
  this.minClusterSize_ = minimumClusterSize;
};
/**
 *  Returns the value of the <code>maxZoom</code> property.
 *
 *  @return {number} The maximum zoom level.
 */


MarkerClusterer.prototype.getMaxZoom = function () {
  return this.maxZoom_;
};
/**
 *  Sets the value of the <code>maxZoom</code> property.
 *
 *  @param {number} maxZoom The maximum zoom level.
 */


MarkerClusterer.prototype.setMaxZoom = function (maxZoom) {
  this.maxZoom_ = maxZoom;
};
/**
 *  Returns the value of the <code>styles</code> property.
 *
 *  @return {Array} The array of styles defining the cluster markers to be used.
 */


MarkerClusterer.prototype.getStyles = function () {
  return this.styles_;
};
/**
 *  Sets the value of the <code>styles</code> property.
 *
 *  @param {Array.<ClusterIconStyle>} styles The array of styles to use.
 */


MarkerClusterer.prototype.setStyles = function (styles) {
  this.styles_ = styles;
};
/**
 * Returns the value of the <code>title</code> property.
 *
 * @return {string} The content of the title text.
 */


MarkerClusterer.prototype.getTitle = function () {
  return this.title_;
};
/**
 *  Sets the value of the <code>title</code> property.
 *
 *  @param {string} title The value of the title property.
 */


MarkerClusterer.prototype.setTitle = function (title) {
  this.title_ = title;
};
/**
 * Returns the value of the <code>zoomOnClick</code> property.
 *
 * @return {boolean} True if zoomOnClick property is set.
 */


MarkerClusterer.prototype.getZoomOnClick = function () {
  return this.zoomOnClick_;
};
/**
 *  Sets the value of the <code>zoomOnClick</code> property.
 *
 *  @param {boolean} zoomOnClick The value of the zoomOnClick property.
 */


MarkerClusterer.prototype.setZoomOnClick = function (zoomOnClick) {
  this.zoomOnClick_ = zoomOnClick;
};
/**
 * Returns the value of the <code>averageCenter</code> property.
 *
 * @return {boolean} True if averageCenter property is set.
 */


MarkerClusterer.prototype.getAverageCenter = function () {
  return this.averageCenter_;
};
/**
 *  Sets the value of the <code>averageCenter</code> property.
 *
 *  @param {boolean} averageCenter The value of the averageCenter property.
 */


MarkerClusterer.prototype.setAverageCenter = function (averageCenter) {
  this.averageCenter_ = averageCenter;
};
/**
 * Returns the value of the <code>ignoreHidden</code> property.
 *
 * @return {boolean} True if ignoreHidden property is set.
 */


MarkerClusterer.prototype.getIgnoreHidden = function () {
  return this.ignoreHidden_;
};
/**
 *  Sets the value of the <code>ignoreHidden</code> property.
 *
 *  @param {boolean} ignoreHidden The value of the ignoreHidden property.
 */


MarkerClusterer.prototype.setIgnoreHidden = function (ignoreHidden) {
  this.ignoreHidden_ = ignoreHidden;
};
/**
 * Returns the value of the <code>enableRetinaIcons</code> property.
 *
 * @return {boolean} True if enableRetinaIcons property is set.
 */


MarkerClusterer.prototype.getEnableRetinaIcons = function () {
  return this.enableRetinaIcons_;
};
/**
 *  Sets the value of the <code>enableRetinaIcons</code> property.
 *
 *  @param {boolean} enableRetinaIcons The value of the enableRetinaIcons property.
 */


MarkerClusterer.prototype.setEnableRetinaIcons = function (enableRetinaIcons) {
  this.enableRetinaIcons_ = enableRetinaIcons;
};
/**
 * Returns the value of the <code>imageExtension</code> property.
 *
 * @return {string} The value of the imageExtension property.
 */


MarkerClusterer.prototype.getImageExtension = function () {
  return this.imageExtension_;
};
/**
 *  Sets the value of the <code>imageExtension</code> property.
 *
 *  @param {string} imageExtension The value of the imageExtension property.
 */


MarkerClusterer.prototype.setImageExtension = function (imageExtension) {
  this.imageExtension_ = imageExtension;
};
/**
 * Returns the value of the <code>imagePath</code> property.
 *
 * @return {string} The value of the imagePath property.
 */


MarkerClusterer.prototype.getImagePath = function () {
  return this.imagePath_;
};
/**
 *  Sets the value of the <code>imagePath</code> property.
 *
 *  @param {string} imagePath The value of the imagePath property.
 */


MarkerClusterer.prototype.setImagePath = function (imagePath) {
  this.imagePath_ = imagePath;
};
/**
 * Returns the value of the <code>imageSizes</code> property.
 *
 * @return {Array} The value of the imageSizes property.
 */


MarkerClusterer.prototype.getImageSizes = function () {
  return this.imageSizes_;
};
/**
 *  Sets the value of the <code>imageSizes</code> property.
 *
 *  @param {Array} imageSizes The value of the imageSizes property.
 */


MarkerClusterer.prototype.setImageSizes = function (imageSizes) {
  this.imageSizes_ = imageSizes;
};
/**
 * Returns the value of the <code>calculator</code> property.
 *
 * @return {function} the value of the calculator property.
 */


MarkerClusterer.prototype.getCalculator = function () {
  return this.calculator_;
};
/**
 * Sets the value of the <code>calculator</code> property.
 *
 * @param {function(Array.<google.maps.marker.AdvancedMarkerElement>, number)} calculator The value
 *  of the calculator property.
 */


MarkerClusterer.prototype.setCalculator = function (calculator) {
  this.calculator_ = calculator;
};
/**
 * Sets the value of the <code>hideLabel</code> property.
 *
 *  @param {boolean} printable The value of the hideLabel property.
 */


MarkerClusterer.prototype.setHideLabel = function (hideLabel) {
  this.hideLabel_ = hideLabel;
};
/**
 * Returns the value of the <code>hideLabel</code> property.
 *
 * @return {boolean} the value of the hideLabel property.
 */


MarkerClusterer.prototype.getHideLabel = function () {
  return this.hideLabel_;
};
/**
 * Returns the value of the <code>batchSizeIE</code> property.
 *
 * @return {number} the value of the batchSizeIE property.
 */


MarkerClusterer.prototype.getBatchSizeIE = function () {
  return this.batchSizeIE_;
};
/**
 * Sets the value of the <code>batchSizeIE</code> property.
 *
 *  @param {number} batchSizeIE The value of the batchSizeIE property.
 */


MarkerClusterer.prototype.setBatchSizeIE = function (batchSizeIE) {
  this.batchSizeIE_ = batchSizeIE;
};
/**
 * Returns the value of the <code>clusterClass</code> property.
 *
 * @return {string} the value of the clusterClass property.
 */


MarkerClusterer.prototype.getClusterClass = function () {
  return this.clusterClass_;
};
/**
 * Sets the value of the <code>clusterClass</code> property.
 *
 *  @param {string} clusterClass The value of the clusterClass property.
 */


MarkerClusterer.prototype.setClusterClass = function (clusterClass) {
  this.clusterClass_ = clusterClass;
};
/**
 *  Returns the array of markers managed by the clusterer.
 *
 *  @return {Array} The array of markers managed by the clusterer.
 */


MarkerClusterer.prototype.getMarkers = function () {
  return this.markers_;
};
/**
 *  Returns the number of markers managed by the clusterer.
 *
 *  @return {number} The number of markers.
 */


MarkerClusterer.prototype.getTotalMarkers = function () {
  return this.markers_.length;
};
/**
 * Returns the current array of clusters formed by the clusterer.
 *
 * @return {Array} The array of clusters formed by the clusterer.
 */


MarkerClusterer.prototype.getClusters = function () {
  return this.clusters_;
};
/**
 * Returns the number of clusters formed by the clusterer.
 *
 * @return {number} The number of clusters formed by the clusterer.
 */


MarkerClusterer.prototype.getTotalClusters = function () {
  return this.clusters_.length;
};
/**
 * Adds a marker to the clusterer. The clusters are redrawn unless
 *  <code>opt_nodraw</code> is set to <code>true</code>.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to add.
 * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.
 */


MarkerClusterer.prototype.addMarker = function (marker, opt_nodraw) {
  this.pushMarkerTo_(marker);

  if (!opt_nodraw) {
    this.redraw_();
  }
};
/**
 * Adds an array of markers to the clusterer. The clusters are redrawn unless
 *  <code>opt_nodraw</code> is set to <code>true</code>.
 *
 * @param {Array.<google.maps.marker.AdvancedMarkerElement>} markers The markers to add.
 * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.
 */


MarkerClusterer.prototype.addMarkers = function (markers, opt_nodraw) {
  var key;

  for (key in markers) {
    if (markers.hasOwnProperty(key)) {
      this.pushMarkerTo_(markers[key]);
    }
  }

  if (!opt_nodraw) {
    this.redraw_();
  }
};
/**
 * Pushes a marker to the clusterer.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to add.
 */


MarkerClusterer.prototype.pushMarkerTo_ = function (marker) {
  // If the marker is draggable add a listener so we can update the clusters on the dragend:
  // if (marker.getDraggable()) {
  //     var cMarkerClusterer = this;
  //     google.maps.event.addListener(marker, "dragend", function() {
  //         if (cMarkerClusterer.ready_) {
  //             this.isAdded = false;
  //             cMarkerClusterer.repaint();
  //         }
  //     });
  // }
  marker.isAdded = false;
  this.markers_.push(marker);
};
/**
 * Removes a marker from the cluster and map.  The clusters are redrawn unless
 *  <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if the
 *  marker was removed from the clusterer.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to remove.
 * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.
 * @param {boolean} [opt_noMapRemove] Set to <code>true</code> to prevent removal from map but still removing from cluster management
 * @return {boolean} True if the marker was removed from the clusterer.
 */


MarkerClusterer.prototype.removeMarker = function (marker, opt_nodraw, opt_noMapRemove) {
  var removeFromMap =  true && !opt_noMapRemove;
  var removed = this.removeMarker_(marker, removeFromMap);

  if (!opt_nodraw && removed) {
    this.repaint();
  }

  return removed;
};
/**
 * Removes an array of markers from the cluster and map. The clusters are redrawn unless
 *  <code>opt_nodraw</code> is set to <code>true</code>. Returns <code>true</code> if markers
 *  were removed from the clusterer.
 *
 * @param {Array.<google.maps.marker.AdvancedMarkerElement>} markers The markers to remove.
 * @param {boolean} [opt_nodraw] Set to <code>true</code> to prevent redrawing.
 * @param {boolean} [opt_noMapRemove] Set to <code>true</code> to prevent removal from map but still removing from cluster management
 * @return {boolean} True if markers were removed from the clusterer.
 */


MarkerClusterer.prototype.removeMarkers = function (markers, opt_nodraw, opt_noMapRemove) {
  var i, r;
  var removed = false;
  var removeFromMap =  true && !opt_noMapRemove;

  for (i = 0; i < markers.length; i++) {
    r = this.removeMarker_(markers[i], removeFromMap);
    removed = removed || r;
  }

  if (!opt_nodraw && removed) {
    this.repaint();
  }

  return removed;
};
/**
 * Removes a marker and returns true if removed, false if not.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to remove
 * @param {boolean} removeFromMap set to <code>true</code> to explicitly remove from map as well as cluster manangement
 * @return {boolean} Whether the marker was removed or not
 */


MarkerClusterer.prototype.removeMarker_ = function (marker, removeFromMap) {
  var i;
  var index = -1;

  if (this.markers_.indexOf) {
    index = this.markers_.indexOf(marker);
  } else {
    for (i = 0; i < this.markers_.length; i++) {
      if (marker === this.markers_[i]) {
        index = i;
        break;
      }
    }
  }

  if (index === -1) {
    // Marker is not in our list of markers, so do nothing:
    return false;
  }

  if (removeFromMap) {
    marker.setMap(null);
  }

  this.markers_.splice(index, 1); // Remove the marker from the list of managed markers

  return true;
};
/**
 * Removes all clusters and markers from the map and also removes all markers
 *  managed by the clusterer.
 */


MarkerClusterer.prototype.clearMarkers = function () {
  this.resetViewport_(true);
  this.markers_ = [];
};
/**
 * Recalculates and redraws all the marker clusters from scratch.
 *  Call this after changing any properties.
 */


MarkerClusterer.prototype.repaint = function () {
  var oldClusters = this.clusters_.slice();
  this.clusters_ = [];
  this.resetViewport_(false);
  this.redraw_(); // Remove the old clusters.
  // Do it in a timeout to prevent blinking effect.

  setTimeout(function () {
    var i;

    for (i = 0; i < oldClusters.length; i++) {
      oldClusters[i].remove();
    }
  }, 0);
};
/**
 * Returns the current bounds extended by the grid size.
 *
 * @param {google.maps.LatLngBounds} bounds The bounds to extend.
 * @return {google.maps.LatLngBounds} The extended bounds.
 * @ignore
 */


MarkerClusterer.prototype.getExtendedBounds = function (bounds) {
  var projection = this.getProjection(); // Turn the bounds into latlng.

  var tr = new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng());
  var bl = new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng()); // Convert the points to pixels and the extend out by the grid size.

  var trPix = projection.fromLatLngToDivPixel(tr);
  trPix.x += this.gridSize_;
  trPix.y -= this.gridSize_;
  var blPix = projection.fromLatLngToDivPixel(bl);
  blPix.x -= this.gridSize_;
  blPix.y += this.gridSize_; // Convert the pixel points back to LatLng

  var ne = projection.fromDivPixelToLatLng(trPix);
  var sw = projection.fromDivPixelToLatLng(blPix); // Extend the bounds to contain the new bounds.

  bounds.extend(ne);
  bounds.extend(sw);
  return bounds;
};
/**
 * Redraws all the clusters.
 */


MarkerClusterer.prototype.redraw_ = function () {
  this.createClusters_(0);
};
/**
 * Removes all clusters from the map. The markers are also removed from the map
 *  if <code>opt_hide</code> is set to <code>true</code>.
 *
 * @param {boolean} [opt_hide] Set to <code>true</code> to also remove the markers
 *  from the map.
 */


MarkerClusterer.prototype.resetViewport_ = function (opt_hide) {
  var i, marker; // Remove all the clusters

  for (i = 0; i < this.clusters_.length; i++) {
    this.clusters_[i].remove();
  }

  this.clusters_ = []; // Reset the markers to not be added and to be removed from the map.

  for (i = 0; i < this.markers_.length; i++) {
    marker = this.markers_[i];
    marker.isAdded = false;

    if (opt_hide) {
      marker.setMap(null);
    }
  }
};
/**
 * Calculates the distance between two latlng locations in km.
 *
 * @param {google.maps.LatLng} p1 The first lat lng point.
 * @param {google.maps.LatLng} p2 The second lat lng point.
 * @return {number} The distance between the two points in km.
 * @see http://www.movable-type.co.uk/scripts/latlong.html
 */


MarkerClusterer.prototype.distanceBetweenPoints_ = function (p1, p2) {
  var R = 6371; // Radius of the Earth in km

  var dLat = (p2.lat() - p1.lat()) * Math.PI / 180;
  var dLon = (p2.lng() - p1.lng()) * Math.PI / 180;
  var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d;
};
/**
 * Determines if a marker is contained in a bounds.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to check.
 * @param {google.maps.LatLngBounds} bounds The bounds to check against.
 * @return {boolean} True if the marker is in the bounds.
 */


MarkerClusterer.prototype.isMarkerInBounds_ = function (marker, bounds) {
  var northEast = bounds.getNorthEast();
  var southWest = bounds.getSouthWest();
  var position = marker.getPosition();
  var minX, maxX, minY, maxY;
  minX = southWest.lat();
  maxX = northEast.lat();
  minY = southWest.lng();
  maxY = northEast.lng();

  while (0 > maxY) {
    maxY += 180;
  }

  maxY += 180; // bounds[this.a].g = maxY;? what for

  if (minX < position.lat() && position.lat() < maxX && minY < position.lng() && position.lng() < maxY) {
    return true;
  }

  return false;
};
/**
 * Adds a marker to a cluster, or creates a new cluster.
 *
 * @param {google.maps.marker.AdvancedMarkerElement} marker The marker to add.
 */


MarkerClusterer.prototype.addToClosestCluster_ = function (marker) {
  var i, d, cluster, center;
  var distance = 40000; // Some large number

  var clusterToAddTo = null;

  for (i = 0; i < this.clusters_.length; i++) {
    cluster = this.clusters_[i];
    center = cluster.getCenter();

    if (center) {
      d = this.distanceBetweenPoints_(center, marker.getPosition());

      if (d < distance) {
        distance = d;
        clusterToAddTo = cluster;
      }
    }
  }

  if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {
    clusterToAddTo.addMarker(marker);
  } else {
    cluster = new Cluster(this);
    cluster.addMarker(marker);
    this.clusters_.push(cluster);
  }
};
/**
 * Creates the clusters. This is done in batches to avoid timeout errors
 *  in some browsers when there is a huge number of markers.
 *
 * @param {number} iFirst The index of the first marker in the batch of
 *  markers to be added to clusters.
 */


MarkerClusterer.prototype.createClusters_ = function (iFirst) {
  var i, marker;
  var mapBounds;
  var cMarkerClusterer = this;

  if (!this.ready_) {
    return;
  } // Cancel previous batch processing if we're working on the first batch:


  if (iFirst === 0) {
    /**
     * This event is fired when the <code>MarkerClusterer</code> begins
     *  clustering markers.
     * @name MarkerClusterer#clusteringbegin
     * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.
     * @event
     */
    google.maps.event.trigger(this, "clusteringbegin", this);

    if (typeof this.timerRefStatic !== "undefined") {
      clearTimeout(this.timerRefStatic);
      delete this.timerRefStatic;
    }
  } // Get our current map view bounds.
  // Create a new bounds object so we don't affect the map.
  //
  // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:


  if (this.getMap().getZoom() > 3) {
    mapBounds = new google.maps.LatLngBounds(this.getMap().getBounds().getSouthWest(), this.getMap().getBounds().getNorthEast());
  } else {
    mapBounds = new google.maps.LatLngBounds(new google.maps.LatLng(85.02070771743472, -178.48388434375), new google.maps.LatLng(-85.08136444384544, 178.00048865625));
  }

  var bounds = this.getExtendedBounds(mapBounds); // console.log(bounds);

  var iLast = Math.min(iFirst + this.batchSize_, this.markers_.length);

  for (i = iFirst; i < iLast; i++) {
    this.markers_[i];

    if (this.markers_.isFilter === true) {
      if (this.markers_[i].isFilter === undefined) {
        if (this.markers_[i].setMap !== undefined) this.markers_[i].setMap(null);
        continue;
      }
    }

    if (!this.markers_[i].isAdded && this.isMarkerInBounds_(this.markers_[i], bounds)) {
      if (!this.ignoreHidden_ || this.ignoreHidden_ && this.markers_[i].getVisible()) {
        if (this.markers_[i].getMap === undefined) this.markers_[i] = this.addOrtherMarker(this.markers_[i]);
        this.addToClosestCluster_(this.markers_[i]);
      }
    }
  }

  if (iLast < this.markers_.length) {
    this.timerRefStatic = setTimeout(function () {
      cMarkerClusterer.createClusters_(iLast);
    }, 0);
  } else {
    delete this.timerRefStatic;
    /**
     * This event is fired when the <code>MarkerClusterer</code> stops
     *  clustering markers.
     * @name MarkerClusterer#clusteringend
     * @param {MarkerClusterer} mc The MarkerClusterer whose markers are being clustered.
     * @event
     */

    google.maps.event.trigger(this, "clusteringend", this);

    for (i = 0; i < this.clusters_.length; i++) {
      this.clusters_[i].updateIcon_();
    }
  }
};

MarkerClusterer.prototype.addOrtherMarker = function (data) {
  var self = this;
  var position = [data.lat, data.lng];
  var color, tooltip;
  if (typeof testVariable !== "undefined") color = systemconfig.markerColor;
  if (data.color) color = data.color;
  if (data.tooltip) tooltip = data.tooltip;
  var image = {
    path: "M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z",
    // This marker is 20 pixels wide by 32 pixels high.
    scaledSize: new google.maps.Size(24, 24),
    // The origin for this image is (0, 0).
    origin: new google.maps.Point(0, 0),
    // The anchor for this image is the base of the flagpole at (0, 32).
    anchor: new google.maps.Point(12, 12),
    fillColor: color,
    fillOpacity: 1,
    strokeColor: "white",
    strokeWeight: 4
  };
  var marker = new google.maps.marker.AdvancedMarkerElement({
    position: new google.maps.LatLng(position[0], position[1]),
    draggable: false,
    icon: image,
    zIndex: 2
  });

  if (tooltip) {
    var style = {
      maxWidth: 350
    };
    var content = "";

    if (MarkerClusterer_typeof(tooltip) == "object") {
      if (tooltip.style) style = tooltip.style;
      if (tooltip.element) content = tooltip.element;
    } else content = tooltip;

    var infowindow = new google.maps.InfoWindow(style);
    google.maps.event.addListener(marker, 'mouseover', function () {
      infowindow.setContent(content);
      infowindow.open(self.map_, marker);
    });
    google.maps.event.addListener(marker, 'mouseout', function (event) {
      infowindow.close();
    });
  }

  marker.dataMarker = data;
  marker.isFilter = data.isFilter;
  return marker;
};
/**
 * Extends an object's prototype by another's.
 *
 * @param {Object} obj1 The object to be extended.
 * @param {Object} obj2 The object to extend with.
 * @return {Object} The new extended object.
 * @ignore
 */


MarkerClusterer.prototype.extend = function (obj1, obj2) {
  return function (object) {
    var property;

    for (property in object.prototype) {
      this.prototype[property] = object.prototype[property];
    }

    return this;
  }.apply(obj1, [obj2]);
};
/**
 * The default function for determining the label text and style
 * for a cluster icon.
 *
 * @param {Array.<google.maps.marker.AdvancedMarkerElement>} markers The array of markers represented by the cluster.
 * @param {number} numStyles The number of marker styles available.
 * @return {ClusterIconInfo} The information resource for the cluster.
 * @constant
 * @ignore
 */


MarkerClusterer.CALCULATOR = function (markers, numStyles) {
  var index = 0;
  var title = "";
  var count = markers.length.toString();
  var dv = count;

  while (dv !== 0) {
    dv = parseInt(dv / 10, 10);
    index++;
  }

  index = Math.min(index, numStyles);
  return {
    text: count,
    index: index,
    title: title
  };
};
/**
 * The number of markers to process in one batch.
 *
 * @type {number}
 * @constant
 */


MarkerClusterer.BATCH_SIZE = 2000;
/**
 * The number of markers to process in one batch (IE only).
 *
 * @type {number}
 * @constant
 */

MarkerClusterer.BATCH_SIZE_IE = 500;
/**
 * The default root name for the marker cluster images.
 *
 * @type {string}
 * @constant
 */

MarkerClusterer.IMAGE_PATH = "//cdn.rawgit.com/mahnunchik/markerclustererplus/master/images/m";
/**
 * The default extension name for the marker cluster images.
 *
 * @type {string}
 * @constant
 */

MarkerClusterer.IMAGE_EXTENSION = "png";
/**
 * The default array of sizes for the marker cluster images.
 *
 * @type {Array.<number>}
 * @constant
 */

MarkerClusterer.IMAGE_SIZES = [53, 56, 66, 78, 90];

if (typeof String.prototype.trim !== 'function') {
  /**
   * IE hack since trim() doesn't exist in all browsers
   * @return {string} The string with removed whitespace
   */
  String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g, '');
  };
}

window.MarkerClusterer = MarkerClusterer;
/* harmony default export */ const js_MarkerClusterer = (MarkerClusterer);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationView.js






var MARKER_RADIUS = 10;
var MARKER_BORDER_COLOR = '#4945C8';

function generateColor(id) {
  id = id + '';
  var rgb = [0, 0, 0];
  var res;
  var white = src_Color_Color.parse('white');
  var c = 100;

  while (c--) {
    for (var i = 0; i < id.length; ++i) {
      rgb[i % 3] = (rgb[i % 3] * 31 + id.charCodeAt(i) * 173) % 255;
    }

    res = new src_Color_Color([rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, 1]);

    if (res.getContrastWith(white) > 2 && rgb[0] + rgb[1] + rgb[2] > 50) {
      break;
    }
  }

  return res;
} // https://lab.daithangminh.vn/home_co/carddone/markerclusterer.js


var loadMarkerClustererSync = null;
var lastOpenInfo = null;
/***
 *
 * @param {LocationView} viewerElt
 * @param {Object} data
 * @constructor
 */

function LVPolyline(viewerElt, data) {
  this.viewerElt = viewerElt;
  this.map = viewerElt.map;
  this._polylines = [];
  this.id = data.id || randomIdent(12);
  this.polylineData = {
    geodesic: true,
    strokeColor: data.color || generateColor(this.id).toString('hex6'),
    strokeOpacity: 1.0,
    strokeWeight: 2
  };
  this.polylineData.path = data.path.map(function (crd) {
    return implicitLatLng(crd);
  });
  this.polylineHL = new google.maps.Polyline(Object.assign({}, this.polylineData, {
    strokeColor: 'white',
    strokeWeight: 5
  }));
  this.polyline = new google.maps.Polyline(this.polylineData);
  this.markers = this.polylineData.path.map(function (crd, i) {
    var mkr = new google.maps.marker.AdvancedMarkerElement({
      position: crd,
      // sName: data.name || data.id || this.id,
      map: this.map,
      icon: {
        path: google.maps.SymbolPath.CIRCLE,
        scale: MARKER_RADIUS,
        fillColor: this.polylineData.strokeColor,
        fillOpacity: 1,
        strokeWeight: 2,
        strokeColor: MARKER_BORDER_COLOR
      }
    });
    mkr.setMap(this.map);
    var infoWindow;

    if (data.path[i] && data.path[i].info) {
      infoWindow = new google.maps.InfoWindow(data.path[i].info);
      mkr.addListener('mouseover', function () {
        if (lastOpenInfo === infoWindow) return;

        try {
          if (lastOpenInfo) lastOpenInfo.close();
        } catch (e) {}

        lastOpenInfo = infoWindow;
        infoWindow.open({
          anchor: mkr,
          map: this.map,
          shouldFocus: true
        });
      }.bind(this));
    }

    return mkr;
  }.bind(this));
  this.showRoute = viewerElt.showPolylineRoute;
}

LVPolyline.prototype.remove = function () {
  this.polyline.setMap(null);
  this.polylineHL.setMap(null);
  this.markers.forEach(function (mk) {
    mk.setMap(null);
  });
};

Object.defineProperty(LVPolyline.prototype, 'showRoute', {
  set: function set(value) {
    this._showRoute = !!value;

    if (value) {
      this.polylineHL.setMap(this.map);
      this.polyline.setMap(this.map);
    } else {
      this.polylineHL.setMap(null);
      this.polyline.setMap(null);
    }
  },
  get: function get() {
    return this._showRoute;
  }
});
Object.defineProperty(LVPolyline.prototype, 'color', {
  get: function get() {
    return this.polylineData.strokeColor;
  }
});
Object.defineProperty(LVPolyline.prototype, 'sumDistance', {
  get: function get() {
    var res = 0;
    var path = this.polylineData.path;

    for (var i = 1; i < path.length; ++i) {
      res += latLngDistance(path[i - 1], path[i]);
    }

    return res;
  }
});

function LVPoints(viewerElt, data) {
  this.data = data;
  this.refData = [data];
  this.id = data.id || randomIdent(12);
  this.latLng = implicitLatLng(data);

  if (!this.latLng) {
    console.error('Invalid data', data);
    return;
  }

  this.map = viewerElt.map;
  this.marker = new google.maps.marker.AdvancedMarkerElement({
    position: this.latLng,
    // sName: data.name || data.id || this.id,
    // map: this.map,
    icon: {
      path: google.maps.SymbolPath.CIRCLE,
      scale: MARKER_RADIUS,
      fillColor: data.color || generateColor(this.id).toString(),
      fillOpacity: 1,
      strokeWeight: 2,
      strokeColor: MARKER_BORDER_COLOR
    }
  }); // this.marker.setMap(this.map);

  if (!data.info) return;
  var infoWindow = new google.maps.InfoWindow(data.info);
  this.marker.addListener('mouseover', function () {
    if (lastOpenInfo === infoWindow) return;

    try {
      if (lastOpenInfo) lastOpenInfo.close();
    } catch (e) {}

    lastOpenInfo = infoWindow;
    infoWindow.open({
      anchor: this.marker,
      map: this.map,
      shouldFocus: true
    });
  }.bind(this));
}

LVPoints.prototype.remove = function () {
  if (this.marker) this.marker.setMap(null);
};
/***
 * @extends AElement
 * @constructor
 */


function LocationView() {
  this.map = new google.maps.Map(this, {
    zoom: 8,
    center: new google.maps.LatLng(21.018755, 105.839729),
    scaleControl: true
  });
  this.marker = null;
  this._value = null;
  this.$domSignal = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  /***
   * @type {LatLng}
   * @name value
   * @memberOf LocationView#
   */

  /****
   *
   * @type {LVPolyline[]}
   */

  this.$polylines = [];
  this._showPolylineRoute = true;
  /****
   *
   * @type {LVPoints[]}
   */

  this.$points = [];
}

LocationView.tag = 'LocationView'.toLowerCase();

LocationView.render = function () {
  return ACore_({
    "class": 'as-location-view'
  });
};

LocationView.prototype.getPolylineById = function (id) {
  return this.$polylines.find(function (pll) {
    return pll.id === id;
  }) || null;
};

LocationView.prototype.getPolylines = function () {
  return this.$polylines.slice();
};

LocationView.property = {};
LocationView.property.zoom = {
  set: function set(value) {
    if (!isRealNumber(value)) {
      value = 1;
    }

    this.map.setZoom(value);
  },
  get: function get() {
    return this.map.getZoom();
  }
};
LocationView.property.value = {
  set: function set(value) {
    value = value || null;
    var latlng = implicitLatLng(value);
    latlng = latlng || new google.maps.LatLng(21.018755, 105.839729);
    this.map.setCenter(latlng || new google.maps.LatLng(21.018755, 105.839729));
    this._value = value;

    if (this.marker) {
      this.marker.setMap(null);
      this.marker = null;
    }

    if (latlng && value) {
      this.marker = new google.maps.marker.AdvancedMarkerElement({
        map: this.map,
        position: latlng
      });
    }
  },
  get: function get() {
    return this._value;
  }
};
LocationView.property.polylines = {
  set: function set(polylines) {
    this._polylines = polylines || [];
    this.$polylines.forEach(function (pll) {
      pll.remove();
    });
    this.$polylines = polylines.map(function (pll) {
      return new LVPolyline(this, pll);
    }.bind(this));
    var zoom;
    var center;
    var points = this.$polylines.reduce(function (ac, $polyline) {
      return ac.concat($polyline.polylineData.path);
    }, []);
    var bounds = points.reduce(function (ac, cr) {
      ac.extend(cr);
      return ac;
    }, new google.maps.LatLngBounds());
    this.domSignal.once('update_view', function () {
      if (points.length > 1) {
        zoom = getMapZoomLevel(this.getBoundingClientRect(), bounds);
        center = bounds.getCenter();
      } else {
        zoom = 17;
        center = points[0] || new google.maps.LatLng(21.018755, 105.839729);
      }

      zoom = Math.min(zoom, 17);
      this.map.setZoom(zoom);
      this.map.setCenter(center);
    }.bind(this), 100);
    this.domSignal.emit('update_view');
  },
  get: function get() {
    return this._polylines;
  }
};
LocationView.property.showPolylineRoute = {
  set: function set(value) {
    this._showPolylineRoute = !!value;
    this.$polylines.forEach(function (pll) {
      pll.showRoute = value;
    });
  },
  get: function get() {
    return this._showPolylineRoute;
  }
};
LocationView.property.points = {
  set: function set(points) {
    this.$points.forEach(function (point) {
      point.remove();
    });
    this._points = points || [];

    var rp = this._points.reduce(function (ac, pointData) {
      var id = pointData.id;
      var point;

      if (id && ac.dict[id]) {
        ac.dict[id].refData.push(pointData);
      } else {
        point = new LVPoints(this, pointData);
        ac.dict[point.id] = point;
        ac.arr.push(point);
      }

      return ac;
    }.bind(this), {
      arr: [],
      dict: {}
    });

    this.$points = rp.arr;
    var zoom;
    var center;
    var latLngs = this.$points.map(function (p) {
      return p.latLng;
    }, []).filter(function (x) {
      return !!x;
    });
    var bounds = latLngs.reduce(function (ac, cr) {
      ac.extend(cr);
      return ac;
    }, new google.maps.LatLngBounds());
    var markers = this.$points.map(function (p) {
      return p.marker;
    }, []).filter(function (x) {
      return !!x;
    });
    this.pointsCluster = new js_MarkerClusterer(this.map, markers, {
      imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'
    });
    this.domSignal.once('update_view', function () {
      if (points.length > 1) {
        zoom = getMapZoomLevel(this.getBoundingClientRect(), bounds);
        center = bounds.getCenter();
      } else {
        zoom = 17;
        center = points[0] || new google.maps.LatLng(21.018755, 105.839729);
      }

      zoom = Math.min(zoom, 17);
      this.map.setZoom(zoom);
      this.map.setCenter(center);
    }.bind(this), 100);
    this.domSignal.emit('update_view');
  },
  get: function get() {
    return this._points;
  }
};
absol_acomp_ACore.install(LocationView);
/* harmony default export */ const js_LocationView = (LocationView);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/PlaceSearchAutoCompleteAdapter.js
/***
 *
 * @param {PlaceSearchAutoCompleteInput} inputElt
 * @constructor
 */
function PlaceSearchAutoCompleteAdapter(inputElt) {
  this.inputElt = inputElt;
  this.service = new google.maps.places.AutocompleteService(this.inputElt.$service);
}

PlaceSearchAutoCompleteAdapter.prototype.queryItems = function (query, mInput) {
  var request = {
    input: query
  };
  return new Promise(function (resolve) {
    this.service.getPlacePredictions(request, function (results, status) {
      if (status === google.maps.places.PlacesServiceStatus.OK) {
        resolve(results);
      } else resolve([]);
    });
  }.bind(this));
};

PlaceSearchAutoCompleteAdapter.prototype.getItemText = function (item, mInput) {
  return item.description;
};

PlaceSearchAutoCompleteAdapter.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) {
  return _({
    "class": 'as-place-search-auto-complete-item',
    child: [{
      "class": 'as-place-search-auto-complete-item-desc',
      child: {
        text: item.description
      }
    }]
  });
};

/* harmony default export */ const adapter_PlaceSearchAutoCompleteAdapter = (PlaceSearchAutoCompleteAdapter);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/placesearchautocomplete.css
var placesearchautocomplete = __webpack_require__(9656);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PlaceSearchAutoCompleteInput.js




/***
 * @extends AutoCompleteInput
 * @constructor
 */

function PlaceSearchAutoCompleteInput() {
  this.$service = ACore_('.as-place-search-auto-complete-input-service');
  this.insertBefore(this.$service, null);
  this.adapter = new adapter_PlaceSearchAutoCompleteAdapter(this);
}

PlaceSearchAutoCompleteInput.tag = 'PlaceSearchAutoCompleteInput'.toLowerCase();

PlaceSearchAutoCompleteInput.render = function () {
  return ACore_({
    tag: js_AutoCompleteInput.tag
  }, true);
};

absol_acomp_ACore.install(PlaceSearchAutoCompleteInput);
/* harmony default export */ const js_PlaceSearchAutoCompleteInput = (PlaceSearchAutoCompleteInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/locationinput.css
var locationinput = __webpack_require__(5472);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationPicker.js
function LocationPicker_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LocationPicker_typeof = function _typeof(obj) { return typeof obj; }; } else { LocationPicker_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LocationPicker_typeof(obj); }








 ///https://developers.google.com/maps/documentation/javascript/examples/geocoding-place-id

var googleMapLibs = null;
function getGoogleMapLib() {
  var jsElt;

  if (!googleMapLibs) {
    if (window.google && window.google.maps) {
      return Promise.resolve(window.google.maps);
    } else {
      jsElt = Array.prototype.find.call(document.head.childNodes, function (elt) {
        if (LocationPicker_typeof(elt.src) && elt.src.startsWith('https://maps.googleapis.com/maps/api/js')) return jsElt;
      });

      if (jsElt) {
        return new Promise(function (resolve, reject) {
          if (jsElt.readyState) {
            //IE
            jsElt.onreadystatechange = function () {
              if (jsElt.readyState === "loaded" || jsElt.readyState === "complete") {
                jsElt.onreadystatechange = null;
                resolve();
              }
            };
          } else {
            //Others
            var onLoad = function onLoad() {
              resolve();
              jsElt.removeEventListener('load', onLoad);
            };

            jsElt.addEventListener('load', onLoad);
          }
        });
      } else {
        throw new Error("Could not detect Google Map API!");
      }
    }
  }

  return googleMapLibs;
}
var googleMarkerLibSync = null;
function getGoogleMarkerLib() {
  if (!googleMarkerLibSync) googleMarkerLibSync = getGoogleMapLib().then(function () {
    return google.maps.importLibrary("marker");
  }).then(function (mdl) {
    google.maps.marker = mdl;
    return mdl;
  });
  return googleMarkerLibSync;
}
function createMyLocationMarkerContent() {
  var svgTxt = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n    <circle r=\"10\" cx=\"12\" cy=\"12\"  style=\"stroke: white; stroke-width: 2px; fill: #1da1ff\"></circle>\n</svg>";
  return ACore_(svgTxt);
}
/***
 * @extends AElement
 * @constructor
 */

function LocationPicker() {
  getGoogleMarkerLib();

  if (Detector_BrowserDetector.isMobile) {
    this.addClass('as-mobile');
  }

  this.map = new google.maps.Map(this, {
    mapId: randomIdent(),
    //'DEMO_MAP_ID',
    zoom: 8,
    scaleControl: true,
    center: new google.maps.LatLng(21.018755, 105.839729),
    streetViewControl: false,
    fullscreenControl: false,
    mapTypeControl: true,
    mapTypeControlOptions: {
      style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
      position: google.maps.ControlPosition.TOP_RIGHT
    }
  });
  this.map.setOptions({
    draggableCursor: 'default'
  });
  this.map.addListener('click', this.eventHandler.clickMap);
  this.geocoder = new google.maps.Geocoder();
  this.infoWindow = new google.maps.InfoWindow();
  this.$myLocationBtn = ACore_({
    tag: 'button',
    "class": 'as-location-picker-control-btn',
    child: 'span.mdi.mdi-crosshairs-gps',
    on: {
      click: this.selectMyLocation.bind(this)
    }
  });
  this.$rightBottomCtn = ACore_({
    "class": 'as-location-picker-control-ctn',
    child: [this.$myLocationBtn],
    style: {
      overflow: 'hidden'
    }
  });
  this.$searchInput = ACore_({
    tag: js_AutoCompleteInput.tag,
    "class": 'as-location-picker-search-input',
    props: {
      adapter: this
    },
    child: {
      "class": 'as-location-picker-search-input-search-icon-ctn',
      child: 'span.mdi.mdi-magnify',
      on: {
        click: this.eventHandler.search
      }
    },
    on: {
      change: this.eventHandler.searchChange
    }
  });
  this.$searchInput.$input.on('keydown', this.eventHandler.searchKeypress);
  this.$topLeftCtn = ACore_({
    "class": ['as-location-picker-control-ctn', 'as-top'],
    child: [this.$searchInput]
  });
  this.$okBtn = ACore_({
    tag: js_FlexiconButton.tag,
    "class": 'primary',
    props: {
      text: 'OK',
      disabled: true
    },
    on: {
      click: this.eventHandler.clickAction.bind(this, 'OK')
    }
  });
  this.$cancelBtn = ACore_({
    tag: js_FlexiconButton.tag,
    "class": ['as-location-picker-cancel-btn', 'secondary'],
    props: {
      text: 'CANCEL'
    },
    on: {
      click: this.eventHandler.clickAction.bind(this, 'CANCEL')
    }
  });
  this.$bottomLeftCtn = ACore_({
    "class": ['as-location-picker-control-ctn', 'as-transparent', 'as-bottom'],
    style: {
      paddingBottom: '5px'
    },
    child: [this.$okBtn, this.$cancelBtn]
  });
  this.map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(this.$rightBottomCtn);
  this.map.controls[google.maps.ControlPosition.TOP_LEFT].push(this.$topLeftCtn);
  this.map.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(this.$bottomLeftCtn);
  this.autoCompleteService = new google.maps.places.AutocompleteService(this.map, {
    fields: ["place_id", "geometry", "name", "formatted_address"]
  });
  this.placeService = new google.maps.places.PlacesService(this.map);
  this.selectedMarker = null;
  this.searchingMarkers = [];
  this.myLocationMarker = null;
  /***
   * @type {LatLng}
   * @name value
   * @memberOf LocationPicker#
   */

  /***
   * @type {boolean}
   * @name readOnly
   * @memberOf LocationPicker#
   */
}

LocationPicker.tag = 'LocationPicker'.toLowerCase();

LocationPicker.render = function () {
  return ACore_({
    "class": 'as-location-picker',
    extendEvent: ['action', 'location', 'requestlocation', 'error']
  });
};

LocationPicker.prototype.queryItems = function (query) {
  var request = {
    input: query,
    locationBias: this.map.getBounds()
  };
  return new Promise(function (resolve) {
    this.autoCompleteService.getPlacePredictions(request, function (results, status) {
      if (status === google.maps.places.PlacesServiceStatus.OK) {
        resolve(results);
      } else resolve([]);
    });
  }.bind(this));
};

LocationPicker.prototype.getItemText = function (item, mInput) {
  return item.description;
};

LocationPicker.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent, mInput) {
  return _({
    "class": 'as-place-search-auto-complete-item',
    child: [{
      "class": 'as-place-search-auto-complete-item-desc',
      child: {
        text: item.description
      }
    }]
  });
};

LocationPicker.prototype.getBoundsZoomLevel = function (bounds) {
  var mapDim = this.getBoundingClientRect();
  return getMapZoomLevel(mapDim, bounds);
};

LocationPicker.prototype.clearSearchingMarkers = function () {
  while (this.searchingMarkers.length > 0) {
    this.searchingMarkers.pop().setMap(null);
  }
};
/**
 *
 * @param place
 * @param {boolean=} panTo
 */


LocationPicker.prototype.selectPlace = function (place, panTo) {
  var _this = this;

  if (arguments.length === 1) panTo = true;
  return getGoogleMarkerLib().then(function () {
    _this.selectedPlace = place || null;

    if (_this.selectedMarker) {
      _this.selectedMarker.setMap(null);
    }

    _this.$okBtn.disabled = !_this.selectedPlace;
    if (!place) return;
    var latLng = place.geometry && place.geometry.location;
    if (!latLng) return;
    var zoom = panTo && (place.geometry.bounds || place.geometry.viewport) ? _this.getBoundsZoomLevel(place.geometry.bounds || place.geometry.viewport) : 18;

    if (panTo) {
      _this.map.setZoom(zoom);

      setTimeout(function () {
        _this.map.panTo(latLng);
      }, 100);
    }

    _this.selectedMarker = new google.maps.marker.AdvancedMarkerElement({
      map: _this.map,
      position: latLng
    });

    _this.infoWindow.setContent((place.name ? place.name + ' - ' : '') + place.formatted_address);

    _this.infoWindow.open(_this.map, _this.selectedMarker);
  });
};

LocationPicker.prototype.showSearchPlaces = function (places) {
  this.clearSearchingMarkers();
  if (!places || places.length === 0) return;

  if (places.length === 1) {
    this.selectPlace(places[0]);
    return;
  }

  var bounds = places.reduce(function (ac, place) {
    if (place.geometry && place.geometry.location) ac.extend(place.geometry.location);
    return ac;
  }, new google.maps.LatLngBounds());
  var zoom = places.length === 1 ? places[0].geometry.bounds || places[0].geometry.viewport ? this.getBoundsZoomLevel(places[0].geometry.bounds || places[0].geometry.viewport) : 18 : this.getBoundsZoomLevel(bounds);
  var center = places.length === 1 ? places[0].geometry.location : bounds.getCenter();
  this.map.setCenter(center);
  this.map.setZoom(zoom);
  places.reduce(function (ac, place, i) {
    var marker;

    if (place.geometry && place.geometry.location) {
      marker = new google.maps.marker.AdvancedMarkerElement({
        map: this.map,
        position: place.geometry.location // icon: 'https://raw.githubusercontent.com/Concept211/Google-Maps-Markers/master/images/marker_black.png'

      });
      ac.push(marker);
      marker.addListener('click', this.eventHandler.clickMarker.bind(null, marker, place));
    }

    return ac;
  }.bind(this), this.searchingMarkers);
};
/***
 *
 * @param {string} placeId
 * @param {boolean=} panTo
 */


LocationPicker.prototype.selectPlaceId = function (placeId, panTo) {
  var _this2 = this;

  if (arguments.length === 1) panTo = true;
  return new Promise(function (resolve) {
    _this2.placeService.getDetails({
      placeId: placeId,
      fields: ["name", "formatted_address", "place_id", "geometry"]
    }, function (place, status) {
      if (status === google.maps.places.PlacesServiceStatus.OK && place && place.geometry && place.geometry.location) {
        _this2.selectPlace(place, panTo).then(function () {
          resolve(true);
        });
      } else {
        resolve(false);
      }
    });
  });
};
/***
 *
 * @param latLng
 * @param {boolean=} panTo
 */


LocationPicker.prototype.selectLocation = function (latLng, panTo) {
  var _this3 = this;

  if (arguments.length === 1) panTo = true;
  if (arguments.length === 1) panTo = true;
  return getGoogleMarkerLib().then(function () {
    if (_this3.selectedMarker) {
      _this3.selectedMarker.setMap(null);
    }

    _this3.$okBtn.disabled = !latLng;
    _this3.selectedPlace = null;
    if (!latLng) return;
    _this3.selectedPlace = {
      geometry: {
        location: latLng
      }
    };
    var zoom = 18;

    if (panTo) {
      _this3.map.setZoom(zoom);

      setTimeout(function () {
        _this3.map.panTo(latLng);
      }, 100);
    }

    _this3.selectedMarker = new google.maps.marker.AdvancedMarkerElement({
      map: _this3.map,
      position: latLng
    });
  }); // this.infoWindow.open(this.map, this.selectedMarker);

  /*
  return this.geocoder
      .geocode({ location: latLng })
      .then(function (response) {
          if (response.results[0]) {
              return this.selectPlaceId(response.results[0].place_id, panTo);
          }
          else {
              return false;
          }
      }.bind(this))
      .catch(function (e) {
          safeThrow(e);
          return false;
      });
     */
};

LocationPicker.prototype.watchMyLocation = function (location, position) {
  var _this4 = this;

  return getGoogleMarkerLib().then(function () {
    if (_this4.myLocationMarker) return;
    _this4.accuracyCircle = new google.maps.Circle({
      strokeColor: "#1988c3",
      strokeOpacity: 0.4,
      strokeWeight: 2,
      fillColor: "#1988c3",
      fillOpacity: 0.2,
      radius: 100,
      map: _this4.map,
      clickable: false
    });

    _this4.accuracyCircle.setEditable(false);

    _this4.myLocationMarker = new google.maps.marker.AdvancedMarkerElement({
      position: location,
      title: "My Location",
      // sName: "My Location",
      map: _this4.map,
      content: createMyLocationMarkerContent()
    });

    if (position && position.coords) {
      _this4.accuracyCircle.setRadius(position.coords.accuracy); // Snackbar.show('Accuracy: ' + position.coords.accuracy.toFixed(1) + '(m)');

    }

    var id;

    if (navigator.geolocation.watchPosition && navigator.geolocation.watchPosition) {
      id = navigator.geolocation.watchPosition(function (props) {
        if (!this.isDescendantOf(document.body)) {
          navigator.geolocation.clearWatch(id);
        }

        this.emit('location_now', {
          location: props.coords
        });
        this.myLocationMarker.position = new google.maps.LatLng(props.coords.latitude, props.coords.longitude);
        this.accuracyCircle.setCenter(new google.maps.LatLng(props.coords.latitude, props.coords.longitude));
        this.accuracyCircle.setRadius(props.coords.accuracy); // Snackbar.show('Sai số tọa độ: ' + props.coords.accuracy.toFixed(1) + ' mét');
      }.bind(_this4), function () {}, {
        enableHighAccuracy: false,
        timeout: 5000,
        maximumAge: 0
      });
    }
  });
};

LocationPicker.prototype.selectMyLocation = function () {
  var _this5 = this;

  var id = randomIdent();
  this.emit('requestlocation', {
    id: id
  });

  if (navigator.geolocation) {
    var to = setTimeout(function () {
      _this5.emit('error', Object.assign(new Error("GPS không phản hồi!"), {
        id: id
      }));
    }, 10000);
    navigator.geolocation.getCurrentPosition(function (position) {
      clearTimeout(to);
      var location = null;

      if (position && position.coords) {
        _this5.emit('location', {
          location: position.coords,
          id: id
        });

        location = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
      }

      if (location) {
        _this5.watchMyLocation(location, position);

        if (!_this5.readOnly) _this5.selectLocation(location);else {
          _this5.map.setCenter(location);
        }
      }
    }, function (err) {
      clearTimeout(to);
      if (err && err.message.indexOf('denied') >= 0) err = Object.assign(new Error("Yêu cầu lấy tọa độ bị từ chối!"), {
        id: id
      });

      _this5.emit('error', err);
    }, {
      maximumAge: Infinity
    });
  }
};

LocationPicker.property = {};
LocationPicker.property.zoom = {
  set: function set(value) {
    if (!isRealNumber(value)) {
      value = 1;
    }

    this.map.setZoom(value);
  },
  get: function get() {
    return this.map.getZoom();
  }
};
LocationPicker.property.center = {
  set: function set(value) {
    value = value || null;
    var latlng = null;

    if (value instanceof google.maps.LatLng) {
      latlng = value;
    } else if (value && isRealNumber(value.latitude) && isRealNumber(value.longitude)) {
      latlng = new google.maps.LatLng(value.latitude, value.longitude);
    } else if (value instanceof Array && isRealNumber(value[0]) && isRealNumber(value[1])) {
      latlng = new google.maps.LatLng(value[0], value[1]);
    }

    latlng = latlng || new google.maps.LatLng(21.018755, 105.839729);
    this.map.setCenter(latlng || new google.maps.LatLng(21.018755, 105.839729));
  },
  get: function get() {
    return this.map.getCenter();
  }
};
LocationPicker.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
/***
 *
 * @type {{}}
 * @memberOf LocationPicker#
 */

LocationPicker.eventHandler = {};
/***
 * @this LocationPicker
 */

LocationPicker.eventHandler.searchKeypress = function (event) {
  if (event.key === 'Enter') setTimeout(function () {
    if (!this.$searchInput.selectedItem) {
      this.eventHandler.search();
    }
  }.bind(this), 100);
};

LocationPicker.eventHandler.searchChange = function () {
  var item = this.$searchInput.selectedItem;
  if (!item) return;
  this.placeService.getDetails({
    placeId: item.place_id,
    fields: ["name", "formatted_address", "place_id", "geometry"]
  }, function (place, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK && place && place.geometry && place.geometry.location) {
      this.selectPlace(place);
    }
  }.bind(this));
};
/***
 * @this LocationPicker
 */


LocationPicker.eventHandler.search = function () {
  var request = {
    bounds: this.map.getBounds(),
    query: this.$searchInput.value
  };
  if (!request.query) return;
  this.placeService.textSearch(request, function callback(results, status) {
    if (status === google.maps.places.PlacesServiceStatus.OK) {
      this.showSearchPlaces(results);
    }
  }.bind(this));
};

LocationPicker.eventHandler.clickMarker = function (marker, place) {
  if (this.readOnly) return;
  this.selectPlace(place, false);
};

LocationPicker.eventHandler.clickMap = function (event) {
  if (this.readOnly) return;

  if (event.placeId) {
    this.selectPlaceId(event.placeId);
  } else if (event.latLng) {
    this.selectLocation(event.latLng, false);
  }
};

LocationPicker.eventHandler.clickAction = function (action, event) {
  this.emit('action', {
    type: 'action',
    action: action,
    originalEvent: event,
    target: this
  }, this);
};

absol_acomp_ACore.install(LocationPicker);
/* harmony default export */ const js_LocationPicker = (LocationPicker);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationInput.js
function LocationInput_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LocationInput_typeof = function _typeof(obj) { return typeof obj; }; } else { LocationInput_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LocationInput_typeof(obj); }








function LocationInput() {
  this.$text = ACore_$('input', this).on('change', this.eventHandler.textChange);
  this.$iconCtn = ACore_$('.as-location-input-icon-ctn', this).on('click', this.eventHandler.clickIcon);
  /***
   * @type {{latitude: number, longitude: number}}
   * @name latLng
   * @memberOf LocationInput#
   */

  /***
   * @type {string}
   * @name value
   * @memberOf LocationInput#
   */

  /***
   * @type {boolean}
   * @name readOnly
   * @memberOf LocationInput#
   */
}

LocationInput.tag = 'LocationInput'.toLowerCase();

LocationInput.render = function () {
  return ACore_({
    "class": 'as-location-input',
    extendEvent: ['change'],
    child: [{
      tag: 'input',
      attr: {
        type: 'text'
      },
      "class": 'as-location-input-text'
    }, {
      "class": 'as-location-input-icon-ctn',
      child: 'span.mdi.mdi-google-maps'
    }]
  });
};

LocationInput.prototype.share = {
  $modal: null,
  $picker: null,
  $holder: null
};

LocationInput.prototype._preparePicker = function () {
  if (this.share.$picker) return;
  this.share.$picker = ACore_({
    tag: js_LocationPicker.tag
  });
  this.share.$modal = ACore_({
    tag: 'modal',
    "class": 'as-location-input-modal',
    child: {
      "class": 'as-location-input-modal-window',
      child: this.share.$picker
    }
  });

  if (Detector_BrowserDetector.isMobile) {
    this.share.$modal.addClass('as-mobile');
  }
};
/***
 * @this LocationInput
 * @private
 */


LocationInput.prototype._attachPicker = function () {
  if (this.share.$holder) {
    this.share.$holder._releasePicker();
  }

  this._preparePicker();

  this.share.$holder = this;
  this.$iconCtn.off('click', this.eventHandler.clickIcon);
  document.body.appendChild(this.share.$modal);
  this.share.$picker.on('action', this.eventHandler.pickerAction);
  this.share.$picker.$searchInput.value = '';
  this.share.$picker.readOnly = this.readOnly;
  setTimeout(function () {
    document.addEventListener('click', this.eventHandler.clickOut);
  }.bind(this), 100);
  var value = this.latLng;

  if (value) {
    value = new google.maps.LatLng(value.latitude, value.longitude);
  }

  if (value) this.share.$picker.selectLocation(value, true);else this.share.$picker.selectPlace(null);
};

LocationInput.prototype._releasePicker = function () {
  if (this.share.$holder !== this) return;
  this.share.$picker.off('action', this.eventHandler.pickerAction);
  this.$iconCtn.on('click', this.eventHandler.clickIcon);
  document.removeEventListener('click', this.eventHandler.clickOut);
  this.share.$modal.remove();
  this.share.$holder = null;
};
/**
 *
 * @type {{}}
 * @memberOf LocationInput#
 */


LocationInput.eventHandler = {};

LocationInput.eventHandler.pickerAction = function (event) {
  if (!this.readOnly && event.action === 'OK' && this.share.$picker.selectedPlace && this.share.$picker.selectedPlace.geometry && this.share.$picker.selectedPlace.geometry.location) {
    this.$text.value = [this.share.$picker.selectedPlace.geometry.location.lat(), this.share.$picker.selectedPlace.geometry.location.lng()].join(', ');
    this.emit('change', {
      type: 'change',
      originalEvent: event.originalEvent || event,
      target: this
    }, this);
  }

  this._releasePicker();
};
/***
 * @this LocationInput
 */


LocationInput.eventHandler.clickIcon = function () {
  this._attachPicker();
};
/***
 * @this LocationInput
 * @param event
 */


LocationInput.eventHandler.clickOut = function (event) {
  if (event.target === this.share.$modal) this._releasePicker();
};

LocationInput.eventHandler.textChange = function (event) {
  this.emit('change', {
    type: 'change',
    originalEvent: event.originalEvent || event,
    target: this
  }, this);
};

LocationInput.property = {};
LocationInput.property.value = {
  set: function set(value) {
    value = value || null;
    var lat, lng;

    if (typeof value === "string") {
      this.$text.value = value;
      return;
    }

    if (value instanceof Array) {
      lat = value[0];
      lng = value[1];
    } else if (value && LocationInput_typeof(value) === 'object') {
      if ('latitude' in value && 'longitude' in value) {
        lat = value.latitude;
        lng = value.longitude;
      } else if (value instanceof google.maps.LatLng) {
        lat = value.lat();
        lng = value.lng();
      }
    }

    if (isRealNumber(lat) && isRealNumber(lng)) {
      this.$text.value = [lat, lng].join(', ');
    } else {
      this.$text.value = '';
    }
  },
  get: function get() {
    var nums = this.$text.value.split(/\s*,\s*/);
    var lat = parseFloat(nums[0]);
    var lng = parseFloat(nums[1]);

    if (isRealNumber(lat) && isRealNumber(lng)) {
      lat = Math.max(-90, Math.min(90, lat));
      if (lng < 180 && lng > 180) lng = (lng + 180 + 360 * Math.ceil(Math.abs(lng) / 360 + 2)) % 360 - 180;
      return [lat, lng].join(', ');
    } else {
      return '';
    }
  }
};
LocationInput.property.latLng = {
  get: function get() {
    var nums = this.$text.value.split(/\s*,\s*/);
    var lat = parseFloat(nums[0]);
    var lng = parseFloat(nums[1]);

    if (isRealNumber(lat) && isRealNumber(lng)) {
      lat = Math.max(-90, Math.min(90, lat));
      if (lng < 180 && lng > 180) lng = (lng + 180 + 360 * Math.ceil(Math.abs(lng) / 360 + 2)) % 360 - 180;
      return {
        latitude: lat,
        longitude: lng
      };
    } else {
      return null;
    }
  }
};
LocationInput.property.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }

    this.$text.readOnly = !!value;
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
LocationInput.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }

    this.$text.disabled = !!value;
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
absol_acomp_ACore.install(LocationInput);
/* harmony default export */ const js_LocationInput = (LocationInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mknavigator.css
var mknavigator = __webpack_require__(5778);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MKNavigatorItem.js






/***
 * @extends AElement
 * @constructor
 */

function MKNavigatorItem() {
  this._data = [];
  this.$text = ACore_$('.mk-nav-item-text', this);
  this.$switchCtn = ACore_$('.mk-nav-item-switch-ctn', this);
  this.$switch = ACore_$('switch', this).on('change', this.eventHandler.switchChange);
  this.$dragzone = ACore_$('.mk-nav-item-drag-zone', this);
  this.on('click', this.eventHandler.click);
}

MKNavigatorItem.tag = 'MKNavigatorItem'.toLowerCase();

MKNavigatorItem.render = function () {
  return ACore_({
    tag: js_Board.tag,
    "class": 'mk-nav-item',
    extendEvent: ['checkedchange', 'press'],
    child: [{
      "class": ['mk-nav-item-drag-zone', js_BoardTable.DRAG_ZONE_CLASS_NAME],
      child: '<i class="material-icons">drag_indicator</i>'
    }, {
      "class": 'mk-nav-item-text-ctn',
      child: {
        tag: 'span',
        "class": 'mk-nav-item-text',
        child: {
          text: ''
        }
      }
    }, {
      "class": 'mk-nav-item-switch-ctn',
      child: {
        tag: js_Switch.tag
      }
    }]
  });
};

MKNavigatorItem.prototype.updateText = function () {
  this.$text.firstChild.data = this._data.text;
};

MKNavigatorItem.prototype.updateChecked = function () {
  if (typeof this._data.checked === "boolean") {
    this.$switchCtn.removeStyle('display');
    this.$switch.checked = this._data.checked;
  } else {
    this.$switchCtn.addStyle('display', 'none');
  }
};

MKNavigatorItem.prototype.updateDraggable = function () {
  if (this._data.draggable) {
    this.$dragzone.removeStyle('display');
  } else {
    this.$dragzone.addStyle('display', 'none');
  }
};

MKNavigatorItem.property = {};
MKNavigatorItem.property.data = {
  /**
   * @this MKNavigatorItem
   * @param data
   */
  set: function set(data) {
    data = data || {};
    this._data = data;
    this.updateText();
    this.updateChecked();
    this.updateDraggable();
  },
  get: function get() {
    return this._data;
  }
};
/***
 * @memberOf MKNavigatorItem#
 * @type {{}}
 */

MKNavigatorItem.eventHandler = {};

MKNavigatorItem.eventHandler.switchChange = function (event) {
  this._data.checked = this.$switch.checked;
  this.emit('checkedchange', {
    type: 'checkedchange'
  }, this);
};

MKNavigatorItem.eventHandler.click = function (event) {
  if (hitElement(this.$switch, event) || hitElement(this.$dragzone, event)) return;
  this.emit('press', {
    type: 'press',
    target: this,
    originalEvent: event
  }, this);
};

absol_acomp_ACore.install(MKNavigatorItem);
/* harmony default export */ const js_MKNavigatorItem = (MKNavigatorItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MKNavigator.js




/***
 * @typedef MKNavigatorItemData
 * @property {string} text
 * @property {string|number} value
 * @property {boolean|number=} checked
 */

/***
 * @extends AElement
 * @constructor
 */

function MKNavigator() {
  this._items = [];
  this._value = 0;
  this._hiddenValues = [];
  this.$itemByValue = {};
  this.$header = ACore_$('.mk-nav-header', this);
  this.$body = ACore_$('.mk-nav-body', this).on('orderchange', this.eventHandler.bodyOrderChange).on('dragitemstart', this.eventHandler.dragItemStart);
  this.$footer = ACore_$('.mk-nav-footer', this);
  /***
   * @type {MKNavigatorItemData[]}
   * @name item
   * @memberOf MKNavigator#
   */

  /***
   * @type {number[]}
   * @name order
   * @memberOf MKNavigator#
   */
}

MKNavigator.tag = 'MKNavigator'.toLowerCase();

MKNavigator.render = function () {
  return ACore_({
    "class": 'mk-nav',
    extendEvent: ['orderchange', 'checkedchange', 'press'],
    child: [{
      "class": 'mk-nav-header'
    }, {
      tag: js_BoardTable.tag,
      "class": 'mk-nav-body'
    }, {
      "class": 'mk-nav-footer'
    }]
  });
};

MKNavigator.prototype.updateValue = function () {
  var _this = this;

  var value = this._value;

  for (var iValue in this.$itemByValue) {
    if (iValue + '' !== value + '') {
      this.$itemByValue[iValue].removeClass('mk-current');
    }
  }

  var order = this.order;

  if (this.$itemByValue[value]) {
    this.$itemByValue[value].addClass('mk-current');
  } else if (order.length > 0) {
    this.$itemByValue[order[0]].addClass('mk-current');
  }

  var idx = order.filter(function (value) {
    return !_this.$itemByValue[value].hasClass('as-hidden');
  }).indexOf(value);

  if (idx >= 0) {
    this.addStyle('--mk-nav-line-top', "calc(".concat(2 * idx, "em + ").concat(12 * idx, "px)"));
  } else {
    this.removeStyle('--mk-nav-line-top');
  }
};

MKNavigator.prototype.setTextOfItem = function (value, text) {
  var itemElt = this.$itemByValue[value];
  if (!itemElt) return;
  itemElt.data.text = text;
  itemElt.updateText();
};

MKNavigator.prototype.mkItem = function (data) {
  var self = this;
  return ACore_({
    tag: js_MKNavigatorItem.tag,
    attr: {
      "data-value": data && data.value
    },
    props: {
      data: data
    },
    on: {
      checkedchange: function checkedchange(event) {
        self.emit('checkedchange', {
          type: 'checkedchange',
          target: this,
          originalEvent: event.originalEvent,
          itemData: data,
          checked: data.checked
        }, self);
      },
      press: function press(event) {
        self.value = data.value;
        self.emit('press', {
          type: 'press',
          itemElt: this,
          itemData: data,
          value: data.value,
          target: this,
          originalEvent: event.originalEvent
        }, self);
      }
    }
  });
};

MKNavigator.prototype._updateHiddenValues = function () {
  var _this2 = this;

  var hiddenDict = this._hiddenValues.reduce(function (ac, x) {
    ac[x] = true;
    return ac;
  }, {});

  Object.keys(this.$itemByValue).forEach(function (value) {
    if (hiddenDict[value]) {
      _this2.$itemByValue[value].addClass('as-hidden');
    } else {
      _this2.$itemByValue[value].removeClass('as-hidden');
    }
  });
};

MKNavigator.property = {};
MKNavigator.property.items = {
  /***
   * @this MKNavigator
   * @param items
   */
  set: function set(items) {
    items = items || [];
    this._items = items;
    this.$itemByValue = {};
    var i = 0;
    var item;
    var itemElt;
    this.$header.clearChild();
    this.$body.clearChild();
    this.$footer.clearChild();
    var draggable = false;

    while (i < items.length) {
      if (items[i].draggable) break;
      item = items[i];
      itemElt = this.mkItem(item);
      this.$itemByValue[item.value] = itemElt;
      this.$header.addChild(itemElt);
      ++i;
    }

    while (i < items.length) {
      if (!items[i].draggable) break;
      draggable = true;
      item = items[i];
      itemElt = this.mkItem(item);
      this.$itemByValue[item.value] = itemElt;
      this.$body.addChild(itemElt);
      ++i;
    }

    while (i < items.length) {
      item = items[i];
      itemElt = this.mkItem(item);
      this.$itemByValue[item.value] = itemElt;
      this.$footer.addChild(itemElt);
      ++i;
    }

    if (draggable) {
      this.addClass('mk-has-draggable');
    } else {
      this.removeClass('mk-has-draggable');
    }

    this._updateHiddenValues();
  },
  get: function get() {
    return this._items;
  }
};
MKNavigator.property.order = {
  get: function get() {
    return $$(js_MKNavigatorItem.tag, this).map(function (e) {
      return e.data.value;
    });
  }
};
MKNavigator.property.value = {
  set: function set(value) {
    this._value = value;
    this.updateValue();
  },
  get: function get() {
    if (this.$itemByValue[this._value]) return this._value;
    if (this._items.length > 0) return this._items[0];
    return this._value;
  }
};
MKNavigator.property.hiddenValues = {
  set: function set(values) {
    values = values || [];
    if (!(values instanceof Array)) values = [];
    this._hiddenValues = values;

    this._updateHiddenValues();

    this.updateValue();
  },
  get: function get() {
    return this._hiddenValues;
  }
};
/***
 * @memberOf MKNavigator#
 * @type {{}}
 */

MKNavigator.eventHandler = {};

MKNavigator.eventHandler.bodyOrderChange = function (event) {
  this.updateValue();

  this._items.splice(0, this._items.length);

  $$(js_MKNavigatorItem.tag, this).reduce(function (ac, cr) {
    ac.push(cr.data);
    return ac;
  }, this._items);
  this.emit('orderchange', {
    type: 'orderchange',
    target: this
  }, this);
};
/***
 * @memberOf MKNavigator#
 * @type {{}}
 */


MKNavigator.eventHandler.dragItemStart = function (event) {
  var bound = this.getBoundingClientRect();
  this.addStyle('--mk-navigator-bound-left', bound.left + 'px');
};

absol_acomp_ACore.install(MKNavigator);
/* harmony default export */ const js_MKNavigator = (MKNavigator);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/processlbar.css
var processlbar = __webpack_require__(4214);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProcessLBar.js



/***
 * @extends AElement
 * @constructor
 */

function ProcessLBar() {
  this.$stepCtn = ACore_$('.as-process-l-bar-step-ctn', this);
  this.$stepName = ACore_$('.as-process-l-bar-step-name', this);
  this.$items = [];
  this._items = [];
  this._lHeight = 3;
  this._value = null;
}

ProcessLBar.tag = 'ProcessLBar'.toLowerCase();

ProcessLBar.render = function () {
  return ACore_({
    "class": 'as-process-l-bar',
    extendEvent: 'change',
    child: [{
      "class": 'as-process-l-bar-step-ctn'
    }, {
      "class": 'as-process-l-bar-step-name'
    }]
  });
};

ProcessLBar.prototype._updateCol = function () {
  var colN = Math.max(this.$items.length - this._lHeight + 1, 0);

  while (this.$stepCtn.childNodes.length > colN) {
    this.$stepCtn.lastChild.remove();
  }

  while (this.$stepCtn.childNodes.length < colN) {
    this.$stepCtn.addChild(ACore_('.as-process-l-bar-col'));
  }

  var i;

  for (i = 0; i < colN; ++i) {
    this.$stepCtn.childNodes[i].clearChild().addChild(this.$items[i]);
  }

  for (i = colN; i < this.$items.length; ++i) {
    this.$stepCtn.lastChild.addChild(this.$items[i]);
  }

  this.nameWidth = this._items.reduce(function (ac, cr) {
    return Math.max(ac, utils_measureText(cr.name, 'bold 14px Arial, Helvetica, sans-serif').width);
  }, 0);

  if (colN <= 1) {
    this.addClass('as-col-layout');
  } else {
    this.removeClass('as-col-layout');
  }

  if (colN <= 2) {
    this.addStyle('--as-process-l-bar-item-min-width', this.nameWidth + 'px');
  } else {
    this.addStyle('--as-process-l-bar-item-min-width', (this.nameWidth + 10) / (colN - 1) - 10 + 'px');
  }
};

ProcessLBar.prototype._updateValue = function () {
  var value = this._value;
  this.$items.forEach(function (elt) {
    if (elt.itemData.value === value) {
      elt.addClass('as-active');
      this.$stepName.clearChild().addChild(ACore_({
        tag: 'span',
        child: {
          text: elt.itemData.name
        }
      }));
    } else {
      elt.removeClass('as-active');
    }
  }.bind(this));
};

ProcessLBar.prototype.notifyChange = function (originalEvent) {
  this.emit('change', {
    type: 'change',
    target: this,
    originalEvent: originalEvent || null
  }, this);
};

ProcessLBar.prototype._makeItem = function (item) {
  var self = this;

  var stepElt = ACore_({
    "class": 'as-process-l-bar-step',
    attr: {
      title: item.name
    },
    props: {
      itemData: item
    },
    on: {
      click: function click(event) {
        if (self.disabled) return;
        var value = this._value;
        if (item.value === value) return;
        self.value = item.value;
        self.notifyChange(event);
      }
    }
  });

  if (item.color) {
    stepElt.addStyle('--as-process-l-bar-active-color', item.color);
  }

  return stepElt;
};

ProcessLBar.property = {};
ProcessLBar.property.items = {
  set: function set(items) {
    items = items || [];
    this._items = items;
    this.$itemByValue = {};
    this.$items = this._items.map(function (item) {
      return this._makeItem(item);
    }.bind(this));

    this._updateCol();

    this._updateValue();
  },
  get: function get() {
    return this._items;
  }
};
ProcessLBar.property.value = {
  set: function set(value) {
    this._value = value;

    this._updateValue();
  },
  get: function get() {
    return this._value;
  }
};
ProcessLBar.property.lHeight = {
  set: function set(value) {
    this._lHeight = value;

    if (value === 1) {
      this.addClass('as-single-line');
    } else {
      this.removeClass('as-single-line');
    }

    this._updateCol();
  },
  get: function get() {
    return this._lHeight;
  }
};
ProcessLBar.property.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
/* harmony default export */ const js_ProcessLBar = (ProcessLBar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/kvcommentitem.css
var kvcommentitem = __webpack_require__(9175);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/KVCommentItem.js





/***
 * @extends AElement
 * @constructor
 */

function KVCommentItem() {
  this._time = new Date();
  this._text = '';
  this.$text = ACore_$('.kv-comment-item-text', this);
  this.$time = ACore_$('.kv-comment-item-time', this);
  this.$avatar = ACore_$('.kv-comment-avatar', this);
  this.quickmenu = null;
  this.on('contextmenu', this.eventHandler.kv_contextmenu);
  ContextMenu.auto();
}

KVCommentItem.tag = 'KVCommentItem'.toLowerCase();

KVCommentItem.render = function () {
  return ACore_({
    extendEvent: 'contextmenu',
    "class": "kv-comment-item",
    child: [{
      "class": "kv-comment-avatar-ctn",
      child: {
        "class": 'kv-comment-avatar',
        style: {
          backgroundImage: 'url(https://raw.githubusercontent.com/duthienkt/absol/master/logo.svg?sanitize=true)'
        }
      }
    }, {
      "class": "kv-comment-item-content",
      child: [{
        "class": 'kv-comment-item-text',
        child: {
          text: ''
        }
      }, {
        "class": 'kv-comment-item-time',
        child: {
          text: formatDateTime(new Date(), 'dd/MM/yyyy HH:mm')
        }
      }]
    }, {
      "class": "kv-comment-item-flag-ctn",
      child: ['.kv-comment-item-flag-unread']
    }]
  });
};

KVCommentItem.property = {};
KVCommentItem.property.text = {
  set: function set(value) {
    value = value || '';
    if (typeof value === 'string') this.$text.innerHTML = value;else if (absol.Dom.isDomNode(value)) {
      this.$text.clearChild().addChild(value);
    } else {
      this.$text.clearChild().addChild(ACore_(value));
    }
    this._text = value;
  },
  get: function get() {
    return this._text;
  }
};
KVCommentItem.property.unread = {
  set: function set(value) {
    if (value) {
      this.addClass('as-unread');
    } else {
      this.removeClass('as-unread');
    }
  },
  get: function get() {
    return this.hasClass('as-unread');
  }
};
KVCommentItem.property.time = {
  set: function set(value) {
    this._time = value;
    var text = '';
    if (typeof value === 'string') text = value;else if (value instanceof Date) {
      text = formatDateTime(value, 'dd/MM/yyyy HH:mm');
    }
    this.$time.firstChild.data = text;
  },
  get: function get() {
    return this._time;
  }
};
KVCommentItem.property.avatar = {
  set: function set(value) {
    value = value || 'https://raw.githubusercontent.com/duthienkt/absol/master/logo.svg?sanitize=true';
    this._avatar = value;
    this.$avatar.addStyle('backgroundImage', 'url(' + value + ')');
  },
  get: function get() {
    return this._avatar;
  }
};
/***
 * @memberOf KVCommentItem#
 * @type {{}}
 */

KVCommentItem.eventHandler = {};
/***
 * @this KVCommentItem
 * @param event
 */

KVCommentItem.eventHandler.kv_contextmenu = function (event) {
  if (this.quickmenu) {
    event.showContextMenu(this.quickmenu.props, function (event) {
      var menuItem = cleanMenuItemProperty(event.menuItem);

      if (this.quickmenu.onSelect) {
        this.quickmenu.onSelect.call(this, menuItem);
      }
    }.bind(this));
  }
};

absol_acomp_ACore.install(KVCommentItem);
/* harmony default export */ const js_KVCommentItem = (KVCommentItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTHeadCell.js




var implicitSortKeyArr = function implicitSortKeyArr(key) {
  var res;

  if (typeof key === 'string') {
    res = key.split(/[\s,;]+/);
  } else if (key instanceof Array) {
    res = key.slice();
  } else res = [];

  res = res.filter(function (k) {
    return !!k;
  }).map(function (k) {
    return k + '';
  });
  return res;
};
/***
 *
 * @param {DTHeadRow} row
 * @param data
 * @constructor
 */


function DTHeadCell(row, data) {
  this.row = row;
  this._elt = null;
  this._copyElt = null;
  this._copyElt1 = null;
  this._copyElt2 = null;
  this.data = data;
  this._idx = null;
}

DTHeadCell.prototype.makeAutoSortAttribute = function () {
  var rows = this.row.head.table.data && this.row.head.table.data.body && this.row.head.table.data.body.rows;
  if (!rows || !rows.length) return;
  if (this.elt.attr('data-sort-key')) return;
  var idx = this.idx;
  var canSort = rows.every(function (row) {
    return row.cells[idx] && typeof row.cells[idx].innerText === 'string';
  });

  if (canSort) {
    this.elt.attr('data-sort-key', '[' + idx + ']');
    this.data.sortKey = '[' + idx + ']';

    this._elt.attr('data-sort-order', 'none');

    this._elt.attr('title', 'Sort');
  }
};

Object.defineProperty(DTHeadCell.prototype, 'idx', {
  set: function set(value) {
    this._idx = value;
    this.elt.attr('data-col-idx', value + '');
    this.makeAutoSortAttribute();
  },
  get: function get() {
    return this._idx;
  }
});

DTHeadCell.prototype.nextSortState = function (event) {
  var _this = this;

  if (!this.elt.attr('data-sort-key')) return;
  var c = this.elt.attr('data-sort-order') || 'none';
  var n = {
    none: 'ascending',
    ascending: 'descending',
    descending: 'none'
  }[c] || 'none';
  var sortKeyArr = implicitSortKeyArr(this.data.sortKey || c);
  var sortBtn = this.$sortBtn;
  var followerElt, menuElt, items;

  if (sortKeyArr.length === 1) {
    $$('th', this.row.elt).forEach(function (elt) {
      if (elt === _this.elt) return;

      if (elt.attr('data-sort-key')) {
        elt.attr('data-sort-order', 'none');
      }
    });
    this.elt.attr('data-sort-order', n);
    this.row.head.table.wrapper.requestQuery();
  } else {
    items = [{
      text: 'Không sắp xếp',
      value: {
        key: sortKeyArr.join(';'),
        order: 'none'
      },
      icon: 'span.mdi.mdi-sort-variant-off'
    }];

    if (c === 'none') {
      items[0].extendStyle = {
        color: '#007bff'
      };
    }

    sortKeyArr.forEach(function (key) {
      items.push('-------');
      var text = _this.data.sortMenu && _this.data.sortMenu[key] && _this.data.sortMenu[key][0];
      text = text || "Tăng theo " + key;
      var item = {
        icon: 'span.mdi.mdi-sort-ascending',
        text: text,
        value: {
          key: key,
          order: 'ascending'
        }
      };

      if (key === _this.elt.attr('data-sort-key') && c === 'ascending') {
        item.extendStyle = {
          color: '#007bff'
        };
      }

      items.push(item);
      text = _this.data.sortMenu && _this.data.sortMenu[key] && _this.data.sortMenu[key][1];
      text = text || "Tăng theo " + key;
      item = {
        icon: 'span.mdi.mdi-sort-descending',
        text: text,
        value: {
          key: key,
          order: 'descending'
        }
      };

      if (key === _this.elt.attr('data-sort-key') && c === 'descending') {
        item.extendStyle = {
          color: '#007bff'
        };
      }

      items.push(item);
    });
    menuElt = ACore_({
      tag: 'vmenu',
      props: {
        items: items
      },
      on: {
        press: function press(event) {
          var value = event.menuItem.value;
          $$('th', _this.row.elt).forEach(function (elt) {
            if (elt === _this.elt) return;

            if (elt.attr('data-sort-key')) {
              elt.attr('data-sort-order', 'none');
            }
          });

          _this.elt.attr('data-sort-order', value.order);

          _this.elt.attr('data-sort-key', value.key);

          _this.row.head.table.wrapper.requestQuery();

          finish();
        }
      }
    });
    followerElt = ACore_({
      tag: js_Follower,
      "class": 'absol-context-menu-anchor',
      style: {
        zIndex: findMaxZIndex(sortBtn) + 22
      },
      child: [menuElt],
      props: {
        followTarget: sortBtn
      }
    }).addTo(document.body);

    var finish = function finish() {
      document.removeEventListener('click', finish);
      followerElt.remove();
    };

    setTimeout(function () {
      followerElt.addStyle('visibility', 'visible').addStyle('opacity', 1);
    }, 5);
  }
};

DTHeadCell.prototype.updateCopyEltSize = function () {
  if (!this._copyElt && !this._copyElt1 && !this._copyElt2) return; // copyElt is in space

  var bound = this._copyElt.getBoundingClientRect();

  this._elt.addStyle('width', bound.width + 'px');

  if (this._copyElt1) {
    this._copyElt1.addStyle('width', bound.width + 'px');
  }

  if (this._copyElt2) {
    this._copyElt2.addStyle('width', bound.width + 'px');
  }
};

Object.defineProperty(DTHeadCell.prototype, 'elt', {
  get: function get() {
    var _this2 = this;

    if (this._elt) return this._elt;
    var eventAdded = false;

    var onPointerDown = function onPointerDown(event) {
      if (event.target.hasClass && event.target.hasClass('as-dt-header-cell-resizer')) return;

      if (!eventAdded) {
        document.addEventListener('pointerup', onPointerUp);
        eventAdded = true;
      }
    };

    var onPointerUp = function onPointerUp() {
      document.removeEventListener('pointerup', onPointerUp);
      eventAdded = false;

      _this2.nextSortState();
    };

    this._elt = ACore_({
      tag: 'th',
      "class": 'as-dt-header-cell'
    }).on('pointerdown', onPointerDown);

    if (this.data.attr) {
      this._elt.attr(this.data.attr);
    }

    if (this.data.style) {
      this._elt.addStyle(this.data.style);
    }

    if (this.data.id !== null && this.data.id !== undefined) {
      this._elt.attr('data-col-id', this.data.id + '');
    }

    this.row.head.table.adapter.renderHeadCell(this._elt, this.data, this);
    var sortKeyArr = implicitSortKeyArr(this.data.sortKey);

    if (sortKeyArr.length > 0) {
      this._elt.attr('data-sort-key', sortKeyArr.join(';'));

      this._elt.attr('data-sort-order', 'none');

      this._elt.attr('title', 'Sort');
    }

    this.$sortBtn = ACore_({
      tag: 'span',
      "class": 'as-dt-sort-btn',
      child: [{
        tag: 'span',
        "class": ['mdi', 'mdi-menu-up'] // child: { text: '🡑' }

      }, {
        tag: 'span',
        "class": ['mdi', 'mdi-menu-down']
      }]
    });
    this.$resizer = ACore_({
      "class": 'as-dt-header-cell-resizer'
    });

    this._elt.addChild(this.$sortBtn);

    this._elt.addChild(this.$resizer);

    return this._elt;
  }
});
Object.defineProperty(DTHeadCell.prototype, 'copyElt', {
  get: function get() {
    if (this._copyElt) return this._copyElt;
    this._copyElt = ACore_$(this.elt.cloneNode(true)).addClass('as-copy-elt');

    if (this.data.style && this.data.style.width) {
      var self = this;
      setTimeout(function wait() {
        if (self._copyElt.isDescendantOf(document.body)) {
          self._copyElt.addStyle('width', self._copyElt.getBoundingClientRect().width + 'px');
        } else {
          setTimeout(wait, 10);
        }
      }, 10);
    }

    return this._copyElt;
  }
});
Object.defineProperty(DTHeadCell.prototype, 'copyElt1', {
  get: function get() {
    if (this._copyElt1) return this._copyElt1;
    this._copyElt1 = ACore_$(this.elt.cloneNode(true)).addClass('as-copy-elt-1');
    return this._copyElt1;
  }
});
Object.defineProperty(DTHeadCell.prototype, 'copyElt2', {
  get: function get() {
    if (this._copyElt2) return this._copyElt2;
    this._copyElt2 = ACore_$(this.elt.cloneNode(true)).addClass('as-copy-elt-2');
    return this._copyElt2;
  }
});
Object.defineProperty(DTHeadCell.prototype, 'colspan', {
  get: function get() {
    var value = this.data.attr && this.data.attr.colspan;
    if (typeof value === "string") value = parseInt(value);
    if (typeof value === "number") return value;else return 1;
  }
});
/* harmony default export */ const dynamictable_DTHeadCell = (DTHeadCell);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTHeadRow.js


/****
 * table layer: copyElt
 * fixY layer : copyElt1 -  elt
 * fixXY layer: elt
 *
 */

/***
 *
 * @param {DTHead} head
 * @param data
 * @constructor
 */

function DTHeadRow(head, data) {
  var _this = this;

  this.head = head;
  this.data = data;
  this.cells = this.data.cells.map(function (cellData) {
    return new dynamictable_DTHeadCell(_this, cellData);
  });
  this.cells.reduce(function (ac, cell) {
    cell.idx = ac;
    return ac + cell.colspan;
  }, 0);
  this._elt = null;
  this._copyElt = null;
  this._fixedXYElt = null;
  this._fixedXElt = null;
}

DTHeadRow.prototype.updateCopyEltSize = function () {
  if (!this._fixedXElt) return;

  var bound = this._copyElt.getBoundingClientRect();

  if (this._fixedXElt) this._fixedXElt.addStyle('height', bound.height + 'px');
  if (this._fixedXYElt) this._fixedXYElt.addStyle('height', bound.height + 'px');

  this._elt.addStyle('height', bound.height + 'px');

  this.cells.forEach(function (c) {
    return c.updateCopyEltSize();
  });
};

Object.defineProperty(DTHeadRow.prototype, 'elt', {
  get: function get() {
    if (this._elt) return this._elt;
    var fixedCol = this.adapter.fixedCol || 0;
    var child = this.cells.slice(0, fixedCol).map(function (c) {
      return c.copyElt1;
    });
    var child1 = this.cells.slice(fixedCol).map(function (c) {
      return c.elt;
    });
    this._elt = ACore_({
      tag: 'tr',
      "class": 'as-dt-head-row',
      child: child.concat(child1)
    });

    if (this.data.attr) {
      this.elt.attr(this.data.attr);
    }

    if (this.data.style) {
      this.elt.addStyle(this.data.style);
    }

    return this._elt;
  }
});
Object.defineProperty(DTHeadRow.prototype, 'fixedXYElt', {
  get: function get() {
    if (this._fixedXYElt) return this._fixedXYElt;
    var fixedCol = this.adapter.fixedCol || 0;
    this._fixedXYElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-dt-fixed-xy',
      child: this.cells.slice(0, fixedCol).map(function (c) {
        return c.elt;
      })
    });
    return this._fixedXYElt;
  }
});
Object.defineProperty(DTHeadRow.prototype, 'fixedXElt', {
  get: function get() {
    if (this._fixedXElt) return this._fixedXElt;
    var fixedCol = this.adapter.fixedCol || 0;
    this._fixedXElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-dt-fixed-x',
      child: this.cells.slice(0, fixedCol).map(function (c) {
        return c.copyElt2;
      })
    });
    return this._fixedXElt;
  }
});
Object.defineProperty(DTHeadRow.prototype, 'copyElt', {
  get: function get() {
    if (this._copyElt) return this.copyElt;
    var adapter = this.adapter;
    this._copyElt = ACore_({
      elt: this.elt.cloneNode(false),
      child: this.cells.map(function (c) {
        return c.copyElt;
      })
    });
    return this._copyElt;
  }
});
Object.defineProperty(DTHeadRow.prototype, 'adapter', {
  get: function get() {
    return this.head.adapter;
  }
});
/* harmony default export */ const dynamictable_DTHeadRow = (DTHeadRow);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTHead.js


/***
 *
 * @param {DTTable} table
 * @param {} data
 * @constructor
 */

function DTHead(table, data) {
  var _this = this;

  if (!data) data = {};
  if (!data.rows) data.rows = [];
  this.table = table;
  this._elt = null;
  this._copyElt = null;
  this._fixedXYElt = null;
  this._fixedXElt = null;
  this.data = data;
  this.rows = this.data.rows.map(function (rowData) {
    return new dynamictable_DTHeadRow(_this, rowData);
  });
}

DTHead.prototype.lockWidth = function () {
  this.rows.forEach(function (r) {
    return r.lockWidth();
  });
};

DTHead.prototype.updateCopyEltSize = function () {
  if (!this._copyElt) return;
  this.rows.forEach(function (r) {
    return r.updateCopyEltSize();
  });
};

Object.defineProperty(DTHead.prototype, 'elt', {
  get: function get() {
    if (this._elt) return this._elt;
    this._elt = ACore_({
      tag: 'thead',
      "class": 'as-dt-header',
      child: this.rows.map(function (r) {
        return r.elt;
      })
    });
    if (this.data.style) this._elt.addStyle(this.data.style);
    return this._elt;
  }
});
Object.defineProperty(DTHead.prototype, 'copyElt', {
  get: function get() {
    if (this._copyElt) return this._copyElt;
    this._copyElt = ACore_({
      elt: this.elt.cloneNode(false),
      child: this.rows.map(function (r) {
        return r.copyElt;
      })
    });
    return this._copyElt;
  }
});
Object.defineProperty(DTHead.prototype, 'fixedXYElt', {
  get: function get() {
    if (this._fixedXYElt) return this._fixedXYElt;
    this._fixedXYElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-dt-fixed-xy',
      child: this.rows.map(function (r) {
        return r.fixedXYElt;
      })
    });
    return this._fixedXYElt;
  }
});
Object.defineProperty(DTHead.prototype, 'fixedXElt', {
  get: function get() {
    if (this._fixedXElt) return this._fixedXElt;
    this._fixedXElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-dt-fixed-x',
      child: this.rows.map(function (r) {
        return r.fixedXElt;
      })
    });
    return this._fixedXElt;
  }
});
Object.defineProperty(DTHead.prototype, 'adapter', {
  get: function get() {
    return this.table.wrapper.adapter;
  }
});
/* harmony default export */ const dynamictable_DTHead = (DTHead);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTBodyCell.js
function DTBodyCell_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { DTBodyCell_typeof = function _typeof(obj) { return typeof obj; }; } else { DTBodyCell_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return DTBodyCell_typeof(obj); }




/***
 *
 * @param {DTBodyRow} row
 * @param data
 * @constructor
 */

function DTBodyCell(row, data) {
  this.row = row;
  this._elt = null;
  this._copyElt = null;
  this._idx = null;
  this.data = data;
}

DTBodyCell.prototype.revoke = function () {
  this.row = null;
  if (this._elt) this._elt.holder = null;
  this._elt = null;
  this._copyElt = null;
  this._idx = null;
  this.data = null;
};

Object.defineProperty(DTBodyCell.prototype, 'elt', {
  get: function get() {
    var _this = this;

    if (this._elt) return this._elt;
    this._elt = ACore_({
      tag: 'td',
      "class": 'as-dt-body-cell'
    });
    this._elt.holder = this;
    if (this.data.attr) this._elt.attr(this.data.attr);
    if (typeof this.data["class"] === "string") addElementClassName(this._elt, this.data["class"]);
    if (this.data.style) this._elt.addStyle(this.data.style);

    if (this.data.on) {
      Object.keys(this.data.on).forEach(function (key) {
        var cb = _this.data.on[key];
        if (typeof cb !== "function") return;

        _this._elt.on(key, function (event) {
          cb.call(_this._elt, event, _this);
        });
      });
    }

    if (this._idx !== null) this._elt.attr('data-col-idx', this._idx + '');
    this.row.body.table.adapter.renderBodyCell(this.elt, this.data, this);
    return this._elt;
  }
});
Object.defineProperty(DTBodyCell.prototype, 'copyElt', {
  get: function get() {
    if (this._copyElt) return this._copyElt;
    this._copyElt = ACore_$(this.elt.cloneNode(true)).addClass('as-copy-elt');
    return this._copyElt;
  }
});
Object.defineProperty(DTBodyCell.prototype, 'innerText', {
  get: function get() {
    var text = this.data.innerText;
    if (text === undefined || text === null) text = '';else if (!text) {
      text = text + '';
    } else if (text.substring) {} else if (typeof text === "number") {
      text = text + '';
    } else if (DTBodyCell_typeof(text) === "object") {
      if (text instanceof Date) {
        return formatDateTime(text, 'dd/MM/yyyy HH:mm');
      } else {
        return jsStringOf(text);
      }
    } else if (typeof text === "function") {
      text = text.call(this.data, this);
    }
    return text;
    if (this.data.innerText) return this.data.innerText;
    if (this.data.getInnerText) return this.data.getInnerText(); // if ('innerText' in this.data)

    return this.data.innerText || '';
    var res = [];

    function visit(node) {
      if (node.nodeType === 3 && node.data) {
        res.push(node.data);
      } else if (node.childNodes && node.childNodes.length > 0) {
        Array.prototype.forEach.call(node.childNodes, visit);
      }
    }

    visit(this.elt);
    return res.join(' ');
  }
});
Object.defineProperty(DTBodyCell.prototype, 'idx', {
  set: function set(value) {
    this._idx = value;
    if (this._elt) this._elt.attr('data-col-idx', value + '');
  },
  get: function get() {
    return this._idx;
  }
});
Object.defineProperty(DTBodyCell.prototype, 'colspan', {
  get: function get() {
    var value = this.data.attr && this.data.attr.colspan;
    if (typeof value === "string") value = parseInt(value);
    if (typeof value === "number") return value;else return 1;
  }
});
/* harmony default export */ const dynamictable_DTBodyCell = (DTBodyCell);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTBodyRow.js




/***
 *
 * @param {DTBody} body
 * @param data
 * @constructor
 */

function DTBodyRow(body, data) {
  var _this = this;

  this.body = body;
  this.data = data;
  this.data.cells = this.data.cells || [];
  this._elt = null;
  this._fixedXElt = null;
  this.filterKeys = Object.assign({}, this.data.keys);
  this.data.cells.reduce(function (ac, cr, i) {
    if (typeof cr.innerText === "string") {
      ac['[' + i + ']'] = cr.innerText;
    }

    return ac;
  }, this.filterKeys);

  if ('id' in data) {
    this.id = data.id;
  } else {
    this.id = randomIdent(8);
  }

  this._idx = null;
  /***
   * @type {DTBodyCell[]}
   */

  this.cells = this.data.cells.map(function (cellData) {
    return new dynamictable_DTBodyCell(_this, cellData);
  });
  this.cells.reduce(function (ac, cell) {
    cell.idx = ac;
    return ac + cell.colspan;
  }, 0);
}

DTBodyRow.prototype.revoke = function () {
  while (this.cells.length) {
    this.cells.pop().revoke();
  }

  this.cells = null;
  this.data = null;
  this.body = null;
  if (this._elt) this._elt.dtBodyRow = null;
  this._elt = null;
  this.$id = null;
  this.draggable = null;
};

DTBodyRow.prototype.revokeResource = function () {};

DTBodyRow.prototype.remove = function () {
  this.body.removeRow(this);
};

DTBodyRow.prototype.viewInto = function () {
  return this.body.viewIntoRow(this);
};

DTBodyRow.prototype.updateCopyEltSize = function () {
  if (!this._fixedXElt) return;
  if (!this._elt.parentElement) return;
  if (this._fixedXElt.childNodes.length === 0) return; //has no fixed column

  var bound = this._elt.getBoundingClientRect();

  this._fixedXElt.addStyle('height', bound.height + 'px');
};

DTBodyRow.prototype.updateData = function (data) {
  var _this2 = this;

  var rowIdx = this.body.rowIndexOf(this.data);
  this.body.data.rows[rowIdx] = data;
  this.data = data;

  if ('id' in data) {
    this.id = data.id;
  } else {
    this.id = randomIdent(8);
  }

  this.cells = this.data.cells.map(function (cellData) {
    return new dynamictable_DTBodyCell(_this2, cellData);
  });
  this.cells.reduce(function (ac, cell) {
    cell.idx = ac;
    return ac + cell.colspan;
  }, 0);

  if (this._elt) {
    this._elt.attr('data-id', this.id + '');

    this._elt.clearChild().addChild(this.cells.map(function (cell) {
      return cell.elt;
    }));

    this.$idx = ACore_$('.as-dt-row-index', this._elt);
    this.draggable = !!ACore_$('.as-drag-zone', this._elt);
    if (this.$idx) this.$idx.attr('data-idx', this._idx + 1 + '');
  }

  this.body.onRowSplice(rowIdx);
};

Object.defineProperty(DTBodyRow.prototype, 'elt', {
  get: function get() {
    var _this3 = this;

    if (this._elt) return this._elt;
    var fixedCol = this.adapter.fixedCol || 0;
    var child = this.cells.slice(0, fixedCol).map(function (c) {
      return c.copyElt;
    });
    var child1 = this.cells.slice(fixedCol).map(function (c) {
      return c.elt;
    });
    this._elt = ACore_({
      tag: 'tr',
      "class": 'as-dt-body-row',
      props: {
        dtBodyRow: this
      },
      child: child.concat(child1)
    });

    this._elt.attr('data-id', this.id + '');

    if (this.data["class"]) {
      addElementClassName(this._elt, this.data["class"]);
    }

    if (this.data.attr) {
      this._elt.attr(this.data.attr);
    }

    if (this.data.style) {
      this._elt.addStyle(this.data.style);
    }

    if (this.data.on) {
      Object.keys(this.data.on).forEach(function (key) {
        var cb = _this3.data.on[key];
        if (typeof cb !== "function") return;

        _this3._elt.on(key, function (event) {
          cb.call(_this3._elt, event, _this3);
        });
      });
    }

    this.$idx = this.cells.reduce(function (ac, c) {
      return ac || ACore_$('.as-dt-row-index', c.elt);
    }, null);
    this.draggable = !!ACore_$('.as-drag-zone', this._elt);
    if (this.$idx) this.$idx.attr('data-idx', this._idx + 1 + '');
    return this._elt;
  }
});
Object.defineProperty(DTBodyRow.prototype, 'fixedXElt', {
  get: function get() {
    if (this._fixedXElt) return this._fixedXElt;
    var fixedCol = this.adapter.fixedCol || 0;
    this._fixedXElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-dt-fixed-x',
      child: this.cells.slice(0, fixedCol).map(function (cell) {
        return cell.elt;
      })
    });
    return this._fixedXElt;
  }
});
Object.defineProperty(DTBodyRow.prototype, 'innerText', {
  get: function get() {
    if (this.data.innerText) return this.data.innerText;
    if (this.data.getInnerText) return this.data.getInnerText();
    if ('innerText' in this.data) return this.data.innerText || '';
    return this.cells.map(function (cell) {
      return cell.innerText.trim();
    }).filter(function (text) {
      return !!text;
    }).join(' / ');
  }
});
Object.defineProperty(DTBodyRow.prototype, 'idx', {
  set: function set(value) {
    if (this.$idx) this.$idx.attr('data-idx', value + 1 + '');
    this._idx = value;
  },
  get: function get() {
    return this._idx;
  }
});
Object.defineProperty(DTBodyRow.prototype, 'adapter', {
  get: function get() {
    return this.body.adapter;
  }
});
/* harmony default export */ const dynamictable_DTBodyRow = (DTBodyRow);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTSearchFactor.js
function DTSearchFactor_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { DTSearchFactor_typeof = function _typeof(obj) { return typeof obj; }; } else { DTSearchFactor_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return DTSearchFactor_typeof(obj); }

function DTSearchFactor(global) {
  /***
   * @typedef SelectionItem2
   * @property {String} text
   * @property {String} desc
   * @property {String} __text__
   * @property {String} __nvnText__
   * @property {Array<String>} __words__
   * @property {Array<String>} __nvnWords__
   * @property {object} __wordDict__
   * @property {object} __nvnWordDict__
   * @module SelectionItem2
   */
  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, "");
  }

  function harmonicMean(a, b) {
    return 2 / (1 / a + 1 / 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);
  }

  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)];
  }

  var EXTRA_MATCH_SCORE = 9;
  var NVN_EXTRA_MATCH_SCORE = 8;
  var EQUAL_MATCH_SCORE = 10;
  var WORD_MATCH_SCORE = 3;
  var HAS_WORD_SCORE = 30;
  var HAS_NVN_WORD_SCORE = 29;
  /***
   *
   * @param {SelectionItem2} 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().toLowerCase();

    var __nvnText__ = nonAccentVietnamese(__text__);

    item.__words__ = __text__.split(spliter);
    item.__text__ = item.__words__.join(' ');

    item.__words__.sort();

    item.__wordDict__ = item.__words__.reduce(function (ac, cr, i) {
      ac[cr] = i + 1;
      return ac;
    }, {});
    item.__nvnWords__ = __nvnText__.split(spliter);
    item.__nvnText__ = item.__nvnWords__.join(' ');

    item.__nvnWords__.sort();

    item.__nvnWordDict__ = item.__nvnWords__.reduce(function (ac, cr, i) {
      ac[cr] = i + 1;
      return ac;
    }, {});
    return item;
  }

  function isItemMustIncluded(queryItem, item) {
    if (!queryItem) return true;

    if (item.__nvnText__.indexOf(queryItem.__nvnText__) >= 0) {
      return true;
    }

    var dict1 = queryItem.__nvnWordDict__;
    var dict2 = item.__nvnWordDict__;

    for (var i in dict1) {
      for (var j in dict2) {
        if (j.indexOf(i) < 0) return false;
      }
    }

    return true;
  }

  function calcItemMatchScore(queryItem, item) {
    var score = 0;
    if (!item.__text__) return 0;
    var hwScore = 0;
    var i;

    for (i = 0; i < queryItem.__words__.length; ++i) {
      if (item.__wordDict__[queryItem.__words__[i]]) {
        hwScore += HAS_WORD_SCORE;
      } else if (item.__nvnWordDict__[queryItem.__nvnWords__[i]]) {
        hwScore += HAS_NVN_WORD_SCORE;
      }
    }

    score = hwScore;

    if (item.__text__ === queryItem.__text__) {
      score += EQUAL_MATCH_SCORE;
    }

    var extraIndex = item.__text__.indexOf(queryItem.__text__);

    if (extraIndex >= 0) {
      score += EXTRA_MATCH_SCORE + 200 - extraIndex - (item.__text__.length - queryItem.__text__.length);
    }

    extraIndex = item.__nvnText__.indexOf(queryItem.__nvnText__);

    if (extraIndex >= 0) {
      score += EXTRA_MATCH_SCORE + 200 - extraIndex - (item.__text__.length - queryItem.__text__.length);
    }

    var n = Math.max(queryItem.__words__.length + 1, 1);
    score = Math.max(score, wordsMatch(queryItem.__words__, item.__words__), wordsMatch(queryItem.__nvnWords__, item.__nvnWords__)) / n * 2 * WORD_MATCH_SCORE;
    return score;
  }

  function scoreCmp(a, b) {
    if (b.score === a.score) {
      if (b.item.__nvnText__ > a.item.__nvnText__) return -1;
      return 1;
    }

    return b.score - a.score;
  }

  function keyStringOf(o) {
    var type = DTSearchFactor_typeof(o);

    var keys;

    if (o && type === "object") {
      if (o.getTime) {
        return 'd(' + o.getTime() + ')';
      } else if (o.length && o.map) {
        return 'a(' + o.map(function (val) {
          return keyStringOf(val);
        }).join(',') + ')';
      } else {
        keys = Object.keys(o);
        keys.sort();
        return 'o(' + keys.map(function (key) {
          return key + ':' + keyStringOf(o[key]);
        }).join(',') + ')';
      }
    } else {
      return type[0] + '(' + o + ')';
    }
  }

  function matchFilter(item, filter) {
    if (!filter) return true;
    var keys = item.keys;
    if (!keys) return false;

    for (var i in filter) {
      if (!keyCmp(keys[i], filter[i])) return false;
    }

    return true;
  }

  function toComparable(x) {
    if (!x) return x;

    var type = DTSearchFactor_typeof(x);

    if (type === 'string') return x;
    if (type === "number") return x;
    if (type === "boolean") return x;
    if (type.getTime) return type.getTime();
    return x;
  }

  function keyCmp(itemKey, filterKey) {
    if (itemKey === filterKey) return true;
    if (!itemKey !== !filterKey) return false;
    if (!itemKey || !filterKey) return false;
    var filterKeyString = keyStringOf(filterKey);

    function withFilter(x) {
      var xString = keyStringOf(x);
      var res = xString === filterKeyString;

      if (!res && DTSearchFactor_typeof(filterKey) === "object") {
        if (filterKey.some) {
          res = filterKey.some(function (y) {
            return keyStringOf(y) === x;
          });
        } else if ('min' in filterKey || 'max' in filterKey) {
          res = true;

          if ('min' in filterKey) {
            res = res && toComparable(x) >= toComparable(filterKey.min);
          }

          if ('max' in filterKey) {
            res = res && toComparable(x) <= toComparable(filterKey.max);
          }
        }
      }

      return res;
    }

    if (itemKey.some) {
      return itemKey.some(withFilter);
    } else return withFilter(itemKey);
  }

  var benchmark = global.calcBenchmark();
  /******************************************************************************************************************/

  var slaves = {};

  function SearchingSlave(id) {
    this.id = id;
    this.items = [];
    this.itemVersion = -1;
    this.tranferFinished = true;
    this.pendingTask = null;
    this.taskSession = Math.random() + '';
    this.scoredHolders = [];
    this.searchingSession = Math.random() + '';
  }

  SearchingSlave.prototype.onReceiveItems = function (n, start, end, items, version) {
    if (this.scoredHolders.length > start) {
      this.scoredHolders.splice(start);
    }

    var cItems = this.items;

    if (cItems.length < n) {
      // sessionItems
      cItems.push(null);
    }

    if (cItems.length > n) {
      cItems.splice(n);
    }

    this.itemVersion = version;

    for (var i = start; i < end; ++i) {
      cItems[i] = items[i - start];
    }

    if (end === n) {
      this.tranferFinished = true;
      this.doTask();
    } else {
      this.tranferFinished = false;
    }
  };

  SearchingSlave.prototype.doTask = function () {
    if (!this.pendingTask) return;
    if (this.searchingSession === this.taskSession) return;
    var self = this;
    this.searchingSession = this.taskSession;
    var session = this.searchingSession;
    var items = this.items;
    var its = this.scoredHolders;
    var taskData = this.pendingTask;
    var itemVersion = this.itemVersion;
    var queryText = taskData.query.text;
    var filter = taskData.query.filter;
    var sort = taskData.query.sort;
    var queryTextItem = null;
    if (queryText) queryTextItem = prepareSearchForItem({
      text: queryText
    });

    var sortCmp = function sortCmp(a, b) {
      var aKeys = a.item.keys;
      var bKeys = b.item.keys;
      var key;
      var av, bv;
      var d = 0;

      if (aKeys && !bKeys) {
        d = 1;
      } else if (!aKeys && bKeys) {
        d = -1;
      } else if (aKeys && bKeys) {
        for (var i = 0; i < sort.length; ++i) {
          key = sort[i].key;
          d = aKeys[key] - bKeys[key];

          if (isNaN(d)) {
            if (aKeys[key] < bKeys[key]) {
              d = -1;
            } else if (aKeys[key] === bKeys[key]) {
              d = 0;
            } else {
              d = 1;
            }
          }

          if (sort[i].order === 'descending') d = -d;
          if (d !== 0) break;
        }
      }

      if (d === 0) {
        d = a.i - b.i;
      }

      return d;
    };

    function likeSort(items) {
      var minValue = Infinity;
      var maxValue = -Infinity;
      var i;
      var n = items.length;
      var item;

      for (i = 0; i < n; ++i) {
        item = items[i];
        if (item.score < minValue) minValue = item.score;
        if (item.score > maxValue) maxValue = item.score;
      }

      var segments = [[], [], [], [], [], [], [], []];
      var threshold = maxValue - (maxValue - minValue) / 4;
      if (maxValue < 3) threshold = maxValue - (maxValue - minValue) / 8;
      var d = (maxValue - threshold) / (segments.length - 1);
      var v;
      var k;

      for (i = 0; i < n; ++i) {
        item = items[i];
        v = item.score;
        if (item.mustIncluded) v = Math.max(threshold + 0.1, v);
        if (v < threshold || v < 0.8) continue;
        if (v >= maxValue) segments[segments.length - 1].push(item);else {
          k = (v - threshold) / d >> 0;
          segments[k].push(item);
        }
      }

      var res = [];
      var segment;

      while (segments.length > 0) {
        segment = segments.pop();

        if (segment.length > 0) {
          if (sort) {
            segment.sort(sortCmp);
          } else {
            if (segment.length + res.length < 1000) segment.sort(scoreCmp);
          }

          res = res.concat(segment);
        }
      }

      return res;
    }

    function sortScore() {
      var result = its;

      if (filter) {
        result = result.filter(function (x) {
          return !!x;
        });
      } // var now = new Date().getTime();


      if (queryTextItem) {
        result = likeSort(result);
      } else if (sort) {
        result.sort(sortCmp);
      } // console.log("SortTime:", new Date().getTime() - now)


      result = result.map(function (it) {
        return it.i;
      });
      self.searchingSession = 'done';
      global.emit('searchEnd', self.id, Object({
        hash: taskData.hash,
        idx: taskData.idx,
        result: result,
        itemVersion: self.itemVersion
      }));
    }

    function tick() {
      if (self.taskSession !== session) return;

      if (self.itemVersion !== itemVersion) {
        return;
      }

      if (its.length >= items.length) {
        sortScore();
        return;
      }

      var k = benchmark * 5;
      if (!queryTextItem) k *= 30;
      var i = its.length;
      var n = items.length;

      while (k-- && i < n) {
        if (!filter || matchFilter(items[i], filter)) {
          if (!items[i].prepare && queryTextItem) {
            items[i].prepare = true;
            prepareSearchForItem(items[i]);
          }

          its.push({
            i: i,
            item: items[i],
            score: queryTextItem ? calcItemMatchScore(queryTextItem, items[i]) : 0,
            mustIncluded: isItemMustIncluded(queryTextItem, items[i])
          });
        } else {
          its.push(null);
        }

        ++i;
      }

      setTimeout(tick, 5);
    }

    tick();
  };

  SearchingSlave.prototype.receiveTask = function (taskData) {
    this.pendingTask = taskData && taskData.query && taskData;
    this.taskSession = taskData && taskData.idx;
    this.scoredHolders = [];
    if (this.tranferFinished && this.pendingTask) this.doTask();
  };

  SearchingSlave.prototype.destroy = function () {
    this.items = null;
    delete slaves[this.id];
  };

  global.destroySlave = function (id) {
    slaves[id] && slaves[id].destroy();
  };
  /******************************************************************************************************************/


  var data = {};

  global.transferTask = function (id, taskData) {
    slaves[id] = slaves[id] || new SearchingSlave(id);
    slaves[id] && slaves[id].receiveTask(taskData);
  };

  global.transferSearchItems = function (id, n, start, end, items, version) {
    slaves[id] = slaves[id] || new SearchingSlave(id);
    slaves[id].onReceiveItems(n, start, end, items, version);
  };

  global.search = function (session, query) {
    var holder = data[session];
    if (!holder) return false;
    var searchingSession = Math.random() + '';
    holder.searchingSession = searchingSession;
    var now = new Date().getTime();
    var items = data[session] && data[session].items;
    var its = Array(items.length);
    var queryItem = prepareSearchForItem({
      text: query
    });
    var resolve;
    var sync = new Promise(function (rs) {
      resolve = rs;
    });

    function calcValue() {
      var i = 0;
      var n = items.length;

      function tick() {
        if (searchingSession !== holder.searchingSession) {
          resolve(false);
          return;
        }

        var c = benchmark * 5;

        while (c-- && i < n) {
          its[i] = {
            i: i,
            item: items[i],
            score: calcItemMatchScore(queryItem, items[i])
          };
          ++i;
        }

        if (i < n) {
          setTimeout(tick, 3);
        } else {
          setTimeout(sortScore, 3);
        }
      }

      tick();
    }

    function sortScore() {
      if (searchingSession !== holder.searchingSession) {
        resolve(false);
        return;
      }

      now = new Date().getTime();
      var result = likeSort(its).map(function (it) {
        return it.i;
      });
      resolve(result);
    }

    setTimeout(calcValue, 3);
    return sync;
  };
}

/* harmony default export */ const dynamictable_DTSearchFactor = (DTSearchFactor);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTBody.js











/***
 *
 * @param {DTBody} body
 * @constructor
 */

function SearchingMaster(body) {
  this.body = body;
  this.mode = body.modes.searching;
  this.waitingCtrl = body.table.wrapper.waitingCtl;
  this.initWorker();
  this.id = randomIdent(10);
  this.transferSession = Math.random() + '';
  this.transferred = 0;
  this.isTranferring = false;
  this.share.instances[this.id] = this;
  this.itemVersion = 0;
  this.outputCache = {};
  this.lastTaskIdx = 0;
}

SearchingMaster.prototype.destroy = function () {
  this.share.thread.invoke('destroySlave', this.id);
  this.share.instances[this.id] = null;
  this.transferSession = "DIE";
  delete this.share.instances[this.id];
  this.outputCache = {};
  this.body = null;
};

SearchingMaster.prototype.transferFrom = function (offset) {
  if (this.transferSession === "DIE") {
    return;
  }

  this.outputCache = {};

  if (offset < this.transferred) {
    this.transferred = offset;
    this.itemVersion++;
  }

  if (this.isTranferring) return;
  var waitingCtrl = this.waitingCtrl;
  var wTkn = waitingCtrl.begin();
  var self = this;
  var transferSession = Math.random() + '';
  self.transferSession = transferSession;
  self.isTranferring = true;
  setTimeout(function tick() {
    if (self.transferSession !== transferSession) {
      waitingCtrl.end(wTkn);
      return;
    }

    var i = self.transferred;
    var rows = self.body.rows;
    var n = self.body.rows.length;

    if (i >= n) {
      if (n === 0) {
        self.share.thread.invoke('transferSearchItems', self.id, n, 0, 0, [], self.itemVersion);
      }

      self.isTranferring = false;
      self.onFinishTransfer();
      waitingCtrl.end(wTkn);
      return;
    }

    self.share.benchmark = self.share.benchmark || Detector_BrowserDetector.calcBenchmark();
    var k = self.share.benchmark >> 2;
    var items = [];
    var item;
    var start = i;

    while (i < n && k--) {
      item = {
        text: rows[i].innerText,
        value: i,
        keys: rows[i].filterKeys
      };
      items.push(item);
      ++i;
    }

    var sync = self.share.thread.invoke('transferSearchItems', self.id, n, start, i, items, self.itemVersion);
    self.transferred = i;
    Promise.all([sync, new Promise(function (rs) {
      setTimeout(rs, 5);
    })]).then(tick);
  }, 5);
};

SearchingMaster.prototype.onFinishTransfer = function () {// console.log('finish');
};

SearchingMaster.prototype.sendTask = function (query) {
  if (this.transferSession === "DIE") {
    return;
  }

  this.lastTaskIdx++;
  var taskData = {
    idx: this.lastTaskIdx,
    query: query,
    hash: calcDTQueryHash(query)
  };

  if (this.outputCache[taskData.hash]) {
    setTimeout(this.onResult.bind(this, this.outputCache[taskData.hash], true), 5);
  } else {
    this.share.thread.invoke('transferTask', this.id, taskData);
  }

  return taskData;
};

SearchingMaster.prototype.onResult = function (response, dontCache) {
  if (this.itemVersion !== response.itemVersion) return;

  if (!dontCache) {
    this.outputCache[response.hash] = response;
  }

  this.body.modes.searching.onResult(response);
};

SearchingMaster.prototype.share = {
  thread: null,
  benchmark: 0,
  instances: {}
};

SearchingMaster.prototype.initWorker = function () {
  if (!this.share.thread) {
    this.share.thread = new Network_Thread({
      methods: {
        init: dynamictable_DTSearchFactor,
        calcBenchmark: Detector_BrowserDetector.calcBenchmark
      },
      extendCode: 'init(this);'
    });
    this.share.thread.on('alert', function (mess) {
      alert(mess);
    });
    this.share.thread.on('searchEnd', function (id, response) {
      this.share.instances[id] && this.share.instances[id].onResult(response);
    }.bind(this));
    setTimeout(function () {
      this.share.benchmark = this.share.benchmark || Detector_BrowserDetector.calcBenchmark();
    }.bind(this));
  }
};
/***
 *
 * @param {DTBody}  body
 * @constructor
 */


function BaseMode(body) {
  this.body = body;
  this.offset = 0;
  this.rowOffset = -1000;
  this.boundCache = null;
  this.viewedRows = null;
}

BaseMode.prototype.name = 'base';

NormalMode.prototype.revoke = function () {
  this.body = null;
};

BaseMode.prototype.resetViewParam = function () {
  this.offset = 0;
  this.rowOffset = -1000;
  this.boundCache = null;
  this.viewedRows = null;
};

BaseMode.prototype.getBoundOfRows = function () {
  if (this.boundCache) return this.boundCache;
  if (!this.body.table.wrapper.isDescendantOf(document.body)) return null;
  var bodyBound = this.body.elt.getBoundingClientRect();
  var elt = this.body.elt;
  var childNodes = elt.childNodes;
  this.boundCache = Array.prototype.map.call(childNodes, function (elt) {
    var eBound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    eBound.y -= bodyBound.top;
    return eBound;
  });
  this.boundCache.body = Math_Rectangle.fromClientRect(bodyBound);
  this.boundCache.header = Math_Rectangle.fromClientRect(this.body.table.header.elt.getBoundingClientRect());
  return this.boundCache;
};

BaseMode.prototype.updateRowsIfNeed = function () {
  throw Error("Not implement!");
};

BaseMode.prototype.render = function () {
  var _this = this;

  this.updateRowsIfNeed();
  var bounds = this.getBoundOfRows();

  if (!bounds) {
    setTimeout(function () {
      if (_this.body.elt.isDescendantOf(document.body)) {
        _this.render();
      }
    }, 5);
    return;
  }

  var dy = 0,
      rowIdx;

  if (bounds.length > 0) {
    rowIdx = Math.floor(this.offset - this.rowOffset); //todo: fix bounds[rowIdx] undefined

    if (!bounds[rowIdx]) return;
    dy = bounds[rowIdx].y + (this.offset - this.rowOffset - rowIdx) * bounds[rowIdx].height;
  }

  var availableHeight;

  if (bounds.length > 0) {
    availableHeight = this.body.table.wrapper.$viewport.getBoundingClientRect().height - bounds.header.height;

    if (bounds[bounds.length - 1].y + bounds[bounds.length - 1].height - dy < availableHeight - 1) {
      dy = -availableHeight + bounds[bounds.length - 1].y + bounds[bounds.length - 1].height + 1; //1: last border
    }
  }

  dy = Math.max(0, dy);
  this.body.table.wrapper.$space.addStyle('top', -dy + 'px');
  this.body.table.wrapper.$fixedXCtn.addStyle('top', -dy + 'px');
};
/***
 * @extends BaseMode
 * @param {DTBody} body
 * @constructor
 */


function SearchingMode(body) {
  BaseMode.call(this, body);
  this.status = 'STANDBY';
  this.waitingToken = 'none';
  this.waitingCtrl = body.table.wrapper.waitingCtl;
  this.taskHash = 0;
  this.renderingHash = -1;
  this.resultItems = [];
  this.viewedRows = [];
}

HTML5_OOP.mixClass(SearchingMode, BaseMode);
SearchingMode.prototype.name = 'search';

SearchingMode.prototype.revoke = function () {
  this.resultItems = [];
  this.viewedRows = [];
};

SearchingMode.prototype.start = function () {
  this.status = "RUNNING";
  this.searchingCache = {};
  this.body.table.wrapper.addClass('as-searching');
  this.renderingHash = -1;
};

SearchingMode.prototype.end = function () {
  this.body.table.wrapper.removeClass('as-searching');
  this.searchingItems = null;
  this.status = "STOP";
  this.waitingCtrl.end(this.waitingToken);
  if (this.body.master) this.body.master.sendTask(null);
};

SearchingMode.prototype.updateRowsIfNeed = function () {
  var _this2 = this;

  var screenSize = getScreenSize();
  var rowPerPage = Math.ceil(Math.ceil(screenSize.height / 40) / 25) * 25;
  if (this.body.table.wrapper.hasClass('as-adapt-infinity-grow')) rowPerPage = 1e7;
  var newRowOffset = Math.floor(this.offset / rowPerPage) * rowPerPage;

  if (this.resultItems.length - newRowOffset < rowPerPage) {
    newRowOffset = Math.max(0, newRowOffset - rowPerPage);
  }

  if (newRowOffset === this.rowOffset) return;
  this.rowOffset = newRowOffset;
  var start = this.rowOffset;
  var end = Math.min(start + rowPerPage * 2, this.resultItems.length);
  var elt = this.body.elt;
  var fixedXElt = this.body.fixedXElt;
  var rows = this.body.rows;
  var nRows = [];

  for (var i = start; i < end; ++i) {
    nRows.push(rows[this.resultItems[i]]);
  }

  var nChildren = nRows.map(function (r) {
    return r.elt;
  });
  var nFixedXChildren = nRows.map(function (r) {
    return r.fixedXElt;
  });
  replaceChildrenInElt(elt, nChildren);
  replaceChildrenInElt(fixedXElt, nFixedXChildren);
  this.boundCache = null;
  var bounds = this.getBoundOfRows();

  if (bounds) {
    for (var i = 0; i < nRows.length; ++i) {
      nRows[i].updateCopyEltSize();
    }

    this.body.table.wrapper.layoutCtrl.onResize();
    this.body.table.updateCopyEltSize();
  }

  if (!bounds) {
    setTimeout(function () {
      if (_this2.body.elt.isDescendantOf(document.body)) {
        var bounds = _this2.getBoundOfRows();

        if (bounds) {
          for (var i = 0; i < nRows.length; ++i) {
            nRows[i].updateCopyEltSize();
          }

          _this2.body.table.wrapper.layoutCtrl.onResize();

          _this2.body.table.updateCopyEltSize();
        }
      }
    }, 0);
  }
};

SearchingMode.prototype.onRowSplice = function (idx) {
  this.rowOffset = -1000;
  this.render();
};

SearchingMode.prototype.onRowRemoved = function (idx, n) {
  n = n || 1;
  this.resultItems = this.resultItems.reduce(function (ac, cr) {
    if (cr >= idx + n) {
      ac.push(cr - n);
    } else if (cr < idx) {
      ac.push(cr);
    }

    return ac;
  }, []);
};

SearchingMode.prototype.onRowAdded = function (idx, n) {
  n = n || 1;
  this.resultItems = this.resultItems.reduce(function (ac, cr) {
    if (cr >= idx) {
      ac.push(cr + n);
    } else {
      ac.push(cr);
    }

    return ac;
  }, []);
};

SearchingMode.prototype.viewIntoRow = function (row) {
  console.log(row);
};

SearchingMode.prototype.query = function (query) {
  this.waitingCtrl.end(this.waitingToken);
  this.waitingToken = this.waitingCtrl.begin();

  if (!this.body.master) {
    this.body.master = new SearchingMaster(this.body);
    this.body.master.transferFrom(0);
  }

  var taskHolder = this.body.master.sendTask(query);
  this.taskHash = taskHolder.hash;
};

SearchingMode.prototype.onResult = function (response) {
  var _this3 = this;

  if (this.status !== 'RUNNING' || response.hash !== this.taskHash) return;
  this.waitingCtrl.end(this.waitingToken);

  if (this.renderingHash !== response.hash) {
    this.renderingHash = response.hash;
    this.offset = 0;
    this.rowOffset = -1000;
  }

  this.resultItems = response.result;
  this.viewedRows = this.resultItems.map(function (rIdx) {
    return _this3.body.rows[rIdx];
  });
  this.render();
};

SearchingMode.prototype.share = {
  thread: null
};
/***
 * @extends BaseMode
 * @param {DTBody} body
 * @constructor
 */

function NormalMode(body) {
  BaseMode.call(this, body);
}

HTML5_OOP.mixClass(NormalMode, BaseMode);
NormalMode.prototype.name = 'normal';

NormalMode.prototype.start = function () {
  this.resetViewParam();
  this.viewedRows = this.body.rows;
  this.render();
};

NormalMode.prototype.end = function () {};

NormalMode.prototype.updateRowsIfNeed = function () {
  var _this4 = this;

  var screenSize = getScreenSize();
  var rowPerPage = Math.ceil(Math.ceil(screenSize.height / 40) / 25) * 25;
  if (this.body.table.wrapper.hasClass('as-adapt-infinity-grow')) rowPerPage = 1e7;
  var newRowOffset = Math.floor(this.offset / rowPerPage) * rowPerPage;
  var data = this.body.data;

  if (data.rows.length - newRowOffset < rowPerPage) {
    newRowOffset = Math.max(0, newRowOffset - rowPerPage);
  }

  if (newRowOffset === this.rowOffset) return;
  this.rowOffset = newRowOffset;
  var start = this.rowOffset;
  var elt = this.body.elt;
  var fixedXElt = this.body.fixedXElt;
  var end = Math.min(start + rowPerPage * 2, data.rows.length);
  var rows = this.body.rows;
  elt.clearChild();
  fixedXElt.clearChild();

  for (var i = start; i < end; ++i) {
    elt.addChild(rows[i].elt);
    fixedXElt.addChild(rows[i].fixedXElt);
  }

  this.boundCache = null;
  var bounds = this.getBoundOfRows();

  if (bounds) {
    for (var i = start; i < end; ++i) {
      rows[i].updateCopyEltSize();
    }

    this.body.table.wrapper.layoutCtrl.onResize();
    this.body.table.updateCopyEltSize();
  }

  if (!bounds) {
    setTimeout(function () {
      if (_this4.body.elt.isDescendantOf(document.body)) {
        var bounds = _this4.getBoundOfRows();

        if (bounds) {
          for (var i = start; i < end; ++i) {
            rows[i].updateCopyEltSize();
          }

          _this4.body.table.wrapper.layoutCtrl.onResize();

          _this4.body.table.updateCopyEltSize();
        }
      }
    }, 0);
  }

  this.body.table.wrapper.rowDragCtrl.ev_rowRenderChange();
};

NormalMode.prototype.onRowSplice = function (idx) {
  this.rowOffset = -1;
  this.render();
};

NormalMode.prototype.viewIntoRow = function (o) {
  var idx = this.viewedRows.findIndex(function (row) {
    if (o === row._elt) return true;
    if (o === row) return true;
    if (o === row.data) return true;
    if (o === row.id || row.data.id === o) return true;
    return false;
  });
  if (idx <= 0) return;
  var scrollbar = this.body.table.wrapper.$vscrollbar;
  scrollbar.innerOffset = Math.max(0, Math.min(idx - scrollbar.outerHeight / 3, scrollbar.innerHeight - scrollbar.outerHeight));
  scrollbar.emit('scroll');
};
/***
 *
 * @param {DTTable} table
 * @param data
 * @constructor
 */


function DTBody(table, data) {
  var _this5 = this;

  this.table = table;
  this.data = data;
  this._elt = null;
  this._fixedXElt = null;
  /**
   * @type {DTBodyRow[]}
   */

  this.rows = this.data.rows.map(function (rowData, i) {
    var row = new dynamictable_DTBodyRow(_this5, rowData);
    row.idx = i;
    return row;
  });
  this.modes = {
    normal: new NormalMode(this),
    searching: new SearchingMode(this)
  }; //
  //

  this.curentMode = this.modes.normal;
  this.curentMode.start();
  this.curentMode.render();
  this.master = null; //
  // this.master = new SearchingMaster(this);
  // this.master.transferFrom(0);

  /***
   * @name offset
   * @type {number}
   * @memberOf DTBody#
   */
}

DTBody.prototype.revokeResource = function () {
  if (this.master) {
    this.master.destroy();
    this.master = null;
  }

  while (this.rows.length) {
    this.rows.pop().revoke();
  }

  this.modes.normal.revoke();
  this.modes.searching.revoke();
  this.rows = [];
  this.data = null;
};

DTBody.prototype.requireRows = function (start, end) {
  if (typeof start !== "number") start = 0;
  if (typeof end !== "number") end = Infinity;
  end = Math.min(end, this.data.rows.length);
  return this.rows.slice(start, end);
};

DTBody.prototype.reindexRows = function (start, end) {
  if (typeof start !== "number") start = 0;
  if (typeof end !== "number") end = Infinity;
  end = Math.min(end, this.data.rows.length);

  for (var i = start; i < end; ++i) {
    if (this.rows[i]) this.rows[i].idx = i;
  }
};

DTBody.prototype.onRowSplice = function (idx) {
  this.curentMode.onRowSplice(idx);
  if (this.master) this.master.transferFrom(idx);
  HTML5_ResizeSystem.requestUpdateSignal();
};

DTBody.prototype.rowIndexOf = function (o) {
  var n = this.rows.length;

  for (var i = 0; i < n; ++i) {
    if (o === this.rows[i]._elt) return i;
    if (o === this.rows[i]) return i;
    if (o === this.data.rows[i]) return i;
    if (o === this.data.rows[i].id) return i;
  }

  return -1;
};

DTBody.prototype.addRowBefore = function (rowData, bf) {
  var idx;

  if (bf === null || bf === undefined) {
    return this.addRow(rowData);
  } else {
    idx = this.rowIndexOf(bf);
    if (idx < 0) throw new Error("$bf not is a row in table");
    return this.addRow(rowData, idx);
  }
};

DTBody.prototype.addRowAfter = function (rowData, at) {
  var idx;

  if (at === null || at === undefined) {
    return this.addRow(rowData, 0);
  } else {
    idx = this.rowIndexOf(at);
    if (idx < 0) throw new Error("$bf not is a row in table");
    return this.addRow(rowData, idx + 1);
  }
};

DTBody.prototype.addRow = function (rowData, idx) {
  if (!isNaturalNumber(idx) || idx >= this.rows.length) {
    idx = this.rows.length;
  }

  var row;

  if (idx >= this.rows.length) {
    idx = this.rows.length;
    this.data.rows.push(rowData);
    row = new dynamictable_DTBodyRow(this, rowData);
    row.idx = idx;
    this.rows.push(row);
    if (this.curentMode.onRowAdded) this.curentMode.onRowAdded(idx, 1);
    this.onRowSplice(this.rows.length - 1);
  } else {
    row = new dynamictable_DTBodyRow(this, rowData);
    row.idx = idx;
    this.rows.splice(idx, 0, row);
    this.data.rows.splice(idx, 0, rowData);
    this.reindexRows(idx + 1);
    this.onRowSplice(idx);
  }

  return row;
};

DTBody.prototype.addRows = function (rowsData, idx) {
  if (!isNaturalNumber(idx) || idx >= this.rows.length) {
    idx = this.rows.length;
  }

  var res = [];
  var row, i, rowData;

  if (idx >= this.rows.length) {
    idx = this.rows.length;

    for (i = 0; i < rowsData.length; ++i) {
      rowData = rowsData[i];
      row = new dynamictable_DTBodyRow(this, rowData);
      row.idx = i + idx;
      this.data.rows.push(rowData);
      res.push(row);
      this.rows.push(row);
    }
  } else {
    for (i = 0; i < rowsData.length; ++i) {
      rowData = rowsData[i];
      row = new dynamictable_DTBodyRow(this, rowData);
      row.idx = i + idx;
      res.push(row);
      this.data.rows.splice(idx + i, 0, rowData);
      this.rows.splice(idx + i, 0, row);
    }

    this.reindexRows(idx + rowsData.length);
  }

  if (this.curentMode.onRowAdded) this.curentMode.onRowAdded(idx, rowsData.length);
  this.onRowSplice(idx);
  return res;
};

DTBody.prototype.removeRow = function (row) {
  var idx = this.rowIndexOf(row);
  if (idx < 0) return;
  this.rows.splice(idx, 1);
  this.data.rows.splice(idx, 1);
  this.reindexRows(idx);
  if (this.curentMode.onRowRemoved) this.curentMode.onRowRemoved(idx);
  this.onRowSplice(idx);
};

DTBody.prototype.moveRowAt = function (idx, newIdx) {
  var row = this.rows.splice(idx, 1)[0];
  var rowData = this.data.rows.splice(idx, 1)[0];
  this.rows.splice(newIdx, 0, row);
  this.data.rows.splice(newIdx, 0, rowData);
  this.reindexRows(Math.min(idx, newIdx));
  this.onRowSplice(Math.min(idx, newIdx));
};

DTBody.prototype.clearRows = function () {
  var n = this.rows.length;
  this.rows.splice(0);
  this.data.rows.splice(0);
  if (this.curentMode.onRowRemoved) this.curentMode.onRowRemoved(0, n);
  this.onRowSplice(0);
};

DTBody.prototype.rowAt = function (idx) {
  if (this.rows[idx]) return this.rows[idx];
  var rowData = this.data.rows[idx];

  if (rowData) {
    this.rows[idx] = new dynamictable_DTBodyRow(this, rowData);
    this.rows[idx].idx = idx;
  } else return null;
};

DTBody.prototype.rowOf = function (o) {
  var idx = this.rowIndexOf(o);
  return this.rowAt(idx);
};

DTBody.prototype.viewIntoRow = function (row) {
  return this.curentMode.viewIntoRow(row);
};

DTBody.prototype.startSearchingIfNeed = function () {
  if (this.curentMode !== this.modes.searching) {
    this.curentMode.end();
    this.curentMode = this.modes.searching;
    this.curentMode.start();
  }
};

DTBody.prototype.stopSearchIfNeed = function () {
  if (this.curentMode === this.modes.searching) {
    this.curentMode.end();
    this.curentMode = this.modes.normal;
    this.curentMode.start();
  }
};

DTBody.prototype.query = function (query) {
  var now = new Date().getTime();

  if (query) {
    this.startSearchingIfNeed();
  } else if (!query) {
    this.stopSearchIfNeed();
    this.curentMode.render();
  }

  if (this.curentMode.query && query) {
    this.curentMode.query(query);
  }
};

DTBody.prototype.updateCopyEltSize = function () {
  this.rows.forEach(function (row) {
    return row.updateCopyEltSize();
  });
};

Object.defineProperties(DTBody.prototype, {
  offset: {
    set: function set(value) {
      this._offset = value;
      this.curentMode.offset = value;
      this.curentMode.render();
    },
    get: function get() {
      return this._offset;
    }
  },
  searching: {
    get: function get() {
      return this.elt.hasClass('as-searching');
    }
  }
});
Object.defineProperty(DTBody.prototype, 'elt', {
  get: function get() {
    var _this6 = this;

    if (this._elt) return this._elt;
    this._elt = ACore_({
      tag: 'tbody',
      "class": 'as-dt-body'
    });

    if (this.data.on) {
      Object.keys(this.data.on).forEach(function (key) {
        var cb = _this6.data.on[key];
        if (typeof cb !== "function") return;

        _this6._elt.on(key, function (event) {
          cb.call(_this6._elt, event, _this6);
        });
      });
    }

    return this._elt;
  }
});
Object.defineProperty(DTBody.prototype, 'fixedXElt', {
  get: function get() {
    if (this._fixedXElt) return this._fixedXElt;
    this._fixedXElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-fixed-x'
    });
    return this._fixedXElt;
  }
});
Object.defineProperty(DTBody.prototype, 'adapter', {
  get: function get() {
    return this.table.adapter;
  }
});
/* harmony default export */ const dynamictable_DTBody = (DTBody);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTTable.js
/***
 *
 * @param {DynamicTable} elt
 * @param {} data
 * @constructor
 */




function DTTable(wrapper, data) {
  this.wrapper = wrapper;
  this._elt = null;
  this._fixedXElt = null;
  this._fixedXYElt = null;
  this._fixedYElt = null;
  /***
   *
   * @type {DTDataTable|null|*|string}
   */

  this.adapter = this.wrapper._adapter;
  this.data = data;
  this.header = new dynamictable_DTHead(this, this.data.head);
  this.body = new dynamictable_DTBody(this, this.data.body);
}

DTTable.prototype.updateCopyEltSize = function () {
  if (!this._fixedYElt) return;

  var bound = this._elt.getBoundingClientRect();

  if (this._fixedYElt) this._fixedYElt.addStyle('width', bound.width + 'px');
  this.header.updateCopyEltSize();
  this.body.updateCopyEltSize();
};

DTTable.prototype.revokeResource = function () {
  this.wrapper = null;
  this._elt = null;
  this.adapter = null;
  this.data = null;
  this.body.revokeResource();
};

Object.defineProperty(DTTable.prototype, 'elt', {
  get: function get() {
    if (this._elt) return this._elt;
    this._elt = ACore_({
      tag: 'table',
      "class": 'as-dynamic-table',
      child: [this.header.copyElt, this.body.elt]
    });
    return this._elt;
  }
});
Object.defineProperty(DTTable.prototype, 'fixedXElt', {
  get: function get() {
    if (this._fixedXElt) return this._fixedXElt;
    this._fixedXElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-fixed-x',
      child: [this.header.fixedXElt, this.body.fixedXElt]
    });
    return this._fixedXElt;
  }
});
Object.defineProperty(DTTable.prototype, 'fixedYElt', {
  get: function get() {
    if (this._fixedYElt) return this._fixedYElt;
    this._fixedYElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-dt-fixed-y',
      child: [this.header.elt]
    });
    return this._fixedYElt;
  }
});
Object.defineProperty(DTTable.prototype, 'fixedXYElt', {
  get: function get() {
    if (this._fixedXYElt) return this._fixedXYElt;
    this._fixedXYElt = ACore_({
      elt: this.elt.cloneNode(false),
      "class": 'as-dt-fixed-y',
      child: [this.header.fixedXYElt]
    });
    return this._fixedXYElt;
  }
});
/* harmony default export */ const dynamictable_DTTable = (DTTable);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTDataAdapter.js
/***
 * @typedef DTDataRow
 * @property
 */

/***
 * @typedef DTDataBody
 * @property {DTDataRow[]} row
 */

/***
 * @typedef DTDataHead
 * @property {DTDataHRow[]} row
 */

/***
 * @typedef DTDataTable
 * @property head
 * @property body
 * @property {number} rowsPerPage
 * @property {number} fixedCol
 */




var overrideNames = ['insertChildBefore', 'appendChild', 'remove', 'removeChild', 'addStyle', 'removeStyle'];
var overrideName1s = overrideNames.map(function (x) {
  return x + '1';
});
var overrideFunctions = overrideNames.map(function (name, i) {
  var name1 = overrideName1s[i];

  if (i < 2) {
    return function () {
      // hookContentChange(arguments[0]);
      HTML5_ResizeSystem.requestUpdateUpSignal(this, true);
      return this[name1].apply(this, arguments);
    };
  } else {
    return function () {
      if (arguments[0] === 'display') {
        HTML5_ResizeSystem.requestUpdateUpSignal(this, true);
      }

      return this[name1].apply(this, arguments);
    };
  }
});
var hookContentChange = function hookContentChange(elt) {
  if (!elt) return;
  if (elt.nodeType !== Node.ELEMENT_NODE) return;
  if (elt.contentHooked) return;
  elt.contentHooked = true;
  if (!elt.selfRemove) ACore_$(elt);

  if (elt._azar_extendTags) {
    ['addStyle', 'removeStyle'].forEach(function (name, i) {
      if (elt[name] !== HTML5_AElement.prototype[name]) return;
      var name1 = overrideName1s[i];
      elt[name1] = elt[name];
      elt[name] = overrideFunctions[i];
    });

    for (var key in elt._azar_extendTags) {
      return;
    }
  } else {
    overrideNames.forEach(function (name, i) {
      if (elt[name] !== HTML5_AElement.prototype[name]) return;
      var name1 = overrideName1s[i];
      elt[name1] = elt[name];
      elt[name] = overrideFunctions[i];
    });
    Array.prototype.map.call(elt.childNodes, function (sElt) {
      return hookContentChange(sElt);
    });
  }
};
/***
 *
 * @param {DynamicTable} tableElt
 * @param {DTDataAdapter} opt
 * @constructor
 */

function DTDataAdapter(tableElt, opt) {
  this.tableElt = tableElt;
  /***
   *
   * @type {null|DTDataTable}
   */

  this.data = null;
  this.rowsPerPage = 20;
  this.fixedCol = 0;
  Object.assign(this, opt);

  if (this.fixedCol === 0) {
    this.tableElt.removeClass('as-has-fixed-col');
  } else {
    this.tableElt.addClass('as-has-fixed-col');
  }
}

DTDataAdapter.prototype.revoke = function () {
  this.tableElt = null;
  this.data = null;
};

DTDataAdapter.prototype.render = function () {
  if (this.tableElt.table) this.tableElt.table.revokeResource();
  this.tableElt.table = new dynamictable_DTTable(this.tableElt, this.data);
};

DTDataAdapter.prototype.renderHeadCell = function (elt, data, controller) {
  if (data.child) {
    if (data.child.map) {
      elt.addChild(data.child.map(function (it) {
        return ACore_(it);
      }));
    } else {
      elt.addChild(ACore_(data.child));
    }
  }

  if (data.render) {
    data.render.call(null, elt, data, controller);
  }
};

DTDataAdapter.prototype.renderBodyCell = function (elt, data, controller) {
  if (data.child) {
    if (data.child.map) {
      elt.addChild(data.child.map(function (it) {
        return ACore_(it);
      }));
    } else {
      elt.addChild(ACore_(data.child));
    }
  }

  if (data.render) {
    data.render.call(null, elt, data, controller);
  }

  if (data.style) {
    elt.addStyle(data.style);
  }

  hookContentChange(elt);
};

/* harmony default export */ const dynamictable_DTDataAdapter = (DTDataAdapter);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dynamictable.css
var dynamictable = __webpack_require__(3505);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTWaitingViewController.js
/***
 *
 * @param {DynamicTable} tableElt
 * @constructor
 */
function DTWaitingViewController(tableElt) {
  this.tableElt = tableElt;
  this.tokens = {};
  this.traceToken = {};
  this.timeoutIdx = -1;
}

DTWaitingViewController.prototype.begin = function () {
  var token = Math.random() + '';
  if (this.tableElt.$searchInput) this.tableElt.$searchInput.waiting = true;
  this.tokens[token] = true;
  this.traceToken[token] = new Error(token);

  if (this.timeoutIdx > 0) {
    clearTimeout(this.timeoutIdx);
    this.timeoutIdx = -1;
  }

  return token;
};

DTWaitingViewController.prototype.end = function (token) {
  delete this.tokens[token];
  delete this.traceToken[token];

  if (this.timeoutIdx > 0) {
    clearTimeout(this.timeoutIdx);
  }

  this.timeoutIdx = setTimeout(function () {
    this.timeoutIdx = -1;

    for (var i in this.tokens) {
      return;
    }

    if (this.tableElt.$searchInput) this.tableElt.$searchInput.waiting = false;
  }.bind(this), 100);
};

/* harmony default export */ const dynamictable_DTWaitingViewController = (DTWaitingViewController);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/DynamicCSS.js
function DynamicCSS() {
  this.elt = document.createElement('style');
  this.data = {};
  this.state = 'STANDBY';
  this.start();
}
/**
 *
 * @returns {this}
 */


DynamicCSS.prototype.commit = function () {
  var _this = this;

  this.elt.innerHTML = Object.keys(this.data).map(function (ruleQuery) {
    var rule = _this.data[ruleQuery];
    return [ruleQuery + ' {', '    ' + Object.keys(rule).map(function (name) {
      return name + ': ' + rule[name] + ';';
    }).join('\n'), '}'].join('\n');
  }).join('\n\n');
  return this;
};

DynamicCSS.prototype.start = function () {
  if (this.state !== 'STANDBY' && this.state !== 'STOP') return;
  this.state = 'RUNNING';
  document.head.appendChild(this.elt);
  return this;
};

DynamicCSS.prototype.stop = function () {
  if (this.state !== 'RUNNING') return;
  this.elt.remove();
  return this;
};

DynamicCSS.prototype.destroy = function () {
  this.stop();
  if (this.state !== 'STOP') return;
  this.elt = null;
  return this;
};
/***
 *
 * @param {string} ruleQuery
 * @param {string} name
 * @param {string} value
 * @returns {this}
 */


DynamicCSS.prototype.setProperty = function (ruleQuery, name, value) {
  this.data[ruleQuery] = this.data[ruleQuery] || {};
  this.data[ruleQuery][name] = value;
  return this;
};
/**
 *
 * @param ruleQuery
 * @param name
 * @returns {*|undefined}
 */


DynamicCSS.prototype.getProperty = function (ruleQuery, name) {
  var rule = this.data[ruleQuery];
  return rule ? rule[name] : undefined;
};
/***
 *
 * @param ruleQuery
 * @param property
 * @returns {DynamicCSS}
 */


DynamicCSS.prototype.removeProperty = function (ruleQuery, property) {
  var rule = this.data[ruleQuery];
  if (rule) delete rule[property];
  return this;
};
/***
 *
 * @param ruleQuery
 * @param {object} properties
 * @returns {this}
 */


DynamicCSS.prototype.setRule = function (ruleQuery, properties) {
  this.data[ruleQuery] = Object.assign({}, properties);
  return this;
};
/***
 *
 * @param ruleQuery
 * @param {object} properties
 * @returns {this}
 */


DynamicCSS.prototype.modifyRule = function (ruleQuery, properties) {
  this.data[ruleQuery] = Object.assign(this.data[ruleQuery] || {}, properties);
  return this;
};
/***
 *
 * @param {string} ruleQuery
 * @returns {object}
 */


DynamicCSS.prototype.getRule = function (ruleQuery) {
  return this.data[ruleQuery];
};
/**
 *
 * @param {string} ruleQuery
 * @returns {this}
 */


DynamicCSS.prototype.removeRule = function (ruleQuery) {
  delete this.data[ruleQuery];
  return this;
};
/***
 *
 * @param {object} rules
 * @returns {this}
 */


DynamicCSS.prototype.setRules = function (rules) {
  var _this2 = this;

  Object.keys(rules).forEach(function (key) {
    return _this2.setRule(key, rules[key]);
  });
  return this;
};

DynamicCSS.prototype.getRules = function () {
  return this.data;
};

DynamicCSS.prototype.modifyRules = function (rules) {
  var _this3 = this;

  Object.keys(rules).forEach(function (key) {
    return _this3.modifyRule(key, rules[key]);
  });
  return this;
};

/* harmony default export */ const HTML5_DynamicCSS = (DynamicCSS);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DynamicTable.js



















var _loadStyleSheet = function loadStyleSheet() {
  var dynamicStyleSheet = {};
  var key = Array(20).fill(0).map(function (u, i) {
    return ['.as-dynamic-table-wrapper.as-hide-col-' + i + ' td[data-col-idx="' + i + '"]', '.as-dynamic-table-wrapper.as-hide-col-' + i + ' th[data-col-idx="' + i + '"]'].join(', ');
  }).join(',\n');
  dynamicStyleSheet[key] = {
    display: 'none'
  };
  buildCss(dynamicStyleSheet);
  _loadStyleSheet = noop;
};

function DynamicTableManager() {
  this.tables = [];
  this.storageChanged = false;
}

DynamicTableManager.prototype.STORE_KEY = 'DynamicTableSetting';
DynamicTableManager.prototype.VER = 2;

DynamicTableManager.prototype.initIfNeed = function () {
  if (this.css) return;
  this.css = new HTML5_DynamicCSS();
  this.tables = [];

  try {
    var json = localStorage.getItem(this.STORE_KEY);

    if (json) {
      this.data = JSON.parse(json);
      if (!this.data || this.data.ver !== this.VER) this.data = null;
    }
  } catch (er) {}

  this.data = this.data || {
    ver: this.VER,
    colWidth: {}
  };
  this.initCss();
};

DynamicTableManager.prototype.initCss = function () {
  var _this = this;

  Object.keys(this.data.colWidth).forEach(function (tableId) {
    Object.keys(_this.data.colWidth[tableId]).forEach(function (colId) {
      var value = _this.data.colWidth[tableId][colId];

      _this.css.setProperty("#".concat(tableId, " th[data-col-id=\"").concat(colId, "\"]"), 'width', value + 'px');
    });
  });
  this.css.commit();
};

DynamicTableManager.prototype.add = function (table) {
  this.tables.push(table);
};

DynamicTableManager.prototype.removeTrash = function () {
  this.tables = this.tables.filter(function (table) {
    return table.isDescendantOf(document.body);
  });
};

DynamicTableManager.prototype.commitColWidth = function (sender, tableId, colId, value, storage) {
  this.setColWidth(tableId, colId, value, storage);
  this.removeTrash();
  this.commit();
  this.tables.forEach(function (table) {
    if (table.id === table && table !== sender) {
      table.requestUpdateSize();
    }
  });
};

DynamicTableManager.prototype.hasColSize = function (tableId, colId) {
  return this.data.colWidth[tableId] && this.data.colWidth[tableId][colId];
};

DynamicTableManager.prototype.setColWidth = function (tableId, colId, value, storage) {
  if (storage) {
    this.data.colWidth[tableId] = this.data.colWidth[tableId] || {};
    this.data.colWidth[tableId][colId] = value;
    this.storageChanged = true;
  }

  this.css.setProperty("#".concat(tableId, " th[data-col-id=\"").concat(colId, "\"]"), 'width', value + 'px');
};

DynamicTableManager.prototype.commit = function () {
  if (this.storageChanged) {
    localStorage.setItem(this.STORE_KEY, JSON.stringify(this.data));
    this.storageChanged = false;
  }

  this.css.commit();
};

var manager = new DynamicTableManager();
var pendingTables = {};
/***
 * @extends AElement
 * @constructor
 */

function DynamicTable() {
  var _this2 = this;

  this._pendingId = randomIdent(4);
  pendingTables[this._pendingId] = this;
  manager.initIfNeed();

  _loadStyleSheet();

  this.css = new HTML5_DynamicCSS();
  this._hiddenColumns = [];
  /***
   *
   * @type {SearchTextInput|null}
   */

  this.$searchInput = null;
  /***
   *
   * @type {AElement}
   */

  this.$table = ACore_$('.as-dynamic-table', this);
  /***
   *
   * @type {AElement}
   */

  this.$thead = ACore_$('.as-dynamic-table>thead', this.$table);
  /***
   *
   * @type {AElement}
   */

  this.$tbody = ACore_$('.as-dynamic-table>tbody', this.$table);
  this.$filterInputs = [];
  this.$attachhook = ACore_('attachhook').addTo(this);
  this.$domSignal = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal); //controller

  this.table = null;
  this.$space = ACore_$('.as-dynamic-table-space', this);
  this.$fixedYCtn = ACore_$('.as-dynamic-table-fixed-y-ctn', this);
  this.$fixedXCtn = ACore_$('.as-dynamic-table-fixed-x-ctn', this);
  this.$fixedXYCtn = ACore_$('.as-dynamic-table-fixed-xy-ctn', this);
  this.$viewport = ACore_$('.as-dynamic-table-viewport', this);
  this.$hscrollbar = ACore_$('.as-dynamic-table-hb', this);
  this.$vscrollbar = ACore_$('.as-dynamic-table-vb', this);
  this.$pageSelector = new VirtualPageSelector(this);
  this.extendStyle = {}; // this.$attachhook.requestUpdateSize = this.fixedContentCtrl.updateSize.bind(this.fixedContentCtrl);

  this.$attachhook.requestUpdateSize = this.requestUpdateSize.bind(this);
  var trashTO = -1;
  this.$attachhook.once('attached', function () {
    delete pendingTables[_this2._pendingId]; // setTimeout(()=>{
    //     Object.values(pendingTables).forEach(table=>{
    //         if (!table.isDescendantOf(document.body))
    //         table.revokeResource();
    //     });
    // }, 5000);

    HTML5_ResizeSystem.add(_this2.$attachhook);

    _this2.layoutCtrl.onAttached();

    _this2.colSizeCtrl.onAttached();

    manager.add(_this2);
    setTimeout(function () {
      _this2.requestUpdateSize();
    }, 10);
    clearTimeout(trashTO);

    var checkAlive = function checkAlive() {
      if (_this2.isDescendantOf(document.body)) {
        setTimeout(checkAlive, 2000);
      } else {
        _this2.revokeResource();
      }
    };

    setTimeout(checkAlive, 500);
  });
  /***
   *
   * @type {{data: DTDataTable}||null}
   */

  this.adapter = null;
  this.waitingCtl = new dynamictable_DTWaitingViewController(this);
  this.layoutCtrl = new LayoutController(this);
  this.pointerCtrl = new PointerController(this);
  this.colSizeCtrl = new ColSizeController(this);
  this.rowDragCtrl = new RowDragController(this);
}

DynamicTable.tag = 'DynamicTable'.toLowerCase();

DynamicTable.render = function (data, domDesc) {
  var width = domDesc.style && domDesc.style.width;
  var classList = ['as-dynamic-table-wrapper'];

  if (width === 'match_parent') {
    classList.push('as-width-match-parent');
  }

  return ACore_({
    id: 'no-id-' + randomIdent(10),
    extendEvent: ['orderchange', 'colresize'],
    "class": classList,
    child: [{
      tag: js_Hanger.tag,
      "class": 'as-dynamic-table-viewport',
      child: [{
        "class": 'as-dynamic-table-space'
      }, {
        "class": 'as-dynamic-table-fixed-y-ctn'
      }, {
        "class": 'as-dynamic-table-fixed-x-ctn'
      }, {
        "class": 'as-dynamic-table-fixed-xy-ctn'
      }]
    }, {
      tag: VScrollbar,
      "class": 'as-dynamic-table-vb'
    }, {
      tag: HScrollbar,
      "class": 'as-dynamic-table-hb'
    }]
  });
};

DynamicTable.prototype.styleHandlers = {};
/***
 * @this {DynamicTable}
 * @param value
 */

DynamicTable.prototype.styleHandlers.minWidth = function (value) {
  this.extendStyle.minWidth = value; //todo
};

DynamicTable.prototype.styleHandlers['min-width'] = DynamicTable.prototype.styleHandlers.minWidth;
/***
 * @this {DynamicTable}
 * @param value
 */

DynamicTable.prototype.styleHandlers.tableLayout = function (value) {
  if (value === 'fixed') {
    this.addClass('as-table-layout-fixed');
  } else {
    this.removeClass('as-table-layout-fixed');
  } //todo

};

DynamicTable.prototype.styleHandlers['table-layout'] = DynamicTable.prototype.styleHandlers.tableLayout;

DynamicTable.prototype.addStyle = function (arg0, arg1) {
  if (this.styleHandlers[arg0]) {
    this.styleHandlers[arg0].call(this, arg1);
  } else {
    HTML5_AElement.prototype.addStyle.apply(this, arguments);
  }
};

DynamicTable.prototype.requestUpdateSize = function () {
  this.layoutCtrl.onResize();
};

DynamicTable.prototype.revokeResource = function () {
  this.$attachhook.cancelWaiting();
  delete pendingTables[this._pendingId];
  this.css.stop();
  this.css = null;
  return;
  var row, cell, keys, key;
  var rows = this._adapterData && this._adapterData.data && this._adapterData.data.body && this._adapterData.data.body.rows; // if (rows) {
  //     while (rows.length) {
  //         row = rows.pop();
  //         while (row.cells.length) {
  //             cell = row.cells.pop();
  //             keys = Object.keys(cell);
  //             while (keys.length){
  //                 key = keys.pop();
  //                 cell[key] = null;
  //                 delete cell[key];
  //             }
  //         }
  //     }
  // }
  // revokeResource(rows);

  if (this.table) {
    this.table.revokeResource();
    this.table = null;
  }

  if (this._adapter) {
    this._adapter.revoke();

    this._adapter = null;
  }

  this.attachSearchInput(null);
  this.filterInputs = [];
  this.waitingCtl = null;
  this.layoutCtrl = null;
  this.pointerCtrl = null;
  this.colSizeCtrl = null;
  this.rowDragCtrl = null;
  manager.removeTrash();
  HTML5_ResizeSystem.removeTrash();
};

DynamicTable.prototype.addRowBefore = function (rowData, bf) {
  return this.table.body.addRowBefore(rowData, bf);
};

DynamicTable.prototype.addRowAfter = function (rowData, at) {
  return this.table.body.addRowAfter(rowData, at);
};

DynamicTable.prototype.replaceRow = function (rowData, rp) {
  var row = this.rowOf(rp);

  if (row) {
    row.updateData(rowData);
  }

  HTML5_ResizeSystem.requestUpdateSignal();
};

DynamicTable.prototype.addRow = function (rowData, idx) {
  return this.table.body.addRow(rowData, idx);
};

DynamicTable.prototype.addRows = function (rowsData, idx) {
  return this.table.body.addRows(rowsData, idx);
};

DynamicTable.prototype.removeRow = function (row) {
  return this.table.body.removeRow(row);
};

DynamicTable.prototype.rowAt = function (idx) {
  return this.table.body.rowAt(idx);
};

DynamicTable.prototype.rowOf = function (o) {
  return this.table.body.rowOf(o);
};

DynamicTable.prototype.rowIndexOf = function (o) {
  return this.table.body.rowIndexOf(o);
};

DynamicTable.prototype.getRows = function () {
  return this.table.body.rows;
};

DynamicTable.prototype.requireRows = function (start, end) {
  return this.table.body.requireRows(start, end);
};

DynamicTable.prototype.clearRows = function () {
  return this.table.body.clearRows();
};

DynamicTable.prototype.viewIntoRow = function (row) {
  var _this3 = this;

  var counter = 300;

  var wait = function wait() {
    counter--;

    if (_this3.isDescendantOf(document.body)) {
      if (_this3.hasClass('as-adapt-infinity-grow')) {
        row = _this3.rowOf(row);

        if (row) {
          vScrollIntoView(row.elt);
        }
      } else {
        _this3.table.body.viewIntoRow(row);
      }
    } else if (counter > 0) {
      setTimeout(wait, 30);
    }
  };

  setTimeout(wait, 10);
};

DynamicTable.prototype.attachSearchInput = function (inputElt) {
  if (this.$searchInput) {
    this.$searchInput.off('stoptyping', this.eventHandler.searchModify);
    this.$searchInput.off('keyup', this.eventHandler.searchKeyUp);
  }

  this.$searchInput = inputElt;

  if (this.$searchInput) {
    if (this.$searchInput.$table) {
      this.$searchInput.off('stoptyping', this.$searchInput.$table.eventHandler.searchModify);
      this.$searchInput.off('keyup', this.$searchInput.$table.eventHandler.searchKeyUp);
    }

    this.$searchInput.$table = this;
    this.$searchInput.on('stoptyping', this.eventHandler.searchModify);
    this.$searchInput.on('keyup', this.eventHandler.searchKeyUp);
  }
};

DynamicTable.prototype.filter = function (filter) {
  var query = {};
  var queryText = this.$searchInput && this.$searchInput.value || '';
  queryText = queryText.trim().replace(/\s\s+/g, ' ');
  var i;

  if (filter) {
    for (i in filter) {
      query.filter = filter;
      break;
    }
  }

  if (queryText && queryText.length > 0) query.text = queryText;

  for (i in query) {
    this.query(query);
    return;
  }

  this.query(null);
};

DynamicTable.prototype.makeQuery = function () {
  var query = {};
  var textQuery = this.$searchInput && this.$searchInput.value.trim().replace(/\s\s+/, ' ');
  if (textQuery && textQuery.length > 0) query.text = textQuery;
  var i;
  var filter = this.$filterInputs.reduce(function (ac, elt) {
    if (elt.exportFilter) {
      elt.exportFilter(ac);
    } else if (elt.name) {
      ac[elt.name] = elt.value;
    }

    return ac;
  }, {});
  var sort = $$('th', this.table.header.elt).reduce(function (ac, cr) {
    var key = cr.attr('data-sort-key');
    var order = cr.attr('data-sort-order');

    if (key && order && order !== 'none') {
      ac.push({
        key: key,
        order: order
      });
    }

    return ac;
  }, []);

  for (i in filter) {
    query.filter = filter;
    break;
  }

  if (sort.length > 0) {
    query.sort = sort;
  }

  for (i in query) {
    return query;
  }

  return null;
};

DynamicTable.prototype.requestQuery = function () {
  var query = this.makeQuery();
  this.query(query);
};

DynamicTable.prototype.query = function (query) {
  this.table.body.query(query);
};

DynamicTable.prototype.addFilter = function (inputElt) {
  if (inputElt.$dynamicTable) {
    inputElt.$dynamicTable.removeFilter(inputElt);
  }

  inputElt.$dynamicTable = this;
  inputElt.on('change', this.eventHandler.searchModify);
  this.$filterInputs.push(inputElt);
};

DynamicTable.prototype.removeFilter = function (inputElt) {
  if (inputElt.$dynamicTable !== this) return;
  inputElt.$dynamicTable = null;
  inputElt.off('change', this.eventHandler.searchModify);
  var idx = this.$filterInputs.indexOf(inputElt);
  if (idx >= 0) this.$filterInputs.splice(idx, 1);
};

DynamicTable.prototype.notifyRowChange = function (row) {
  var idx = this.table.body.rowIndexOf(row);
  if (idx >= 0) this.table.body.onRowSplice(idx);
};

DynamicTable.prototype.notifyRowsChange = noop;
DynamicTable.property = {};
DynamicTable.property.adapter = {
  /***
   * @this DynamicTable
   * @param data
   */
  set: function set(data) {
    var _this4 = this;

    if (!data) return;
    this._adapterData = data;
    this._adapter = new dynamictable_DTDataAdapter(this, data);
    this.layoutCtrl.onAdapter();
    this.table = new dynamictable_DTTable(this, this._adapterData.data);
    this.$space.clearChild().addChild(this.table.elt);
    this.$fixedYCtn.clearChild().addChild(this.table.fixedYElt);
    this.$fixedXCtn.clearChild().addChild(this.table.fixedXElt);
    this.$fixedXYCtn.clearChild().addChild(this.table.fixedXYElt);
    if (this.extendStyle) this.addStyle(this.extendStyle);
    setTimeout(function () {
      _this4.requestUpdateSize();
    }, 10);
    setTimeout(function () {
      _this4.requestUpdateSize();
    }, 30);
    setTimeout(function () {
      _this4.requestUpdateSize();
    }, 100);
  },
  get: function get() {
    return this._adapterData;
  }
};
DynamicTable.property.filterInputs = {
  set: function set(inputs) {
    var _this5 = this;

    inputs = inputs || [];
    this.$filterInputs.slice().forEach(function (input) {
      _this5.removeFilter(input);
    });
    inputs.forEach(function (input) {
      return _this5.addFilter(input);
    });
  },
  get: function get() {
    return this.$filterInputs;
  }
};
DynamicTable.property.hiddenColumns = {
  set: function set(value) {
    value = value || [];

    this._hiddenColumns.forEach(function (idxV) {
      this.removeClass('as-hide-col-' + idxV);
    }.bind(this));

    this._hiddenColumns = value;

    this._hiddenColumns.forEach(function (idxV) {
      this.addClass('as-hide-col-' + idxV);
    }.bind(this));

    var c = this.parentElement;

    while (c) {
      if (c.hasClass && c.hasClass('absol-table-vscroller') && c.update) {
        c.update();
        break;
      }

      c = c.parentElement;
    }

    HTML5_ResizeSystem.update();
    HTML5_ResizeSystem.requestUpdateSignal();
  },
  get: function get() {
    return this._hiddenColumns;
  }
};
/***
 * @memberOf {DynamicTable#}
 * @type {{}}
 */

DynamicTable.eventHandler = {};
/***
 * @this DynamicTable#
 * @param event
 */

DynamicTable.eventHandler.searchModify = function (event) {
  this.requestQuery();
};
/***
 * @this DynamicTable#
 * @param event
 */


DynamicTable.eventHandler.searchKeyUp = function (event) {
  setTimeout(function () {
    var query = this.$searchInput.value;
    query = query.trim().replace(/\s+/, ' ');
    if (query.length) this.table.body.startSearchingIfNeed();
  }.bind(this), 30);
};

DynamicTable.prototype.getColWidth = function () {
  return this.colSizeCtrl.getColWidth();
};

DynamicTable.prototype.setColWidth = function (colId, value) {
  return this.colSizeCtrl.setColWidth(colId, value);
};

absol_acomp_ACore.install(DynamicTable);
/* harmony default export */ const dynamictable_DynamicTable = (DynamicTable);
/***
 *
 * @param {DynamicTable} elt
 * @constructor
 */

function LayoutController(elt) {
  var _this6 = this;

  /***
   *
   * @type {DynamicTable}
   */
  this.elt = elt;
  this.maxRows = Math.ceil(Math.max(getScreenSize().height / 40, 1080 / 40));
  this.offset = Math_Vec2.ZERO;
  Object.keys(this.constructor.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) _this6[key] = _this6[key].bind(_this6);
  });
  this.elt.$hscrollbar.on('scroll', this.ev_hScrollbarScroll);
  this.elt.$vscrollbar.on('scroll', this.ev_vScrollbarScroll);
  this.elt.$viewport.on('scroll', this.ev_viewportScroll);
  this.elt.on('wheel', this.ev_wheel);
  this.scrollingDir = Math_Vec2.ZERO;
  this.scrollingStartOffset = Math_Vec2.ZERO;
}
/***
 *
 * @param {WheelEvent} event
 */


LayoutController.prototype.ev_wheel = function (event) {
  var isOverflowY = this.elt.hasClass('as-overflow-y');
  var isOverflowX = this.elt.hasClass('as-overflow-x');
  var dy = event.deltaY;
  var prevOffset;

  if (isOverflowY && (!event.shiftKey || !isOverflowX)) {
    prevOffset = this.elt.$vscrollbar.innerOffset;

    if (dy > 0) {
      this.elt.$vscrollbar.innerOffset = Math.max(Math.min(prevOffset + 100 / 40, this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight), 0);

      if (prevOffset !== this.elt.$vscrollbar.innerOffset) {
        event.preventDefault();
        this.elt.$vscrollbar.emit('scroll');
      }
    } else if (dy < 0) {
      this.elt.$vscrollbar.innerOffset = Math.max(Math.min(prevOffset - 100 / 40, this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight), 0);

      if (prevOffset !== this.elt.$vscrollbar.innerOffset) {
        event.preventDefault();
        this.elt.$vscrollbar.emit('scroll');
      }
    }
  } else if (isOverflowX && (event.shiftKey || !isOverflowY)) {
    prevOffset = this.elt.$hscrollbar.innerOffset;

    if (dy > 0) {
      this.elt.$hscrollbar.innerOffset = Math.max(Math.min(prevOffset + 100, this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth), 0);

      if (prevOffset !== this.elt.$hscrollbar.innerOffset) {
        event.preventDefault();
        this.elt.$hscrollbar.emit('scroll');
      }
    } else if (dy < 0) {
      this.elt.$hscrollbar.innerOffset = Math.max(Math.min(prevOffset - 100, this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth), 0);

      if (prevOffset !== this.elt.$hscrollbar.innerOffset) {
        event.preventDefault();
        this.elt.$hscrollbar.emit('scroll');
      }
    }
  }
};

LayoutController.prototype.onAdapter = function () {
  var adapter = this.elt.adapter;

  if (this.elt.style.height === 'auto') {
    this.elt.removeStyle('height');
    this.elt.addClass('as-adapt-infinity-grow');
  }

  if (adapter.fixedCol > 0) {
    this.elt.addClass('as-has-fixed-col');
  } else {
    this.elt.removeClass('as-has-fixed-col');
  }

  if (adapter.rowsPerPage === Infinity) {
    this.elt.addClass('as-adapt-infinity-grow');
  }

  if (!adapter.data.head || !adapter.data.head.rows || !adapter.data.head.rows[0] || !adapter.data.head.rows[0].cells || !adapter.data.head.rows[0].cells[0]) {
    this.elt.addClass('as-headless');
  } else {
    this.elt.removeClass('as-headless');
  }
};

LayoutController.prototype.handleMinWidth = function () {
  var minWidth = this.elt.extendStyle.minWidth || this.elt.table.elt.getComputedStyleValue('min-width');
  var mv = parseMeasureValue(minWidth);
  if (!mv) return;
  if (mv.unit !== 'px') return;
  if (!this.elt.table.elt.firstChild || !this.elt.table.elt.firstChild.firstChild) return;
  var bound = this.elt.table.elt.firstChild.firstChild.getBoundingClientRect();
  if (bound.width >= mv.value) return; //copyElt

  var cells = this.elt.table.header.rows[0].cells;
  var freeCells = cells.filter(function (cell) {
    return !cell.data.style || !cell.data.style.width;
  });
  if (freeCells.length === 0) return;
  var cellWidths = freeCells.map(function (cell) {
    return cell.copyElt.getBoundingClientRect().width;
  });
  var sumWidth = cellWidths.reduce(function (ac, w) {
    return ac + w;
  }, 0);
  var needGrowUp = mv.value - bound.width;
  freeCells.forEach(function (cell, i) {
    var width = cellWidths[i];
    var newWidth = width + width / sumWidth * needGrowUp;
    var paddingLeft = cell.copyElt.getComputedStyleValue('padding-left') || '0px';
    var paddingRight = cell.copyElt.getComputedStyleValue('padding-right') || '0px';
    paddingLeft = parseFloat(paddingLeft.replace('px', ''));
    paddingRight = parseFloat(paddingRight.replace('px', ''));
    cell.copyElt.addStyle('width', newWidth + 'px');
    cell.copyElt.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px');
    cell.elt.addClass('as-col-width-auto');
    cell.copyElt.addClass('as-col-width-auto');
    cell.elt.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px');

    if (cell._copyElt1) {
      cell._copyElt1.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px');

      cell._copyElt1.addClass('as-col-width-auto');
    }

    if (cell._copyElt2) {
      cell._copyElt2.addClass('as-col-width-auto');

      cell._copyElt2.addStyle('--as-force-min-width', newWidth - paddingLeft - paddingRight - 1 + 'px');
    }
  });
};

LayoutController.prototype.handleDisplay = function () {
  if (!this.elt.hasClass('as-width-match-parent')) {
    return;
  }

  var tableWidth = this.elt.table.elt.getBoundingClientRect().width;
  var viewportWidth = this.elt.$viewport.getBoundingClientRect().width;

  if (tableWidth < viewportWidth - 17 && !this.elt.hasClass('as-table-layout-fixed')) {
    this.elt.table.elt.addStyle('width', viewportWidth - 17 + 'px');
  }

  if (!this.elt.hasClass('as-table-layout-fixed')) {
    this.elt.table.elt.addStyle('min-width', viewportWidth - 17 + 'px');
  }
};

LayoutController.prototype.onAttached = function () {
  var _this7 = this;

  var c = this.elt.parentElement;

  while (c) {
    if (c.isSupportedEvent && c.isSupportedEvent('sizechange')) {
      c.on('sizechange', function () {
        _this7.onResize();
      });
    }

    c = c.parentElement;
  }

  if (this.elt.table) {
    this.handleDisplay();
    this.handleMinWidth();
    this.elt.table.updateCopyEltSize();
    this.updateOverflowStatus();
    this.elt.$vscrollbar.once('scroll', function () {
      setTimeout(function () {
        if (_this7.elt.table.body.rows.length === 0) return;
        var tableId = _this7.elt.id;
        var cells = _this7.elt.table.header.rows[0] && _this7.elt.table.header.rows[0].cells;
        if (!cells) return;
        var changed = false;
        cells.forEach(function (cell) {
          var colId = cell.data.id;
          var bound;

          if (!colId) {
            //local style
            bound = cell.copyElt.getBoundingClientRect();

            if (bound.width > 0) {
              _this7.elt.css.setProperty("#".concat(_this7.elt.id, " th[data-col-idx=\"").concat(cell.idx, "\"]"), 'width', bound.width + 'px').commit();
            }

            return;
          }

          if (!manager.hasColSize(tableId, colId)) {
            bound = cell.copyElt.getBoundingClientRect();

            if (bound.width) {
              manager.setColWidth(tableId, colId, bound.width);
              changed = true;
            }
          }
        });
        if (changed) manager.commit();
      }, 100);
    });
  }
};

LayoutController.prototype.onResize = function () {
  this.updateOverflowStatus();
  this.updateScrollbarStatus();

  if (this.elt.table) {
    this.elt.table.updateCopyEltSize();
    this.updateLines();
  }
};

LayoutController.prototype.updateOverflowStatus = function () {
  var contentBound = this.elt.table ? this.elt.table.elt.getBoundingClientRect() : {
    width: 0,
    height: 0
  };
  this.elt.addStyle('--dt-content-height', contentBound.height + 'px');
  this.elt.addStyle('--dt-content-width', contentBound.width + 'px');
  var bound = this.elt.getBoundingClientRect();

  if (bound.width < contentBound.width) {
    this.elt.addClass('as-overflow-x');
  } else {
    this.elt.removeClass('as-overflow-x');
    this.elt.$space.removeStyle('left');
  }

  if (bound.height < contentBound.height) {
    this.elt.addClass('as-overflow-y');
  } else {
    this.elt.removeClass('as-overflow-y');
    this.elt.$space.removeStyle('top');
  }
};

LayoutController.prototype.updateScrollbarStatus = function () {
  //todo: not overflow y
  if (!this.elt.table) return;
  var childNodes = this.elt.table.body.elt.childNodes;
  var vBound = this.elt.$viewport.getBoundingClientRect();
  var headBound = this.elt.table.header.elt.getBoundingClientRect();
  var availableHeight = vBound.height - headBound.height;
  var rBound;
  var outer = 0;
  var sHeight = 1; //border of last row

  for (var i = 0; i < childNodes.length; ++i) {
    rBound = childNodes[childNodes.length - 1 - i].getBoundingClientRect();
    sHeight += rBound.height;

    if (sHeight >= availableHeight) {
      outer = i + (1 - (sHeight - availableHeight) / rBound.height);
      break;
    }
  }

  this.elt.$vscrollbar.outerHeight = outer;
  this.elt.$vscrollbar.innerHeight = this.elt.table.body.curentMode.viewedRows.length;
  this.elt.$vscrollbar.innerOffset = this.elt.table.body.curentMode.offset;
  var viewportBound = this.elt.$viewport.getBoundingClientRect();
  var tableBound = this.elt.table.elt.getBoundingClientRect();
  this.elt.$hscrollbar.innerWidth = tableBound.width;
  this.elt.$hscrollbar.outerWidth = viewportBound.width;

  if (this.elt.$hscrollbar.innerOffset + this.elt.$hscrollbar.outerWidth > this.elt.$hscrollbar.innerWidth) {
    this.elt.$hscrollbar.innerOffset = Math.max(0, this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth);
    this.elt.$hscrollbar.emit('scroll');
  }
};

LayoutController.prototype.updateLines = function () {
  var fixXBound, headerBound;

  if (this.elt.hasClass('as-overflow-x') && this.elt.hasClass('as-has-fixed-col')) {
    fixXBound = this.elt.$fixedXCtn.getBoundingClientRect();
    this.elt.addStyle('--dt-fixed-x-width', fixXBound.width + 'px');
  }

  if (this.elt.hasClass('as-overflow-y')) {
    headerBound = this.elt.$fixedYCtn.firstChild.getBoundingClientRect();
    this.elt.addStyle('--dt-header-height', headerBound.height + 'px');
  }
};

LayoutController.prototype.ev_hScrollbarScroll = function (event) {
  this.elt.$space.addStyle('left', -this.elt.$hscrollbar.innerOffset + 'px');
  this.elt.$fixedYCtn.addStyle('left', -this.elt.$hscrollbar.innerOffset + 'px');
  this.elt.$viewport.emit('scroll');
};

LayoutController.prototype.ev_vScrollbarScroll = function () {
  if (!this.elt.table || !this.elt.table.body) return;
  this.elt.table.body.offset = this.elt.$vscrollbar.innerOffset;
  this.elt.$viewport.emit('scroll');
};

LayoutController.prototype.ev_dragStart = function (event) {
  var isOverflowY = this.elt.hasClass('as-overflow-y');
  var isOverflowX = this.elt.hasClass('as-overflow-x');
  var dir = event.currentPoint.sub(event.startingPoint);

  if (isOverflowY && Math.abs(dir.y) > Math.abs(dir.x)) {
    this.scrollingDir = new Math_Vec2(0, 1);
    event.preventDefault();
  } else if (isOverflowX && Math.abs(dir.y) < Math.abs(dir.x)) {
    this.scrollingDir = new Math_Vec2(1, 0);
    event.preventDefault();
  } else {
    this.scrollingDir = Math_Vec2.ZERO;
  }

  this.scrollingStartOffset = new Math_Vec2(this.elt.$hscrollbar.innerOffset, this.elt.$vscrollbar.innerOffset);
};

LayoutController.prototype.ev_drag = function (event) {
  var changed = false;
  var dir = event.currentPoint.sub(event.startingPoint);
  var newOffset = new Math_Vec2(0, 0);

  if (this.scrollingDir.x !== 0) {
    newOffset.x = Math.max(0, Math.min(this.elt.$hscrollbar.innerWidth - this.elt.$hscrollbar.outerWidth, this.scrollingStartOffset.x - dir.x));

    if (this.elt.$hscrollbar.innerOffset !== newOffset.x) {
      changed = true;
      this.elt.$hscrollbar.innerOffset = newOffset.x;
      this.elt.$hscrollbar.emit('scroll');
    }
  } else if (this.scrollingDir.y !== 0) {
    newOffset.y = Math.max(0, Math.min(this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight, this.scrollingStartOffset.y - dir.y / 40));

    if (this.elt.$vscrollbar.innerOffset !== newOffset.y) {
      changed = true;
      this.elt.$vscrollbar.innerOffset = newOffset.y;
      this.elt.$vscrollbar.emit('scroll');
    }
  }

  if (changed) event.preventDefault();
};

LayoutController.prototype.ev_dragEnd = function (event) {};

LayoutController.prototype.ev_viewportScroll = function (event) {
  if (this.elt.$viewport.scrollLeft !== 0) {
    this.elt.$hscrollbar.innerOffset += this.elt.$viewport.scrollLeft;
    this.elt.$viewport.scrollLeft = 0;
    this.elt.$hscrollbar.emit('scroll');
  }

  if (this.elt.$viewport.scrollTop !== 0) {
    this.elt.$vscrollbar.innerOffset += this.elt.$viewport.scrollTop / 30; //todo: better solution

    this.elt.$viewport.scrollTop = 0;
    this.elt.$vscrollbar.emit('scroll');
  }
};
/***
 *
 * @param {DynamicTable} elt
 * @constructor
 */


function PointerController(elt) {
  var _this8 = this;

  Object.keys(this.constructor.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) _this8[key] = _this8[key].bind(_this8);
  });
  /***
   *
   * @type {DynamicTable}
   */

  this.elt = elt;
  this.elt.$viewport.hangon = 5;
  this.elt.$viewport.on('draginit', this.ev_dragInit);
  this.elt.$viewport.on('dragstart', this.ev_dragStart);
  this.elt.$viewport.on('drag', this.ev_drag);
  this.elt.$viewport.on('dragend', this.ev_dragEnd);
  this.destHandler = null;
}

PointerController.prototype.isInDragZone = function (elt) {
  while (elt && elt !== this.elt) {
    if (elt.classList.contains('as-drag-zone')) return true;
    elt = elt.parentElement;
  }

  return false;
};

PointerController.prototype.isInInput = function (elt) {
  while (elt) {
    if (elt.tagName === 'INPUT') return true;
    if (elt.tagName === 'TD') return false;
    var clazz = elt.getAttribute('class') || '';
    if (clazz.indexOf('input') >= 0) return true;
    if (clazz.indexOf('input') >= 0) return true;
    if (clazz.indexOf('menu') >= 0) return true;
    elt = elt.parentElement;
  }

  return false;
};

PointerController.prototype.isInColResizer = function (elt) {
  return !!(elt.hasClass && elt.hasClass('as-dt-header-cell-resizer'));
};

PointerController.prototype.ev_dragInit = function (event) {
  if (this.isInDragZone(event.target)) {
    event.preventDefault();
    this.destHandler = this.elt.rowDragCtrl;
  }

  if (this.isInColResizer(event.target)) {
    event.preventDefault();
    this.destHandler = this.elt.colSizeCtrl;
  } else if (this.isInInput(event.target)) {
    event.cancel();
    return;
  } else if (event.isTouch) {// event.preventDefault();//todo: check
  }
};

PointerController.prototype.ev_dragStart = function (event) {
  var dir = event.currentPoint.sub(event.startingPoint).normalized();
  var ox = new Math_Vec2(1, 0);
  var oy = new Math_Vec2(0, 1);

  if (this.destHandler) {
    event.preventDefault && event.preventDefault();
    this.destHandler.ev_dragStart(event);
  } else if (event.isTouch && (Math.abs(dir.dot(ox)) < 0.3 || Math.abs(dir.dot(oy)) < 0.3)) {
    event.preventDefault && event.preventDefault();
    this.destHandler = this.elt.layoutCtrl;
    this.destHandler.ev_dragStart(event);
  } else {
    this.destHandler = null;
  }
};

PointerController.prototype.ev_drag = function (event) {
  if (this.destHandler) {
    event.preventDefault && event.preventDefault();
    this.destHandler.ev_drag(event);
  }
};

PointerController.prototype.ev_dragEnd = function (event) {
  if (this.destHandler) {
    event.preventDefault && event.preventDefault();
    this.destHandler.ev_dragEnd(event);
  }

  this.destHandler = null;
};

PointerController.prototype.ev_dragDeinit = function (event) {};
/***
 *
 * @param {DynamicTable} elt
 * @constructor
 */


function ColSizeController(elt) {
  this.elt = elt;
  this.colId = null; //number: col index, string: ident

  this.startingBound = null;
  this.cellElt = null;
  this.cell = null;
}

ColSizeController.prototype.onAttached = function () {};

ColSizeController.prototype.onAdapter = function () {};

ColSizeController.prototype.ev_dragStart = function (event) {
  var _this9 = this;

  this.dragOK = true;
  this.colId = event.target.parentElement.attr('data-col-id') || parseInt(event.target.parentElement.attr('data-col-idx'));
  this.cell = this.elt.table.header.rows[0].cells.find(function (cell) {
    return cell.data.id === _this9.colId || cell.idx === _this9.colId;
  });

  if (!this.cell) {
    this.dragOK = false;
    return;
  }

  this.cellElt = this.cell.copyElt;
  this.startingBound = Math_Rectangle.fromClientRect(this.cellElt.getBoundingClientRect());
};

ColSizeController.prototype.ev_drag = function (event) {
  if (!this.dragOK) return;
  var newWidth = this.startingBound.width + event.currentPoint.sub(event.startingPoint).x;
  this.cellElt.addStyle('width', newWidth + 'px');
  this.elt.table.updateCopyEltSize();
};

ColSizeController.prototype.ev_dragEnd = function (event) {
  var _this10 = this;

  if (!this.dragOK) return;

  if (typeof this.colId === "string") {
    manager.commitColWidth(this.elt, this.elt.id, this.cell.data.id, this.cellElt.getBoundingClientRect().width, true);
    this.notifyColResize(event);
  } else {
    this.elt.css.setProperty("#".concat(this.elt.id, " th[data-col-idx=\"").concat(this.colId, "\"]"), 'width', this.cellElt.getBoundingClientRect().width + 'px').commit();
  }

  this.elt.requestUpdateSize();
  setTimeout(function () {
    _this10.cellElt.removeStyle('width');

    _this10.elt.requestUpdateSize();
  }, 150);
};

ColSizeController.prototype.getColWidth = function () {
  var res = {};
  this.elt.table.header.rows[0].cells.forEach(function (cell) {
    var id = cell.data.id;
    if (typeof id === "string" || typeof id === "number") id = '' + id;
    if (!id) return;
    Object.defineProperty(res, id, {
      enumerable: true,
      get: function get() {
        return cell.copyElt.getBoundingClientRect().width;
      }
    });
  });
  return res;
};

ColSizeController.prototype.setColWidth = function (colId, value) {
  var cell = this.elt.table.header.rows[0].cells.find(function (cell) {
    return cell.data.id === colId || cell.idx === colId;
  });
  cell.copyElt.removeStyle('width');

  if (typeof colId === "string") {
    manager.commitColWidth(this.elt, this.elt.id, colId, value, true);
  } else {
    this.elt.css.setProperty("#".concat(this.elt.id, " th[data-col-idx=\"").concat(colId, "\"]"), 'width', value + 'px').commit();
  }

  this.elt.requestUpdateSize();
};

ColSizeController.prototype.notifyColResize = function (originalEvent) {
  var _this11 = this;

  var event = {
    type: 'colresize',
    target: this,
    colId: this.colId,
    width: this.cellElt.getBoundingClientRect().width,
    originalEvent: originalEvent.originalEvent || event
  };
  var colWidth;
  Object.defineProperty(event, 'colWidth', {
    get: function get() {
      if (colWidth) return colWidth;
      colWidth = _this11.getColWidth();
      return colWidth;
    }
  });
  this.elt.emit('colresize', event, this);
};
/**
 * new version
 * @param {DynamicTable} elt
 * @constructor
 */


function RowDragController(elt) {
  this.elt = elt;
  this._isDragging = false;
}

RowDragController.prototype._findRow = function (cElt) {
  while (cElt && cElt !== this.elt) {
    if (cElt.dtBodyRow) {
      return cElt.dtBodyRow;
    }

    cElt = cElt.parentElement;
  }

  return null;
};

RowDragController.prototype._getZIndex = function () {
  var e = this.elt.$fixedXYCtn;
  return findMaxZIndex(e);
};

RowDragController.prototype._updateClass = function () {
  var _this12 = this;

  this.row.body.rows.forEach(function (row, i) {
    if (!row._elt) return;

    if (_this12.newIdx < _this12.rowIdx) {
      if (i < _this12.newIdx || i >= _this12.rowIdx) {
        row._elt.addStyle('transform', "translate(0, 0)");
      } else if (i < _this12.rowIdx) {
        row._elt.addStyle('transform', "translate(0, ".concat(_this12.rowRect.height, "px)"));
      }
    } else if (_this12.newIdx > _this12.rowIdx) {
      if (i <= _this12.rowIdx || i > _this12.newIdx) {
        row._elt.addStyle('transform', "translate(0, 0)");

        row._elt._transformY = _this12.rowRect.height;
      } else if (i <= _this12.newIdx) {
        row._elt.addStyle('transform', "translate(0, ".concat(-_this12.rowRect.height, "px)"));

        row._elt._transformY = -_this12.rowRect.height;
      }
    } else {
      row._elt.addStyle('transform', "translate(0, 0)");

      row._elt._transformY = 0;
    }
  });
};

RowDragController.prototype._computeRowBound = function () {
  this.firstBoundIdx = this.elt.rowIndexOf(this.row.body.elt.firstChild);
  this.bounds = Array.prototype.map.call(this.row.body.elt.childNodes, function (elt, i) {
    var rect = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    rect.y -= elt._transformY || 0;
    return rect;
  });
};

RowDragController.prototype._computeNewIdx = function () {
  var firstBound = Math_Rectangle.fromClientRect(this.row.body.elt.firstChild.getBoundingClientRect());
  var delta = firstBound.A().sub(this.bounds[0].A());
  var cBound = Math_Rectangle.fromClientRect(this.ctn.getBoundingClientRect());
  var y0 = this.bounds[0].y + delta.y;
  var nearest = Infinity;
  this.newIdx = this.firstBoundIdx;
  var cur;
  var S = [];
  S['-1'] = 0;
  var i, y;

  for (i = 0; i < this.bounds.length; ++i) {
    S.push(S[i - 1] + this.bounds[i].height);
  }

  for (i = 0; i < this.bounds.length; ++i) {
    cur = this.firstBoundIdx + i;

    if (cur <= this.rowIdx) {
      y = y0 + S[i - 1];
    } else {
      y = y0 + S[i] - cBound.height;
    }

    if (nearest > Math.abs(cBound.y - y) + 0.1 && this.row.body.rows[cur].draggable) {
      nearest = Math.abs(cBound.y - y);
      this.newIdx = cur;
    }
  }
};

RowDragController.prototype.ev_dragStart = function (event) {
  if (this.elt.table.body.curentMode.name !== 'normal') return;
  this.elt.addClass('as-row-dragging');
  this.row = this._findRow(event.target);
  this.body = this.row.body;
  this.rowIdx = this.elt.rowIndexOf(this.row);
  this.newIdx = this.rowIdx;
  this.clonedTable = this._cloneTableRow(this.row);
  this.ctn = ACore_({
    "class": 'as-dt-body-row-cloned-ctn',
    style: {
      zIndex: this._getZIndex() + 20,
      cursor: 'move',
      opacity: 0.9
    },
    child: ACore_$(this._cloneTableRow(this.row)).removeStyle('transform')
  }).addTo(document.body);
  this.row.elt.addClass('as-dragging');
  this.rowRect = Math_Rectangle.fromClientRect(this.row.elt.getBoundingClientRect());
  this.elt.addStyle('--dt-dragging-row-height', this.rowRect.height);
  this.viewportRect = Math_Rectangle.fromClientRect(this.elt.$viewport.getBoundingClientRect());
  this.headerRect = Math_Rectangle.fromClientRect(this.elt.$fixedYCtn.getBoundingClientRect());
  this.pointeroffset = event.startingPoint.sub(this.rowRect.A());
  this.ctn.addStyle({
    top: this.rowRect.y + 'px',
    left: this.rowRect.x + 'px'
  });

  this._computeRowBound();

  this._computeNewIdx();

  this._updateClass();

  this._isDragging = true;
};

RowDragController.prototype.ev_rowRenderChange = function () {
  if (!this._isDragging) return;

  this._computeRowBound();

  this._computeNewIdx();

  this._computeNewIdx();

  this._updateClass();
};
/**
 *
 * @param {DTBodyRow}row
 * @private
 */


RowDragController.prototype._cloneTableRow = function (row) {
  var tableElt = ACore_$(row.body.table.elt.cloneNode(false)).addStyle({
    tableLayout: 'fixed',
    width: row.body.table.elt.getBoundingClientRect().width + 'px'
  });
  var tBodyElt = ACore_$(row.body.elt.cloneNode(false));
  tableElt.addChild(tBodyElt);
  var rowElt = ACore_$(this.row.elt.cloneNode(false)).addStyle({
    height: this.row.elt.getBoundingClientRect().height + 'px',
    backgroundColor: this.row.elt.getComputedStyleValue('background-color')
  });
  tBodyElt.addChild(rowElt);
  this.row.cells.forEach(function (cell) {
    var width = cell.elt.getBoundingClientRect().width;
    ACore_$(cell.elt.cloneNode(true)).addStyle({
      width: width + 'px'
    }).addTo(rowElt);
  });
  return tableElt;
};

RowDragController.prototype.ev_drag = function (event) {
  var _this13 = this;

  var newY = event.currentPoint.sub(this.pointeroffset).y;
  this.ctn.addStyle('top', newY + 'px');
  clearTimeout(this._dragOutTO);
  var ctnBound = Math_Rectangle.fromClientRect(this.ctn.getBoundingClientRect());

  var onDragOutPositive = function onDragOutPositive() {
    var dy = ctnBound.D().y - _this13.viewportRect.D().y;

    dy /= 1000 / 60 / 4 * _this13.rowRect.height;
    dy = Math.min(dy, _this13.elt.$vscrollbar.innerHeight - _this13.elt.$vscrollbar.outerHeight - _this13.elt.$vscrollbar.innerOffset);

    if (dy > 0) {
      _this13.elt.$vscrollbar.innerOffset += dy;

      _this13.elt.$vscrollbar.emit('scroll');
    }

    _this13._computeNewIdx();

    _this13._updateClass();

    clearTimeout(_this13._dragOutTO);
    _this13._dragOutTO = setTimeout(onDragOutPositive, 33);
  };

  var onDragOutNegative = function onDragOutNegative() {
    var dy = ctnBound.y - _this13.headerRect.D().y;

    dy /= 1000 / 60 / 4 * _this13.rowRect.height;
    dy = Math.max(dy, -_this13.elt.$vscrollbar.innerOffset);

    if (dy < 0) {
      _this13.elt.$vscrollbar.innerOffset += dy;

      _this13.elt.$vscrollbar.emit('scroll');
    }

    _this13._computeNewIdx();

    _this13._updateClass();

    clearTimeout(_this13._dragOutTO);
    _this13._dragOutTO = setTimeout(onDragOutNegative, 33);
  };

  if (this.viewportRect.D().y < ctnBound.D().y) {
    this._dragOutTO = setTimeout(onDragOutPositive, 1000 / 60);
  } else if (this.headerRect.D().y > ctnBound.y) {
    this._dragOutTO = setTimeout(onDragOutNegative, 100 / 60);
  } else {
    this._computeNewIdx();

    this._updateClass();
  }
};

RowDragController.prototype.ev_dragEnd = function (event) {
  this.elt.addClass('as-row-dragging');
  this.elt.removeClass('as-row-dragging');
  this.elt.removeStyle('--dragging-row-height');
  this.row.elt.removeClass('as-dragging');
  this._isDragging = false;
  clearTimeout(this._dragOutTO);
  this.ctn.remove();
  this.row.body.rows.forEach(function (row) {
    if (row._elt) {
      row._elt.removeStyle('transform');

      row._elt._transformY = 0;
    }
  });

  if (this.newIdx !== this.rowIdx) {
    this.row.body.moveRowAt(this.rowIdx, this.newIdx);
    var eventData = {
      type: 'orderchange',
      target: this.row,
      from: this.rowIdx,
      to: this.newIdx,
      originalEvent: event,
      row: this.row,
      data: this.row.data
    };

    if (this.row.data.on && this.row.data.on.orderchange) {
      this.row.data.on.orderchange.call(this.row, eventData, this.row);
    }

    this.elt.emit('orderchange', eventData, this.body.table.wrapper);
  }
};

function VirtualPageSelector(elt) {
  this.elt = elt;
}

VirtualPageSelector.prototype.getSelectedPage = function () {
  return this.elt.$vscrollbar.innerOffset / 25;
};

VirtualPageSelector.prototype.selectPage = function (value) {
  this.elt.$vscrollbar.innerOffset = value * 25;
  this.elt.$vscrollbar.emit('scroll');
};
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/objectmergetool.css
var objectmergetool = __webpack_require__(5519);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/dialog/OMTSelectOptionsDialog.js








/***
 * @extends Fragment
 * @param {OMTBaseType} node
 * @constructor
 */

function OMTSelectOptionsDialog(node) {
  AppPattern_Fragment.call(this);
  this.node = node;
  this.calc();
  this.getView();
  this.start();
}

HTML5_OOP.mixClass(OMTSelectOptionsDialog, AppPattern_Fragment);

OMTSelectOptionsDialog.prototype.calc = function () {
  this.options = this.node.getSelectOptions();
  this.curHash = this.node.getHash();
  this.selectedHash = this.curHash;
  this.selectedOption = null;
  this.ident = randomIdent(5);
};

OMTSelectOptionsDialog.prototype.onStart = function () {
  this.$modal.addTo(document.body);
};

OMTSelectOptionsDialog.prototype.onStop = function () {
  this.$modal.remove();
};

OMTSelectOptionsDialog.prototype.assignResult = function () {
  if (this.curHash !== this.selectedHash) {
    this.node.assign(this.selectedOption);
    this.node.updateRaw();
    this.node.notifyChange();
  }
};

OMTSelectOptionsDialog.prototype._makeOptionRow = function (opt, i, dict) {
  var descriptor = Object.assign({}, this.node.descriptor);

  if (i < 0) {
    descriptor.desc = '(current-mixed)';
  }

  var clazz = this.node.constructor;
  var node = new clazz(this.node.tool, this.node.parent, descriptor);
  node.assign(opt);
  var nodeHash = node.getHash();
  if (dict[nodeHash]) return null;
  dict[nodeHash] = node;
  var self = this;

  var radio = ACore_({
    tag: js_RadioButton.tag,
    style: {
      marginRight: '10px'
    },
    props: {
      name: this.ident,
      checked: nodeHash === this.curHash
    },
    on: {
      change: function change() {
        if (radio.checked) {
          self.selectedHash = nodeHash;
          self.selectedOption = opt;
        }
      }
    }
  });

  return ACore_({
    "class": 'as-omt-option-row',
    child: [radio, node.elt]
  });
};

OMTSelectOptionsDialog.prototype.createView = function () {
  var _this = this;

  var self = this;
  this.$view = ACore_({
    tag: js_MessageDialog.tag,
    "class": 'as-omt-dialog',
    props: {
      dialogTitle: {
        mlKey: 'txt_option'
      },
      dialogActions: [{
        text: {
          mlKey: 'txt_ok'
        },
        name: 'ok'
      }, {
        text: {
          mlKey: 'txt_cancel'
        },
        name: 'cancel'
      }]
    },
    on: {
      action: function action(event) {
        self.stop();
        var action = event.action;
        if (action.name === 'cancel') return;

        if (action.name === 'ok') {
          self.assignResult();
        }
      }
    }
  });
  var dict = {};
  var rows = this.options.map(function (opt, i) {
    return _this._makeOptionRow(opt, i, dict);
  }).filter(function (x) {
    return !!x;
  });

  if (!dict[this.curHash]) {
    rows.unshift(this._makeOptionRow(this.node["export"](), -1, dict));
  }

  this.$view.addChild(rows);
  this.$modal = ACore_({
    tag: js_Modal.tag,
    style: {
      zIndex: 1000000
    },
    child: this.$view
  });
};

/* harmony default export */ const dialog_OMTSelectOptionsDialog = (OMTSelectOptionsDialog);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTBaseType.js










/**
 *
 * @constructor
 */

function OMTBaseType(tool, parent, descriptor) {
  this.tool = tool;
  this.parent = parent;
  this.level = parent ? parent.level + 1 : 0;
  this.descriptor = descriptor;
  this.render();
  this.elt.omtNode = this;
}

OMTBaseType.prototype.type = 'base';
OMTBaseType.prototype.commands = [{
  name: 'select_other',
  icon: 'span.mdi.mdi-menu-down',
  title: 'Select'
}];

OMTBaseType.prototype.render = function () {
  var _this = this;

  var self = this;
  var displayName = 'ROOT';
  if (this.descriptor.displayName !== undefined) displayName = this.descriptor.displayName + '';else if (this.descriptor.name !== undefined) displayName = this.descriptor.name + '';
  if (this.descriptor.desc) displayName += this.descriptor.desc;
  this.elt = ACore_({
    "class": ['as-omt-field', 'as-type-' + this.type],
    style: {
      '--level': this.level
    },
    child: [{
      "class": 'as-omt-field-header',
      child: [{
        "class": 'as-omt-field-name',
        child: {
          text: displayName
        }
      }]
    }, {
      "class": 'as-omt-field-body'
    }, {
      "class": 'as-omt-field-raw-ctn'
    }, {
      "class": 'as-omt-field-command-ctn',
      child: this.commands.map(function (command) {
        return {
          tag: js_FlexiconButton.tag,
          attr: {
            'data-command': command.name
          },
          props: {
            icon: command.icon,
            title: command.title
          },
          on: {
            click: _this.execCmd.bind(_this, command.name, command)
          }
        };
      })
    }],
    on: {
      dblclick: function (event) {
        var target = event.target;

        while (target) {
          if (target === this) break;
          if (target.tagName === 'BUTTON') return;
          target = target.parentElement;
        }

        this.execCmd('select_other');
      }.bind(this)
    }
  });
  this.$commandCtn = ACore_$('.as-omt-field-command-ctn', this.elt);
  this.$rawCtn = ACore_$('.as-omt-field-raw-ctn', this.elt);
  this.$viewModeBtn = ACore_({
    tag: js_FlexiconButton.tag,
    attr: {
      'data-command': 'view_mode'
    },
    props: {
      icon: 'span.mdi.mdi.mdi-code-braces',
      //code-braces
      title: 'View Raw'
    },
    on: {
      click: function click() {
        if (self.elt.hasClass('as-mode-raw')) {
          self.elt.removeClass('as-mode-raw');
          this.icon = 'span.mdi.mdi-code-braces';
          this.title = 'View Raw';
        } else {
          self.elt.addClass('as-mode-raw');
          this.icon = 'span.mdi.mdi-view-dashboard-edit-outline';
          this.title = 'View Guide';
          self.updateRaw();
        }
      }
    }
  });
  this.$commandCtn.addChild(this.$viewModeBtn);
  this.$body = ACore_$('.as-omt-field-body', this.elt);
};

OMTBaseType.prototype.updateRaw = function () {
  var rawElt = ACore_(this.getRaw());

  this.$rawCtn.clearChild().addChild(rawElt);
};

OMTBaseType.prototype.notifyChange = function () {
  this.descriptor.onchange && this.descriptor.onchange.call(this, {
    type: 'change',
    target: this,
    descriptor: this.descriptor
  }, this);
  this.tool.notifyChange();
};

OMTBaseType.prototype.getRaw = function () {
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'code',
      child: {
        text: generateJSVariable(this["export"]())
      }
    }]
  };
};

OMTBaseType.prototype.assign = function (o) {
  this.value = o;
  this.$body.clearChild().addChild(ACore_({
    tag: 'code',
    child: {
      text: generateJSVariable(o)
    }
  }));
};

OMTBaseType.prototype.getHash = function () {
  return stringHashCode(generateJSVariable(this["export"]()));
};

OMTBaseType.prototype["export"] = function () {
  return this.value;
};

OMTBaseType.prototype.execCmd = function (commandName, command) {
  if (commandName === 'select_other') {
    this.userSelect();
  }
};

OMTBaseType.prototype.getSelectOptions = function () {
  if (!this.parent) return this.tool.objects;
  var parentOptions = this.parent.getSelectOptions().filter(function (x) {
    return !!x;
  });
  var name = this.descriptor.name;
  return parentOptions.map(function (ot) {
    return ot[name];
  }).filter(function (ot) {
    return ot !== undefined;
  });
};

OMTBaseType.prototype.userSelect = function () {
  new dialog_OMTSelectOptionsDialog(this);
};

OMTBaseType.classes = {};
/***
 *
 * @param tool
 * @param parent
 * @param descriptor
 * @returns {OMTBaseType}
 */

OMTBaseType.make = function (tool, parent, descriptor) {
  var clazz = OMTBaseType.classes[descriptor.type] || OMTBaseType;
  return new clazz(tool, parent, descriptor);
};

/* harmony default export */ const type_OMTBaseType = (OMTBaseType);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTStruct.js
function OMTStruct_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { OMTStruct_typeof = function _typeof(obj) { return typeof obj; }; } else { OMTStruct_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return OMTStruct_typeof(obj); }






/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTStruct() {
  var _this = this;

  type_OMTBaseType.apply(this, arguments);
  this.children = (this.descriptor.fields || []).map(function (field) {
    return type_OMTBaseType.make(_this.tool, _this, field);
  });
  this.$body.addChild(this.children.map(function (child) {
    return child.elt;
  }));
  this.data = null;
}

HTML5_OOP.mixClass(OMTStruct, type_OMTBaseType);
OMTStruct.prototype.type = 'struct';

OMTStruct.prototype.assign = function (o) {
  if (o !== null && OMTStruct_typeof(o) === "object") {
    this.elt.removeClass('as-null');
    this.children.forEach(function (child) {
      var name = child.descriptor.name;
      child.assign(o[name]);
    });
  } else {
    this.elt.addClass('as-null');
  }
};

OMTStruct.prototype["export"] = function () {
  return this.children.reduce(function (ac, cr) {
    ac[cr.descriptor.name] = cr["export"]();
    return ac;
  }, {});
};

OMTStruct.prototype.getHash = function () {
  var hash = this.children.map(function (c) {
    return c.getHash();
  }).join('_');
  return stringHashCode(hash);
};

OMTStruct.prototype.getRaw = function () {
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      style: {
        paddingLeft: '25px'
      },
      child: this.children.map(function (child) {
        return child.getRaw();
      })
    }]
  };
};

type_OMTBaseType.classes.struct = OMTStruct;
/* harmony default export */ const type_OMTStruct = ((/* unused pure expression or super */ null && (OMTStruct)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTString.js




/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTString() {
  type_OMTBaseType.apply(this, arguments);
  this.value = null;
}

HTML5_OOP.mixClass(OMTString, type_OMTBaseType);
type_OMTBaseType.classes.string = OMTString;

OMTString.prototype.assign = function (o) {
  this.value = o;
  this.$body.clearChild();
  this.$value = ACore_({
    tag: 'span',
    child: {
      text: (o || '') + ''
    }
  });
  this.$body.addChild(this.$value);
};

OMTString.prototype.getRaw = function () {
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'span',
      child: {
        text: this["export"]()
      }
    }]
  };
};

/* harmony default export */ const type_OMTString = ((/* unused pure expression or super */ null && (OMTString)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTFile.js





/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTFile() {
  type_OMTBaseType.apply(this, arguments);
}

HTML5_OOP.mixClass(OMTFile, type_OMTBaseType);
type_OMTBaseType.classes.file = OMTFile;
type_OMTBaseType.prototype.type = 'file';

OMTFile.prototype.render = function () {
  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: js_FileListItem.tag,
    "class": 'as-omt-field-value'
  });
  this.$body.addChild(this.$value);
};

OMTFile.prototype.assign = function (o) {
  this.value = o;

  if (o) {
    this.$value.value = o;
    this.$value.removeStyle('display');
  } else {
    this.$value.addStyle('display', 'none');
  }
};

OMTFile.prototype.getRaw = function () {
  var info = fileInfoOf(this.value);
  var href = info.url;
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'a',
      props: {
        href: href,
        target: '_blank'
      },
      child: {
        text: info.name
      }
    }]
  };
};

/* harmony default export */ const type_OMTFile = (OMTFile);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTImage.js




/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTImage() {
  type_OMTBaseType.apply(this, arguments);
}

HTML5_OOP.mixClass(OMTImage, type_OMTBaseType);
type_OMTBaseType.classes.image = OMTImage;
type_OMTBaseType.prototype.type = 'image';

OMTImage.prototype.assign = function (o) {
  var _this = this;

  this.value = o;
  var title = '';
  this.$body.clearChild();

  var handle = function handle(val) {
    if (!val) return;

    if (val && val.then) {
      val.then(handle);
      return;
    }

    if (val && val.url) {
      handle(val.url);
      return;
    }

    if (val instanceof File || val instanceof Blob) {
      val.url = val.url || URL.createObjectURL(val);
      if (!title && val.filename) title = val.filename;
      handle(val);
      return;
    }

    if (!title) title = val.split('/').pop().split('?').shift();
    _this.$value = ACore_({
      tag: 'img',
      "class": 'as-omt-field-value',
      props: {
        src: val,
        title: title
      }
    });

    _this.$body.addChild(_this.$value);
  };

  handle(o);
};

OMTImage.prototype.getRaw = type_OMTFile.prototype.getRaw;
/* harmony default export */ const type_OMTImage = ((/* unused pure expression or super */ null && (OMTImage)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTEnum.js





/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTEnum() {
  type_OMTBaseType.apply(this, arguments);
  this.value = null;
}

HTML5_OOP.mixClass(OMTEnum, type_OMTBaseType);
type_OMTBaseType.classes["enum"] = OMTEnum;

OMTEnum.prototype.render = function () {
  var _this = this;

  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: js_SelectTreeMenu.tag,
    "class": 'as-border-none',
    style: {
      height: '18px'
    },
    props: {
      readOnly: true
    }
  });
  this.$body.addChild(this.$value);

  if (this.descriptor.items && this.descriptor.items.then) {
    this.descriptor.items.then(function (items) {
      _this.$value.items = items;
    });
  } else {
    this.$value.items = this.descriptor.items;
  }
};

OMTEnum.prototype.assign = function (o) {
  this.value = o;
  this.$value.value = o;
};

OMTEnum.prototype.getRaw = function () {
  var text = '';
  var holders = this.$value.findItemsByValue(this["export"]());

  if (holders && holders.length > 0) {
    text = holders[0].item.text;
    if (holders[0].item.desc) text += ' - ' + holders[0].item.desc;
  }

  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'span',
      child: {
        text: text
      }
    }]
  };
};

/* harmony default export */ const type_OMTEnum = ((/* unused pure expression or super */ null && (OMTEnum)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/dialog/OMTArrayMergeDialog.js














function hashArrayOf(node) {
  var res = (node.children || []).map(function (child) {
    return child.getHash();
  });
  res.sort(function (a, b) {
    return a - b;
  });
  return arrayUnique(res);
}
/***
 * @extends Fragment
 * @param {OMTArray} node
 * @constructor
 */


function OMTArrayMergeDialog(node) {
  AppPattern_Fragment.call(this);
  this.node = node;
  this.calc();
  this.getView();
  this.start();
}

HTML5_OOP.mixClass(OMTArrayMergeDialog, AppPattern_Fragment);

OMTArrayMergeDialog.prototype.calc = function () {
  this.options = this.node.getSelectOptions();
  this.curHash = hashArrayOf(this.node);
  this.selectedNodes = {};
};

OMTArrayMergeDialog.prototype.onStart = function () {
  this.$modal.addTo(document.body);
};

OMTArrayMergeDialog.prototype.onStop = function () {
  this.$modal.remove();
};

OMTArrayMergeDialog.prototype.assignResult = function () {
  var dict = {};
  var itemArr = [];
  var hashArr = [];
  var node;

  for (var key in this.selectedNodes) {
    node = this.selectedNodes[key];

    if (node.children) {
      node.children.forEach(function (cr) {
        var hash = cr.getHash();
        if (dict[hash]) return;
        dict[hash] = true;
        itemArr.push(cr["export"]());
        hashArr.push(hash);
      });
    }
  }

  if (this.curHash === hashArr && arrayUnique(this.curHash.concat(hashArr)).length === this.curHash.length) return;
  this.node.assign(itemArr);
  this.node.updateRaw();
  this.node.notifyChange();
};

OMTArrayMergeDialog.prototype._makeOptionRow = function (opt, i, dict) {
  var self = this;
  var descriptor = Object.assign({}, this.node.descriptor);
  var clazz = this.node.constructor;
  var node = new clazz(this.node.tool, this.node.parent, descriptor);
  node.assign(opt);
  var nodeHash = stringHashCode(hashArrayOf(node).join(','));
  if (dict[nodeHash]) return null;
  dict[nodeHash] = node;
  var checked = arrayUnique(this.curHash.concat(hashArrayOf(node))).length === this.curHash.length;
  if (checked) this.selectedNodes[nodeHash] = node;

  var radio = ACore_({
    tag: CheckBoxInput.tag,
    style: {
      marginRight: '10px'
    },
    props: {
      checked: checked
    },
    on: {
      change: function change() {
        if (radio.checked) {
          self.selectedNodes[nodeHash] = node;
        } else {
          delete self.selectedNodes[nodeHash];
        }

        self.$view.$actionBtns[1].disabled = Object.keys(self.selectedNodes).length === 0;
      }
    }
  });

  return ACore_({
    "class": 'as-omt-option-row',
    child: [radio, node.elt]
  });
};

OMTArrayMergeDialog.prototype.createView = function () {
  var _this = this;

  var self = this;
  /***
   * @type MessageDialog
   */

  this.$view = ACore_({
    tag: js_MessageDialog.tag,
    "class": 'as-omt-dialog',
    props: {
      dialogTitle: {
        mlKey: 'txt_option'
      },
      dialogActions: [{
        text: 'OK',
        name: 'ok'
      }, {
        text: 'Cancel',
        name: 'cancel'
      }]
    },
    on: {
      action: function action(event) {
        self.stop();
        var action = event.action;
        if (action.name === 'cancel') return;

        if (action.name === 'ok') {
          self.assignResult();
        }
      }
    }
  });
  var dict = {};
  var rows = this.options.map(function (opt, i) {
    return _this._makeOptionRow(opt, i, dict);
  }).filter(function (x) {
    return !!x;
  });
  this.$view.addChild(rows);
  this.$modal = ACore_({
    tag: js_Modal.tag,
    style: {
      zIndex: 1000000
    },
    child: this.$view
  });
};

/* harmony default export */ const dialog_OMTArrayMergeDialog = (OMTArrayMergeDialog);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTArray.js




/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTArray() {
  type_OMTBaseType.apply(this, arguments);
  this.value = null;
}

HTML5_OOP.mixClass(OMTArray, type_OMTBaseType);
type_OMTBaseType.classes.array = OMTArray;
OMTArray.prototype.commands = OMTArray.prototype.commands.concat([{
  name: 'merge',
  icon: 'span.mdi.mdi-set-merge',
  title: 'Merge'
}]);

OMTArray.prototype.execCmd = function (commandName) {
  type_OMTBaseType.prototype.execCmd.call(this, commandName);

  if (commandName === 'merge') {
    new dialog_OMTArrayMergeDialog(this);
  }
};

OMTArray.prototype.assign = function (o) {
  var _this = this;

  this.$body.clearChild();
  this.children = (o || []).map(function (it, i) {
    var desc = Object.assign({
      name: i,
      displayName: i + 1 + ''
    }, _this.descriptor.of);
    if (!desc.displayName) desc.displayName = i + 1 + '';
    var res = type_OMTBaseType.make(_this.tool, _this.parent, desc);
    res.assign(it);
    return res;
  });
  this.$body.addChild(this.children.map(function (c) {
    return c.elt;
  }));
};

OMTArray.prototype["export"] = function () {
  return this.children.map(function (c) {
    return c["export"]();
  });
};

OMTArray.prototype.getRaw = function () {
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      style: {
        paddingLeft: '25px'
      },
      child: this.children.map(function (child) {
        return child.getRaw();
      })
    }]
  };
};

/* harmony default export */ const type_OMTArray = (OMTArray);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/dialog/OMTEnumSetMergeDialog.js








/***
 * @extends Fragment
 * @param {OMTEnumSet} node
 * @constructor
 */

function OMTEnumSetMergeDialog(node) {
  AppPattern_Fragment.call(this);
  this.node = node;
  this.calc();
  this.getView();
  this.start();
}

HTML5_OOP.mixClass(OMTEnumSetMergeDialog, AppPattern_Fragment);

OMTEnumSetMergeDialog.prototype.calc = function () {
  this.currentValues = this.node["export"]();
  this.descriptor = this.node.descriptor;
  this.selectOptions = this.node.getSelectOptions();
  this.selected = {};
};

OMTEnumSetMergeDialog.prototype.onStart = function () {
  this.$modal.addTo(document.body);
};

OMTEnumSetMergeDialog.prototype.onStop = function () {
  this.$modal.remove();
};

OMTEnumSetMergeDialog.prototype.assignResult = function () {
  var selectedValues = this._getCurrent();

  if (selectedValues.length > 0) {
    this.node.assign(arrayUnique(this.currentValues.concat(selectedValues)));
    this.node.notifyChange();
  }
};

OMTEnumSetMergeDialog.prototype._getCurrent = function () {
  var _this = this;

  var selectedValues = this.selectOptions.reduce(function (ac, cr, i) {
    if (_this.selected[i]) ac = ac.concat(cr);
    return ac;
  }, []);
  selectedValues = arrayUnique(selectedValues);
  return selectedValues;
};

OMTEnumSetMergeDialog.prototype._makeOptionRow = function (opt, i) {
  var self = this;
  var checked = arrayUnique(this.currentValues.concat(opt)).length === arrayUnique(this.currentValues).length;
  this.selected[i] = checked;

  var checkbox = ACore_({
    tag: CheckBoxInput.tag,
    style: {
      marginRight: '10px'
    },
    props: {
      checked: checked
    },
    on: {
      change: function change() {
        self.selected[i] = checkbox.checked;

        var currentValues = self._getCurrent();

        self.previewNode.assign(currentValues);
        self.$view.$actionBtns[1].disabled = currentValues.length === 0;
      }
    }
  });

  var mSelect = ACore_({
    tag: js_MultiCheckTreeMenu.tag,
    "class": 'as-border-none',
    props: {
      pendingValues: opt,
      readOnly: true
    }
  });

  return ACore_({
    "class": 'as-omt-option-row',
    child: [checkbox, mSelect]
  });
};

OMTEnumSetMergeDialog.prototype.createView = function () {
  var _this2 = this;

  var self = this;
  this.$optionRows = this.selectOptions.map(function (opt, i) {
    return _this2._makeOptionRow(opt, i);
  });
  this.previewNode = new this.node.constructor(this.node.tool, this.node.parent, this.node.descriptor);
  this.previewNode.assign(this.currentValues);
  this.$view = ACore_({
    tag: js_MessageDialog.tag,
    "class": ['as-omt-dialog'],
    props: {
      dialogTitle: 'Merge',
      dialogActions: [{
        text: 'OK',
        name: 'ok'
      }, {
        text: 'Cancel',
        name: 'cancel'
      }]
    },
    on: {
      action: function action(event) {
        self.stop();

        if (event.action.name === 'ok') {
          self.assignResult();
        }
      }
    },
    child: [this.previewNode, {
      child: [{
        "class": 'as-omt-field-name',
        child: {
          text: 'Merge From'
        }
      }].concat(this.$optionRows)
    }]
  });
  Promise.resolve(this.descriptor.items).then(function (items) {
    $$(js_MultiCheckTreeMenu.tag, _this2.$view).forEach(function (elt) {
      elt.items = items;
      elt.values = elt.pendingValues;
    });
  });
  this.$modal = ACore_({
    tag: js_Modal.tag,
    style: {
      zIndex: 1000000
    },
    child: this.$view
  });
};

/* harmony default export */ const dialog_OMTEnumSetMergeDialog = (OMTEnumSetMergeDialog);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTEnumSet.js






/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTEnumSet() {
  type_OMTBaseType.apply(this, arguments);
  this.value = null;

  this._flatTreeItems();
}

HTML5_OOP.mixClass(OMTEnumSet, type_OMTBaseType);
type_OMTBaseType.classes["{enum}"] = OMTEnumSet;
OMTEnumSet.prototype.commands = type_OMTArray.prototype.commands.slice();

OMTEnumSet.prototype._flatTreeItems = function () {
  if (!this.descriptor.flat) {
    this.descriptor.flat = true;
    this.descriptor.items = this.descriptor.items.reduce(function visit(ac, cr) {
      var item = Object.assign({}, cr);
      ac.push(item);

      if (item.items && item.items.length > 0) {
        item.items.reduce(visit, ac);
      }

      delete item.items;
      return ac;
    }, []);
  }
};

OMTEnumSet.prototype.render = function () {
  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: js_MultiCheckMenu.tag,
    "class": 'as-border-none',
    style: {
      height: '18px'
    },
    props: {
      readOnly: true,
      strictValue: false
    }
  });
  this.$body.addChild(this.$value);
  this.$value.items = this.descriptor.items;
  this.$value.values = this.value;
};

OMTEnumSet.prototype.assign = function (o) {
  this.value = o;
  this.$value.values = o;
};

OMTEnumSet.prototype.execCmd = function (commandName) {
  type_OMTBaseType.prototype.execCmd.call(this, commandName);

  if (commandName === 'merge') {
    this.userMerge();
  }
};

OMTEnumSet.prototype.userMerge = function () {
  //as-omt-option-row
  new dialog_OMTEnumSetMergeDialog(this);
};

OMTEnumSet.prototype.getRaw = function () {
  var _this = this;

  var textItems = this["export"]().map(function (value) {
    var text = '';

    var holders = _this.$value.findItemsByValue(value);

    if (holders && holders.length > 0) {
      text = holders[0].item.text;
      if (holders[0].item.desc) text += ' - ' + holders[0].item.desc;
    }

    return text;
  });
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      style: {
        paddingLeft: '25px'
      },
      child: textItems.map(function (text) {
        return {
          tag: 'li',
          child: {
            text: text
          }
        };
      })
    }]
  };
};

/* harmony default export */ const type_OMTEnumSet = ((/* unused pure expression or super */ null && (OMTEnumSet)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTFileArray.js






/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTFileArray() {
  type_OMTBaseType.apply(this, arguments);
}

HTML5_OOP.mixClass(OMTFileArray, type_OMTBaseType);
type_OMTBaseType.classes["file[]"] = OMTFileArray;
OMTFileArray.prototype.type = 'file[]';
OMTFileArray.prototype.commands = type_OMTArray.prototype.commands.slice();

OMTFileArray.prototype.render = function () {
  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: js_FileListInput.tag,
    "class": ['as-omt-field-value', 'as-border-none'],
    props: {
      readOnly: true
    }
  });
  this.$body.addChild(this.$value);
};

OMTFileArray.prototype.assign = function (o) {
  this.value = o;

  if (o instanceof Array) {
    this.$value.files = o;
    this.$value.removeStyle('display');
  } else {
    this.$value.addStyle('display', 'none');
  }
};

OMTFileArray.prototype.getHash = function () {
  return calcDTQueryHash(this.value);
};

OMTFileArray.prototype.getRaw = function () {
  var infoArr = (this.value || []).map(function (it) {
    return fileInfoOf(it);
  });
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      style: {
        paddingLeft: '25px'
      },
      child: infoArr.map(function (info) {
        return {
          tag: 'a',
          props: info.url ? {
            href: info.url,
            target: '_blank'
          } : {},
          child: {
            text: info.name
          }
        };
      })
    }]
  };
};

/* harmony default export */ const type_OMTFileArray = ((/* unused pure expression or super */ null && (OMTFileArray)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTColor.js






/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTColor() {
  type_OMTBaseType.apply(this, arguments);
}

HTML5_OOP.mixClass(OMTColor, type_OMTBaseType);
type_OMTBaseType.classes.color = OMTColor;
OMTColor.prototype.type = 'color';

OMTColor.prototype.render = function () {
  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    "class": "as-omt-field-color-value-bg",
    child: '.as-omt-field-color-value'
  });
  this.$body.addChild(this.$value);
};

OMTColor.prototype.assign = function (o) {
  this.value = o;
  var color = 'transparent';

  try {
    if (o instanceof src_Color_Color) {
      color = o.toString("hex8");
    } else if (typeof o === "string") {
      color = src_Color_Color.parse(o).toString("hex8");
    }
  } catch (err) {}

  this.color = color;
  this.$value.addStyle('--omt-color-value', color);
};

OMTColor.prototype.getHash = function () {
  return stringHashCode(this.color + '');
};

OMTColor.prototype.getRaw = function () {
  var color = src_Color_Color.parse(this.color);
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'span',
      style: {
        color: color.toString('hex6')
      },
      child: {
        text: this.color
      }
    }]
  };
};

/* harmony default export */ const type_OMTColor = ((/* unused pure expression or super */ null && (OMTColor)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTBool.js






/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTBool() {
  type_OMTBaseType.apply(this, arguments);
}

HTML5_OOP.mixClass(OMTBool, type_OMTBaseType);
type_OMTBaseType.classes.bool = OMTBool;
OMTBool.prototype.type = 'bool';

OMTBool.prototype.render = function () {
  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: CheckBoxInput,
    props: {
      readOnly: true
    }
  });
  this.$body.addChild(this.$value);
};

OMTBool.prototype.assign = function (o) {
  this.value = o;
  this.$value.checked = !!o;
};

/* harmony default export */ const type_OMTBool = ((/* unused pure expression or super */ null && (OMTBool)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTHtml.js




/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTHtml() {
  type_OMTBaseType.apply(this, arguments);
  this.value = null;
}

HTML5_OOP.mixClass(OMTHtml, type_OMTBaseType);
type_OMTBaseType.classes.html = OMTHtml;
OMTHtml.prototype.type = 'html';

OMTHtml.prototype.assign = function (o) {
  this.value = o;
  this.$body.clearChild();
  this.$value = ACore_({
    tag: 'div',
    props: {
      innerHTML: o
    }
  });
  this.$body.addChild(this.$value);
};

OMTHtml.prototype.getRaw = function () {
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'span',
      child: {
        text: this["export"]()
      }
    }]
  };
};

/* harmony default export */ const type_OMTHtml = ((/* unused pure expression or super */ null && (OMTHtml)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMDateTime.js





/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTDateTime() {
  type_OMTBaseType.apply(this, arguments);
}

HTML5_OOP.mixClass(OMTDateTime, type_OMTBaseType);
type_OMTBaseType.classes.datetime = OMTDateTime;
OMTDateTime.prototype.type = 'datetime';

OMTDateTime.prototype.render = function () {
  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: js_DateTimeInput.tag,
    "class": 'as-border-none',
    props: {
      readOnly: true
    }
  });
  if (this.descriptor.format) this.$value.format = this.descriptor.format;
  this.$body.addChild(this.$value);
};

OMTDateTime.prototype.assign = function (o) {
  this.value = o;
  this.$value.value = o;
};

OMTDateTime.prototype.getRaw = function () {
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'span',
      child: {
        text: this.$value.text
      }
    }]
  };
};

/* harmony default export */ const OMDateTime = ((/* unused pure expression or super */ null && (OMTDateTime)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMDate.js






/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTDate() {
  type_OMTBaseType.apply(this, arguments);
}

HTML5_OOP.mixClass(OMTDate, type_OMTBaseType);
type_OMTBaseType.classes.date = OMTDate;
OMTDate.prototype.type = 'date';

OMTDate.prototype.render = function () {
  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: js_DateInput2.tag,
    "class": 'as-border-none',
    props: {
      readOnly: true
    }
  });
  if (this.descriptor.format) this.$value.format = this.descriptor.format;
  this.$body.addChild(this.$value);
};

OMTDate.prototype.assign = function (o) {
  this.value = o;
  this.$value.value = o;
};

OMTDate.prototype.getRaw = function () {
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'span',
      child: {
        text: this.$value.text
      }
    }]
  };
};

/* harmony default export */ const OMDate = ((/* unused pure expression or super */ null && (OMTDate)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/type/OMTEnumOfPair.js





/***
 * @extends OMTBaseType
 * @constructor
 */

function OMTEnumOfPair() {
  type_OMTBaseType.apply(this, arguments);
  this.value = null;
}

HTML5_OOP.mixClass(OMTEnumOfPair, type_OMTBaseType);
type_OMTBaseType.classes["enum<pair>"] = OMTEnumOfPair;
OMTEnumOfPair.prototype.type = 'enum<pair>';

OMTEnumOfPair.prototype.render = function () {
  var _this = this;

  type_OMTBaseType.prototype.render.call(this);
  this.$value = ACore_({
    tag: js_DualSelectMenu.tag,
    "class": 'as-border-none',
    style: {
      height: '18px'
    },
    props: {
      readOnly: true
    }
  });
  this.$body.addChild(this.$value);

  if (this.descriptor.items && this.descriptor.items.then) {
    this.descriptor.items.then(function (items) {
      _this.$value.items = items;
    });
  } else {
    this.$value.items = this.descriptor.items;
  }
};

OMTEnumOfPair.prototype.assign = function (o) {
  this.value = o;
  this.$value.value = o;
};

OMTEnumOfPair.prototype.getRaw = function () {
  var text = this.$value.$item && this.$value.$item.innerText;
  return {
    child: [{
      tag: 'span',
      "class": 'as-omt-field-name',
      child: {
        text: (this.descriptor.displayName || this.descriptor.name || "ROOT") + ': '
      }
    }, {
      tag: 'span',
      child: {
        text: text
      }
    }]
  };
};

/* harmony default export */ const type_OMTEnumOfPair = ((/* unused pure expression or super */ null && (OMTEnumOfPair)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/ObjectMergeTool.js

















/***
 * @extends AElement
 * @constructor
 */

function ObjectMergeTool() {
  this._descriptors = null;
  this._objects = null;
  this.root = null;
  this.$body = ACore_$('.as-omt-body', this).on('mouseover', this.eventHandler.mouseOverNode);
  this.hoveringNode = null;
  /**
   * @type {Object[]}
   * @memberOf ObjectMergeTool#
   * @name objects
   */

  /**
   * @type {Object}
   * @memberOf ObjectMergeTool#
   * @name descriptors
   */
}

ObjectMergeTool.tag = 'ObjectMergeTool'.toLowerCase();

ObjectMergeTool.render = function () {
  return ACore_({
    "class": 'as-omt',
    extendEvent: ['change'],
    child: [{
      "class": 'as-omt-body'
    }]
  });
};

ObjectMergeTool.prototype._tryFlushData = function () {
  if (this.root && this.objects && this.objects.length > 0) {
    this.root.assign(this.objects[0]);
  }
};

ObjectMergeTool.prototype._findNode = function (targetElt) {
  while (targetElt && targetElt !== this) {
    if (targetElt.omtNode) return targetElt.omtNode;
    targetElt = targetElt.parentElement;
  }

  return null;
};

ObjectMergeTool.prototype.notifyChange = function () {
  this.emit('change', {
    type: 'change',
    target: this
  }, this);
};

ObjectMergeTool.property = {};
ObjectMergeTool.property.descriptor = {
  set: function set(value) {
    this._descriptor = value || {};
    this.$body.clearChild();
    this.root = type_OMTBaseType.make(this, null, this._descriptor);
    this.$body.addChild(this.root.elt);

    this._tryFlushData();
  },
  get: function get() {
    return this._descriptor;
  }
};
ObjectMergeTool.property.objects = {
  set: function set(value) {
    this._objects = value || [];

    this._tryFlushData();
  },
  get: function get() {
    return this._objects;
  }
};
ObjectMergeTool.property.data = {
  get: function get() {
    if (this.root) {
      return this.root["export"]();
    }

    if (this._objects && this.objects.length > 0) return this._objects[0];
    return null;
  }
};
/***
 * @type {{}}
 * @memberOf ObjectMergeTool#
 */

ObjectMergeTool.eventHandler = {};
/***
 * @this ObjectMergeTool
 * @param {MouseEvent} event
 */

ObjectMergeTool.eventHandler.mouseOverNode = function (event) {
  var node = this._findNode(event.target);

  if (this.hoveringNode === node) return;

  if (this.hoveringNode) {
    this.hoveringNode.elt.removeClass('as-hover');
  }

  this.hoveringNode = node;

  if (this.hoveringNode) {
    this.hoveringNode.elt.addClass('as-hover');
  }
};

absol_acomp_ACore.install(ObjectMergeTool);
/* harmony default export */ const objectmergetool_ObjectMergeTool = (ObjectMergeTool);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tokenizeinput.css
var tokenizeinput = __webpack_require__(7362);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TIHistory.js
/***
 * @param {TokenizeInput} elt
 * @constructor
 */
function TIHistory(elt) {
  this.elt = elt;
  this.stack = [];
  this.topIdx = -1;
}

TIHistory.prototype.commit = function (text, offset) {
  while (this.topIdx < this.stack.length - 1) {
    this.stack.pop();
  }

  var lastText = this.stack.length > 0 ? this.stack[this.stack.length - 1].text : null;

  if (text === lastText) {
    if (this.stack[this.stack.length - 1].offset !== offset) this.stack[this.stack.length - 1].offset = offset;
  } else {
    this.topIdx = this.stack.length;
    var record = {
      text: text,
      offset: offset
    };
    this.stack.push(record);
    this.elt.emit('change', {
      target: this,
      value: record.text,
      action: 'commit',
      record: record,
      type: 'change'
    }, this);
  }
};

TIHistory.prototype.undo = function () {
  if (this.topIdx <= 0) return;
  this.topIdx--;
  var record = this.stack[this.topIdx];
  this.elt.applyData(record.text, record.offset);
  this.elt.emit('change', {
    target: this,
    value: record.text,
    action: 'undo',
    record: record,
    type: 'change'
  }, this);
};

TIHistory.prototype.redo = function () {
  if (this.topIdx + 1 >= this.stack.length) return;
  this.topIdx++;
  var record = this.stack[this.topIdx];
  this.elt.applyData(record.text, record.offset);
  this.elt.emit('change', {
    target: this,
    value: record.text,
    action: 'redo',
    record: record,
    type: 'change'
  }, this);
};

/* harmony default export */ const tokenizeiput_TIHistory = (TIHistory);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TISelectionController.js


/****
 *
 * @param {TokenizeInput} elt
 * @constructor
 */

function TISelectionController(elt) {
  this.elt = elt;
  this.prevRange = null;
}

TISelectionController.prototype.onSelect = function () {
  var _this = this;

  var key = this.elt.prevKey && new Date().getTime() - this.elt.prevKey.time < 100 ? this.elt.prevKey.value : '';
  var sel = document.getSelection();
  var range = sel.getRangeAt(0);
  var direction = getSelectionRangeDirection(range);
  var newRange;

  var handleEmojiToken = function handleEmojiToken() {
    var startCtn = range.startContainer;
    var startOffset = range.startOffset;
    var startToken;
    var endCtn = range.endContainer;
    var endOffset = range.endOffset;
    var endToken;
    var changed = 0;
    var textData;
    var nextTextNode;
    var prevTextNode;
    var displayText;
    var newText;

    if (isTokenText(startCtn)) {
      startToken = startCtn.parentElement;
      displayText = startToken.getAttribute('data-display');
      textData = startCtn.data;

      if (range.collapsed) {
        if (textData.length < displayText.length) {
          prevTextNode = _this.getPrevTextNode(startCtn);

          if (!isText(prevTextNode)) {
            prevTextNode = document.createTextNode('');
            startToken.parentElement.insertBefore(prevTextNode, startToken);
          }

          startToken.remove();
          startCtn = prevTextNode;
          startOffset = prevTextNode.data.length;
          changed = 1;
        } else if (textData === displayText && startOffset < displayText.length && startOffset > 0) {
          if (key === 'arrowright' || !key) {
            startOffset = displayText.length;
            changed = 1;
          } else if (key === 'arrowleft') {
            startOffset = 0;
            changed = 1;
          } else if (key === 'mouseup') {
            startOffset = 0;
            endOffset = displayText.length;
            changed = 2;
          }
        } else if (textData.length > displayText.length) {
          if (startOffset === textData.length) {
            nextTextNode = startToken.nextSibling;

            if (!isText(nextTextNode)) {
              newText = document.createTextNode('');
              nextTextNode.parentElement.insertBefore(newText, nextTextNode);
              nextTextNode = newText;
            }

            nextTextNode.data = textData.substring(displayText.length) + nextTextNode.data;
            startCtn.data = displayText;
            startCtn = nextTextNode;
            startOffset = textData.length - displayText.length;
            changed = 1;
          } else {
            prevTextNode = startToken.previousSibling;

            if (!isText(prevTextNode)) {
              newText = document.createTextNode('');
              startToken.parentElement.insertBefore(newText, startToken);
              prevTextNode = newText;
            }

            prevTextNode.data += textData.substring(0, textData.length - displayText.length);
            startCtn.data = displayText;
            startCtn = prevTextNode;
            startOffset = startCtn.data.length;
          }
        }
      } else {
        if (startOffset > 0 && startOffset < displayText.length) {
          startOffset = 0;
          changed = 2;
        }
      }
    }

    if (isTokenText(endCtn)) {
      endToken = endCtn.parentElement;
      displayText = endToken.getAttribute('data-display');

      if (!range.collapsed) {
        if (endOffset < displayText.length) {
          endOffset = displayText.length;
          changed = 2;
        }
      }
    }

    if (changed > 0) {
      newRange = document.createRange();
      newRange.setStart(startCtn, startOffset);

      if (changed > 1) {
        newRange.setEnd(endCtn, endOffset);
      } else {
        //for saving
        endOffset = startOffset;
        endCtn = startCtn;
      }

      setSelectionRange(newRange, direction === 'backward');
    }

    var nextToken, nextText;

    if (isToken(endCtn.nextSibling)) {
      nextToken = endCtn.nextSibling;
      displayText = nextToken.getAttribute('data-display');
      nextText = getFirstTextNode(nextToken);
      if (!nextText || nextText.data !== displayText) nextToken.remove();
    }

    _this.prevRange = {
      startOffset: startOffset,
      startContainer: startCtn,
      endOffset: endOffset,
      endContainer: endCtn
    };
  };

  handleEmojiToken();
};

TISelectionController.prototype.getNextTextNode = function (current) {
  return findNextTextNode(this.elt, current);
};

TISelectionController.prototype.getPrevTextNode = function (current) {
  return findPrevTextNode(this.elt, current);
};

TISelectionController.prototype.setRangeByOffset = function (offset) {
  var start, end, direction;

  if (typeof offset === "number") {
    start = offset;
    end = offset;
    direction = 'forward';
  } else {
    start = offset.start;
    end = offset.end;
    direction = offset.direction || 'forward';
  }

  var startCtn = null;
  var startOffset = 0;
  var endCtn = null;
  var endOffset = 0;
  var st = '';
  var nodes = Array.prototype.slice.call(this.elt.childNodes);
  if (isNewLine(nodes[nodes.length - 1])) nodes.pop();
  var node;

  for (var i = 0; i < nodes.length; ++i) {
    node = nodes[i];

    if (isText(node)) {
      st += node.data;

      if (!startCtn && st.length >= start) {
        startCtn = node;
        startOffset = node.data.length - (st.length - start);
      }

      if (!endCtn && st.length >= end) {
        endCtn = node;
        endOffset = node.data.length - (st.length - end);
      }
    } else if (isToken(node)) {
      st += node.getAttribute('data-text');

      if (!startCtn && st.length >= start) {
        startCtn = getFirstTextNode(node);
        startOffset = startCtn.data.length;
      }

      if (!endCtn && st.length >= end) {
        endCtn = getFirstTextNode(node);
        endOffset = endCtn.data.length;
      }
    } else if (isNewLine(node)) {
      st += '\n';

      if (!startCtn && st >= start) {
        startCtn = this.elt;
        startOffset = i + 1;
      }

      if (!endCtn && st.length >= end) {
        endCtn = this.elt;
        endOffset = i + 1;
      }
    }
  }

  if (!startCtn) {
    if (nodes.length > 0) {
      node = nodes[nodes.length - 1];

      if (isNewLine(node)) {
        startCtn = this.elt;
        startOffset = nodes.length;
      } else if (isText(node)) {
        startCtn = node;
        startOffset = node.length;
      } else {
        startCtn = getLastTextNode(node);
        startOffset = node.length;
      }
    } else {
      startCtn = this.elt;
      startOffset = 0;
    }
  }

  if (!endCtn) {
    endCtn = startCtn;
    endOffset = startOffset;
  }

  this.prevRange = {
    startContainer: startCtn,
    startOffset: startOffset,
    endContainer: endCtn,
    endOffset: endOffset
  };
  var range = document.createRange();
  range.setStart(startCtn, startOffset);
  range.setEnd(endCtn, endOffset);
  setSelectionRange(range, direction === 'backward');
};

TISelectionController.prototype.getOffset = function (range) {
  range = range || this.elt.selectionCtrl.prevRange;
  if (!range) return null;
  var nodes = Array.prototype.slice.call(this.elt.childNodes);
  if (isNewLine(nodes[nodes.length - 1])) nodes.pop();
  var startCtn = range.startContainer;
  var startOffset = range.startOffset;
  var endCtn = range.endContainer;
  var endOffset = range.endOffset;

  if (startCtn === this.elt) {
    startCtn = this.elt.childNodes[startOffset - 1];
    startOffset = 1;
  } else if (isTokenText(startCtn)) {
    startCtn = startCtn.parentElement;
    if (startOffset > 0) startOffset = startCtn.getAttribute('data-text').length;
  }

  if (endCtn === this.elt) {
    endCtn = this.elt.childNodes[endOffset];
    endOffset = 1;
  } else if (isTokenText(endCtn)) {
    endCtn = endCtn.parentElement;
    if (endOffset > 0) endOffset = endCtn.getAttribute('data-text').length;
  }

  var start = undefined;
  var end = undefined;
  var direction = getSelectionRangeDirection(range);
  var st = '';
  var node;

  for (var i = 0; i < nodes.length; ++i) {
    node = nodes[i];

    if (isText(node)) {
      if (start === undefined && node === startCtn) {
        start = st.length + startOffset;
      }

      if (end === undefined && node === endCtn) {
        end = st.length + endOffset;
      }

      st += node.data;
    } else if (isToken(node)) {
      if (start === undefined && node === startCtn) {
        start = st.length + startOffset;
      }

      if (end === undefined && node === endCtn) {
        end = st.length + endOffset;
      }

      st += node.getAttribute('data-text');
    } else if (isNewLine(node)) {
      st += '\n';

      if (start === undefined && node === startCtn) {
        start = st.length;
      }

      if (end === undefined && node === endCtn) {
        end = st.length;
      }
    }
  }

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

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

  return {
    start: start,
    end: end,
    direction: direction
  };
};

/* harmony default export */ const tokenizeiput_TISelectionController = (TISelectionController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TokenizeHyperInput.js












var TokenizeHyperInput_textDelay = Detector_BrowserDetector.isSafari ? 100 : 1;
/***
 * @extends AElement
 * @constructor
 */

function TokenizeHyperInput() {
  this._tagMap = {};
  this.$br = ACore_$('br', this);
  this.historyCtrl = new tokenizeiput_TIHistory(this);
  this.textCtrl = new tokenizeiput_TITextController(this);
  this.selectionCtrl = new tokenizeiput_TISelectionController(this);
  this.prevKey = null;
  this.defineEvent(['pasteimg', 'pastefile', 'pastetext', 'change']);
  this.on('paste', this.eventHandler.paste);
  this.on('keydown', this.eventHandler.keydown);
  this.on('mouseup', this.eventHandler.mouseup);
  this.value = '';
  this.historyCtrl.commit('', 0);
  /***
   * @type {{}}
   * @name tagMap
   *@memberOf TokenizeHyperInput#
   *
   */
}

TokenizeHyperInput.tag = 'TokenizeHyperInput'.toLowerCase();

TokenizeHyperInput.render = function () {
  return ACore_({
    tag: 'pre',
    "class": 'as-tokenize-hyper-input',
    attr: {
      contenteditable: 'true',
      spellcheck: "false"
    },
    child: 'br'
  });
};

TokenizeHyperInput.prototype.applyData = function (text, offset) {
  this.textCtrl.applyData(text, offset);
};

TokenizeHyperInput.prototype.select = function (offset) {
  if (document.activeElement !== this) this.focus();
  this.applyData(this.value, offset);
};

TokenizeHyperInput.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;
  }
};

TokenizeHyperInput.prototype.undo = function () {
  this.historyCtrl.undo();
};

TokenizeHyperInput.prototype.redo = function () {
  this.historyCtrl.redo();
};

TokenizeHyperInput.prototype.commitChange = function (text, offset) {
  this.historyCtrl.commit(text, offset);
  this.emit('change', {}, this);
};

TokenizeHyperInput.prototype.waitToCommit = function (text, offset) {
  var thisInput = this;
  if (this._commitTimeout > 0) clearTimeout(this._commitTimeout);
  this._commitTimeout = setTimeout(function () {
    thisInput.commitChange(text, offset);
  }, TokenizeHyperInput_textDelay);
};

TokenizeHyperInput.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);
};

TokenizeHyperInput.prototype.getSelectPosition = function () {
  return this.selectionCtrl.getOffset();
};
/**
 * @type {TokenizeHyperInput}
 */


TokenizeHyperInput.eventHandler = {};

TokenizeHyperInput.eventHandler.paste = function (event) {
  var _this = this;

  var clipboardData = event.clipboardData || window.clipboardData;

  if (!clipboardData) {
    alert('Input not support browser without clipboard API!');
    return;
  }

  if (clipboardData.items) {
    var items = Array.prototype.slice.call(clipboardData.items);
    var imgItems = items.filter(function (item) {
      return item.type.indexOf('image') >= 0;
    });
    var fileItems = items.filter(function (item) {
      return item.type !== 'text/plain' && 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,
        originalEvent: event
      }, this);
    }

    if (fileItems.length > 0) {
      var files = fileItems.map(function (item) {
        return item.getAsFile();
      });
      this.emit('pastefile', {
        target: this,
        file: files[0],
        files: files,
        originalEvent: event
      }, this);
    }

    if (plainTextItems.length > 0) {
      var plainTextItem = plainTextItems[0]; //only one item

      plainTextItem.getAsString(function (text) {
        _this.textCtrl.insertText(text);
      });
    }

    event.preventDefault();
  } else {
    var text = event.clipboardData.getData('text/plain');

    if (text) {
      event.preventDefault();
      this.textCtrl.insertText(text);
    }
  }

  this.waitToCommit();
};

TokenizeHyperInput.eventHandler.keydown = function (event) {
  var _this2 = this;

  this.prevKey = {
    time: new Date().getTime(),
    value: keyboardEventToKeyBindingIdent(event)
  };
  setTimeout(function () {
    _this2.selectionCtrl.onSelect();

    _this2.waitToCommit();
  }, TokenizeHyperInput_textDelay);
};
/***
 * @this TokenizeHyperInput
 * @param event
 */


TokenizeHyperInput.eventHandler.mouseup = function (event) {
  this.prevKey = {
    time: new Date().getTime(),
    value: 'mouseup'
  };
  this.selectionCtrl.onSelect();
};

TokenizeHyperInput.property = {};
TokenizeHyperInput.property.value = {
  set: function set(value) {
    value = value || '';
    this.textCtrl.setText(value); // this.applyData(value, value.length);

    this.commitChange(value, value.length);
  },
  get: function get() {
    return this.textCtrl.getText();
  }
};
TokenizeHyperInput.property.disabled = {
  set: function set(value) {
    value = !!value;
    if (value === this.hasClass('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.hasClass('as-disabled');
  }
};
TokenizeHyperInput.property.tagList = {
  get: function get() {
    return getTagListInTextMessage(this.value);
  }
};
TokenizeHyperInput.property.tagMap = {
  set: function set(o) {
    var _this3 = this;

    o = o || {};
    this._tagMap = o;
    Array.prototype.forEach.call(this.childNodes, function (child) {
      var id, text;

      if (child.classList && child.classList.contains('as-tag-token')) {
        id = child.getAttribute('data-text') || '';
        id = id.substring(5, id.length - 1);
        text = _this3._tagMap[id];

        if (text) {
          child.getAttribute('data-display', '@' + text);
          child.firstChild.data = '@' + text;
        }
      }
    });
  },
  get: function get() {
    return this._tagMap;
  }
};
absol_acomp_ACore.install(TokenizeHyperInput);
/* harmony default export */ const tokenizeiput_TokenizeHyperInput = (TokenizeHyperInput);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SelectListBoxPropHandlers.js
var SelectListBoxPropHandlers = {};
SelectListBoxPropHandlers.enableSearch = {
  /***
   * @this SelectListBox
   * @param {boolean} value
   */
  set: function set(value) {
    if (value) this.addClass('as-enable-search');else this.removeClass('as-enable-search');
  },

  /***
   * @this SelectListBox
   */
  get: function get() {
    return this.hasClass('as-enable-search');
  }
};
SelectListBoxPropHandlers.items = {
  /***
   * @this SelectListBox
   * @param {{}} items
   */
  set: function set(items) {
    this.itemListCtrl.setItems(items);
  },
  get: function get() {
    return this.itemListCtrl.getItems();
  }
};
/* harmony default export */ const selectlistbox_SelectListBoxPropHandlers = (SelectListBoxPropHandlers);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SLBItemHolder.js



function SLBItemHolder(parent, data) {
  this.data = data;
  this.parent = parent;
  this._elt = null;
}

Object.defineProperty(SLBItemHolder.prototype, 'elt', {
  get: function get() {
    if (!this._elt) {
      this._elt = ACore_({
        tag: js_SelectListItem.tag,
        props: {
          data: this.data
        }
      });
    }

    return this._elt;
  }
});
/* harmony default export */ const selectlistbox_SLBItemHolder = (SLBItemHolder);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SLBModes.js




function SLBModeNormal(elt, items) {
  var _this = this;

  this.elt = elt;
  this.$scroller = this.elt.$scroller;
  this.$content = this.elt.$content;
  this.items = items;
  this.children = items.map(function (item) {
    return new selectlistbox_SLBItemHolder(_this, item);
  });
  this.children.forEach(function (child, i) {
    child.idx = i; // child.elt;
  });
  this.$pages = [];
}

SLBModeNormal.prototype._getPageElt = function (idx) {
  if (this.$pages[idx]) return this.$pages[idx];

  while (this.$pages.length <= idx) {
    this.$pages.push(undefined);
  }

  var children = this.children.slice(idx * 50, idx * 50 + 50);

  var pageElt = ACore_({
    "class": 'as-select-list-box-page',
    style: {
      top: 20 * idx * 50 + 'px'
    },
    child: children.map(function (child) {
      return child.elt;
    })
  });

  this.$pages[idx] = pageElt;
  return pageElt;
};

SLBModeNormal.prototype._getPageCount = function () {
  return Math.ceil(this.items.length / 50);
};

SLBModeNormal.prototype.onStart = function () {
  this.elt.$content.addStyle('height', this.items.length * 20 + 'px'); // var n = this._getPageCount();
  // for (var i =0; i < n; ++i){
  //     this.$content.addChild(this._getPageElt(i));
  // }

  this.updateListView();
};

SLBModeNormal.prototype.onStop = function () {};

SLBModeNormal.prototype.updateListView = function () {
  var _this2 = this;

  var maxHeight = Math.max(4096, getScreenSize().height);
  var startIdx = Math.floor(this.$scroller.scrollTop / 1000) - 1;
  var endIdx = startIdx + Math.ceil(maxHeight / 1000) + 1;
  startIdx = Math.max(0, startIdx);
  endIdx = Math.min(this._getPageCount(), endIdx);
  var needViewPages = Array(endIdx - startIdx).fill(null).map(function (u, i) {
    return _this2._getPageElt(startIdx + i);
  });
  Array.prototype.forEach.call(this.$content.childNodes, function (elt) {
    if (needViewPages.indexOf(elt) < 0) {
      elt.remove();
    }
  });
  needViewPages.forEach(function (elt) {
    if (!elt.parentElement) {
      _this2.$content.addChild(elt);
    }
  });
};

function SLBModeSearch(elt, items) {
  this.items = items;
}
HTML5_OOP.mixClass(SLBModeSearch, SLBModeNormal); // SLBModeSearch.prototype.onStart
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SLBItemListController.js






/***
 * @extends ListDictionary
 * @param {SelectListBox} elt
 * @constructor
 */

function SLBItemListController(elt) {
  this.elt = elt;
  this.items = [];
  this.elt.$scroller.on('scroll', this.updateListView.bind(this));
}

HTML5_OOP.mixClass(SLBItemListController, ListDictionary);
SLBItemListController.itemHeight = 20;
SLBItemListController.preLoadN = 3;
SLBItemListController.prototype.toLoadNextY = 200;

SLBItemListController.prototype.getItems = function () {
  return copySelectionItemArray(this.items);
};

SLBItemListController.prototype.setItems = function (items) {
  this.items = copySelectionItemArray(items || []);
  var mode = new SLBModeNormal(this.elt, this.items);
  this.elt.modes.normal = mode;
  this.elt.mode = mode;
  mode.onStart();
};

SLBItemListController.prototype.updateListView = function () {
  this.elt.mode.updateListView();
};

/* harmony default export */ const selectlistbox_SLBItemListController = (SLBItemListController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/SelectListBox.js




/***
 * @extends AElement
 * @constructor
 */

function SelectListBox_SelectListBox() {
  this.$box = this;
  this.$content = $('.as-select-list-box-content', this);
  this.$scroller = $('.as-select-list-box-scroller', this);
  this.itemListCtrl = new selectlistbox_SLBItemListController(this);
  this.modes = {
    normal: new SLBModeNormal(this, []),
    search: null
  };
  this.mode = this.modes.normal;
}

SelectListBox_SelectListBox.tag = 'selectlistbox_v2'.toLowerCase();

SelectListBox_SelectListBox.render = function () {
  return ACore_({
    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_SelectListBox.prototype.preLoadN).fill('.as-select-list-box-page')
      }]
    }, 'attachhook.as-dom-signal'],
    props: {
      anchor: [1, 6, 2, 5]
    }
  });
};

SelectListBox_SelectListBox.property = selectlistbox_SelectListBoxPropHandlers;
absol_acomp_ACore.install('selectlistbox_v2', SelectListBox_SelectListBox);
/* harmony default export */ const selectlistbox_SelectListBox = (SelectListBox_SelectListBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/pathmenu.css
var pathmenu = __webpack_require__(5945);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PathMenu.js
function PathMenu_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { PathMenu_typeof = function _typeof(obj) { return typeof obj; }; } else { PathMenu_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return PathMenu_typeof(obj); }





/***
 * @extends AElement
 * @constructor
 */

function PathMenu() {
  this._path = [];
  this.$items = [];
}

PathMenu.tag = 'PathMenu'.toLowerCase();

PathMenu.render = function () {
  return ACore_({
    attr: {
      tabindex: '1'
    },
    extendEvent: ['press', 'change'],
    "class": 'as-path-menu'
  });
};

PathMenu.prototype._makeItem = function (data, idx) {
  var self = this;

  var button = ACore_({
    "class": ['as-ribbon-split-button', 'as-path-menu-item'],
    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: (data.name || data.text || '') + ''
          }
        }
      }, {
        tag: 'button',
        attr: {
          'tabindex': '-1'
        },
        "class": 'as-ribbon-split-button-extend',
        child: ['span.mdi.mdi-chevron-right']
      }]
    }
  });

  button.on('mouseenter', function () {
    if (document.activeElement && HTML5_AElement.prototype.isDescendantOf.call(document.activeElement, self) && self.hasClass('as-opening-item')) {
      if (button.quickMenu) button.quickMenu.open();
    }
  });
  var extendIconElt = ACore_$('.as-ribbon-split-button-extend .mdi', button);
  var primaryBtn = ACore_$('.as-ribbon-split-button-primary', button).on('click', function () {
    self.emit('press', {
      target: self,
      pathItem: data,
      index: idx
    }, self);
  }); //as-ribbon-split-button-icon

  var icon = null;

  if (data.icon) {
    icon = ACore_(data.icon);
  } else if (data.iconSrc) {
    icon = ACore_({
      tag: 'img',
      props: {
        src: data.iconSrc
      }
    });
  }

  if (icon) {
    if (icon.parentElement) icon = ACore_$(icon.cloneNode(true));
    icon.addClass('as-ribbon-split-button-icon');
    primaryBtn.addChildBefore(icon, primaryBtn.firstChild);
  }

  var quickTrigger = ACore_$('.as-ribbon-split-button-extend', button);

  if (data.items && data.items.length > 0) {
    button.quickMenu = js_QuickMenu.toggleWhenClick(quickTrigger, {
      getMenuProps: function getMenuProps() {
        return {
          items: data.items.map(function (it, menuIndex) {
            if (typeof it === "string") return it;

            if (PathMenu_typeof(it) === "object") {
              if (it.icon || it.iconSrc || it.name || it.text) {
                return {
                  text: it.name || it.text,
                  menuIndex: menuIndex,
                  icon: it.iconSrc ? {
                    tag: 'img',
                    props: {
                      src: it.iconSrc
                    }
                  } : it.icon || undefined,
                  extendStyle: it.extendStyle || {},
                  extendClass: it.extendClass || []
                };
              }
            }

            return it;
          })
        };
      },
      anchor: [1, 6, 0, 7],
      onOpen: function onOpen() {
        self.addClass('as-opening-item');
        extendIconElt.addClass('mdi-rotate-90');
      },
      onClose: function onClose() {
        self.removeClass('as-opening-item');
        extendIconElt.removeClass('mdi-rotate-90');
      },
      onSelect: function onSelect(item) {
        var dataItem = data.items[item.menuIndex];
        self.emit('change', {
          target: self,
          pathItem: data,
          item: dataItem,
          index: idx
        }, self);
        button.removeClass('as-open');
      }
    });
  } else {
    button.addClass('as-has-no-item');
  }

  return button;
};

PathMenu.property = {};
PathMenu.property.path = {
  set: function set(path) {
    var _this = this;

    this._path = path || [];
    this.$items.forEach(function (elt) {
      return elt.remove();
    });
    this.$items = this._path.map(function (it, i) {
      return _this._makeItem(it, i);
    });
    this.addChild(this.$items);
  },
  get: function get() {
    return this._path;
  }
};
absol_acomp_ACore.install(PathMenu);
/* harmony default export */ const js_PathMenu = (PathMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MCTMPropHandlers.js


var MCTMPropHandlers = {};
MCTMPropHandlers.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
MCTMPropHandlers.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
MCTMPropHandlers.items = {
  set: function set(items) {
    this.$box.items = items;
    this.tokenCtrl.updateFromViewValues();
  },
  get: function get() {
    return this.$box.items;
  }
};
MCTMPropHandlers.values = {
  set: function set(values) {
    this.$box.values = values || [];
    this.tokenCtrl.updateFromViewValues();
  },
  get: function get() {
    if (this.isFocus) {
      return this.savedValues;
    } else {
      return this.$box.values;
    }
  }
};
MCTMPropHandlers.leafOnly = {
  set: function set(value) {
    if (!!value === this.hasClass('as-leaf-only')) return;

    if (value) {
      this.addClass('as-leaf-only');
      this.$box.leafOnly = true;
    } else {
      this.removeClass('as-leaf-only');
      this.$box.leafOnly = false;
    }

    this.tokenCtrl.updateFromViewValues();
  },
  get: function get() {
    return this.hasClass('as-leaf-only');
  }
};
MCTMPropHandlers.isFocus = {
  /***
   * @this MultiCheckTreeMenu
   * @param value
   */
  set: function set(value) {
    if (value && (this.disabled || this.readOnly)) return;
    if (!!value === this.hasClass('as-focus')) return;

    if (value) {
      this.savedValues = this.$box.values;
      this.addClass('as-focus');
      this.boxCtrl.onFocus();
    } else {
      this.removeClass('as-focus');
      this.boxCtrl.onBlur();
      var newValues = this.values;

      if (!arrayCompare(this.savedValues, newValues)) {
        this.notifyChange();
      } else {
        this.tokenCtrl.updateFromViewValues();
      }

      this.savedValues = this.values;
    }
  },
  get: function get() {
    return this.hasClass('as-focus');
  }
};
MCTMPropHandlers.enableSearch = {
  set: function set(value) {
    this.$box.enableSearch = value;
  },
  get: function get() {
    return this.$box.enableSearch;
  }
};
/* harmony default export */ const multichecktreemenu_MCTMPropHandlers = (MCTMPropHandlers);
/**************************** ADAPT OLD VERSION **********************************************************************/

MCTMPropHandlers.$checkTreeBox = {
  get: function get() {
    return this.$box;
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreeleafmenu/MCTLMPropHandler.js

var MCTLMPropHandler = Object.assign({}, multichecktreemenu_MCTMPropHandlers);
MCTLMPropHandler.leafOnly = {
  value: true,
  enumerable: true
};
/* harmony default export */ const multichecktreeleafmenu_MCTLMPropHandler = (MCTLMPropHandler);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MMCTMBoxController.js
/***
 *
 * @param elt
 * @constructor
 */
function MMCTMBoxController(elt) {
  this.elt = elt;
  this.$box = elt.$box;

  for (var key in this) {
    if (key.startsWith('ev_')) this[key] = this[key].bind(this);
  }

  this.elt.on('click', this.ev_click);
  this.$box.on('close', this.ev_close);
  this.$box.on('cancel', this.ev_cancel);
  this.$box.on('change', this.ev_boxValuesChange);
}

MMCTMBoxController.prototype.onFocus = function () {
  this.$box.addTo(document.body);
  this.elt.off('click', this.ev_click);
};

MMCTMBoxController.prototype.onBlur = function () {
  var _this = this;

  this.$box.remove();
  setTimeout(function () {
    _this.elt.on('click', _this.ev_click);
  }, 50);
};

MMCTMBoxController.prototype.ev_click = function (event) {
  if (!this.elt.disabled && !this.elt.readOnly && (event.target === this.elt || event.target === this.elt.$itemCtn)) {
    this.elt.isFocus = true;
  }
};

MMCTMBoxController.prototype.ev_close = function (event) {
  this.elt.isFocus = false;
};

MMCTMBoxController.prototype.ev_cancel = function (event) {
  this.$box.values = this.elt.savedValues;
  this.elt.isFocus = false;
};

MMCTMBoxController.prototype.ev_boxValuesChange = function () {
  this.elt.tokenCtrl.updateFromViewValues();
};

/* harmony default export */ const multichecktreemenu_MMCTMBoxController = (MMCTMBoxController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MCTMTokenController.js



/****
 *
 * @param {MultiCheckTreeMenu} elt
 * @constructor
 */

function MCTMTokenController(elt) {
  this.elt = elt;
  this.$box = elt.$box;
  this.$itemCtn = elt.$itemCtn;
}

MCTMTokenController.prototype.updateFromViewValues = function () {
  var values = this.$box.viewValues;
  this.requireItems(values.length);
  var holder;

  for (var i = 0; i < values.length; ++i) {
    holder = this.$box.getHolderByValue(values[i]);
    this.$itemCtn.childNodes[i].data = holder.data;
  }
};

MCTMTokenController.prototype.requireItems = function (count) {
  while (this.$itemCtn.childNodes.length < count) {
    this.$itemCtn.addChild(this.makeToken());
  }

  while (this.$itemCtn.childNodes.length > count) {
    this.$itemCtn.lastChild.remove();
  }
};

MCTMTokenController.prototype.removeValue = function (targetValue) {
  this.$box.select(targetValue, false);
  this.updateFromViewValues();

  if (!this.elt.isFocus) {
    this.elt.notifyChange();
  }
};

MCTMTokenController.prototype.makeToken = function () {
  var ctrl = this;
  return ACore_({
    tag: js_SelectBoxItem,
    on: {
      close: function close() {
        ctrl.removeValue(this.value);
      }
    }
  });
};

/* harmony default export */ const multichecktreemenu_MCTMTokenController = (MCTMTokenController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreemenu/MultiCheckTreeMenu.js





/***
 * @extends AElement
 * @constructor
 */

function MultiCheckTreeMenu_MultiCheckTreeMenu() {
  this.$box = ACore_({
    tag: this.classes.Box
  });
  this.$itemCtn = ACore_$('.as-multi-select-menu-item-ctn', this);
  this.boxCtrl = new multichecktreemenu_MMCTMBoxController(this);
  this.tokenCtrl = new multichecktreemenu_MCTMTokenController(this); //mobile only
}

MultiCheckTreeMenu_MultiCheckTreeMenu.tag = 'MultiCheckTreeMenu'.toLowerCase();
MultiCheckTreeMenu_MultiCheckTreeMenu.prototype.classes = {
  Box: checktreebox_MCheckTreeBox
};

MultiCheckTreeMenu_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_MultiCheckTreeMenu.prototype.notifyChange = function () {
  this.emit('change', {
    type: 'change',
    target: this
  }, this);
};

MultiCheckTreeMenu_MultiCheckTreeMenu.property = multichecktreemenu_MCTMPropHandlers;
absol_acomp_ACore.install(MultiCheckTreeMenu_MultiCheckTreeMenu);
/* harmony default export */ const multichecktreemenu_MultiCheckTreeMenu = (MultiCheckTreeMenu_MultiCheckTreeMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CTLBPropHandlers.js

var CTLBPropHandlers = Object.keys(checktreebox_CTBPropHandlers).reduce(function (ac, key) {
  ac[key] = Object.assign({}, checktreebox_CTBPropHandlers[key]);
  return ac;
}, {});
CTLBPropHandlers.leafOnly = {
  enumerable: true,
  value: true
};
/* harmony default export */ const checktreeleafbox_CTLBPropHandlers = (CTLBPropHandlers);
/***
 *
 * @type {boolean}
 * @name enableSearch
 * @memberOf MCheckTreeBox#
 */
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CTLIPropHandlers.js

var CTLIPropHandlers = Object.keys(checktreebox_CTIPropHandlers).reduce(function (ac, key) {
  ac[key] = Object.assign({}, checktreebox_CTIPropHandlers[key]);
  return ac;
}, {});
/* harmony default export */ const checktreeleafbox_CTLIPropHandlers = (CTLIPropHandlers);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CheckTreeLeafItem.js




/***
 * @extends AElement
 * @constructor
 */

function CheckTreeLeafItem() {
  this._data = null;
  this._status = 'none';
  this.$text = ACore_$('.am-check-tree-item-text', this).firstChild;
  this.$desc = ACore_$('.am-check-tree-item-desc', this).firstChild;
  this.$iconCtn = ACore_$('.am-check-tree-item-icon-ctn', this);
  this.$checkbox = ACore_$('checkboxinput', this).on('change', this.eventHandler.checkboxChange);
  this.addEventListener('click', this.eventHandler.click);
}

HTML5_OOP.mixClass(CheckTreeLeafItem, MCheckTreeItem);
CheckTreeLeafItem.tag = 'CheckTreeLeafItem'.toLowerCase();

CheckTreeLeafItem.render = function () {
  return ACore_({
    extendEvent: ['checkedchange', 'click', 'statuschange'],
    "class": ['am-check-tree-leaf-item', 'am-check-tree-item', 'am-dropdown-box-item'],
    child: [{
      "class": 'am-check-tree-item-toggle-ctn',
      child: 'toggler-ico'
    }, {
      "class": 'am-check-tree-item-icon-ctn'
    }, {
      "class": 'am-check-tree-item-checkbox-ctn',
      child: 'checkboxinput'
    }, {
      "class": 'am-check-tree-item-text',
      child: {
        text: ''
      }
    }, {
      "class": 'am-check-tree-item-desc',
      child: {
        text: ''
      }
    }]
  });
};

CheckTreeLeafItem.eventHandler = Object.assign({}, MCheckTreeItem.eventHandler);
CheckTreeLeafItem.property = checktreeleafbox_CTLIPropHandlers;
/***
 * @name data
 * @memberOf CheckTreeLeafItem#
 */

/***.
 * @name text
 * @type {string}
 * @memberOf CheckTreeLeafItem#
 */

/***
 * @name desc
 * @type {string}
 * @memberOf CheckTreeLeafItem#
 */

/***
 * @name value
 * @memberOf CheckTreeLeafItem#
 */

/* harmony default export */ const checktreeleafbox_CheckTreeLeafItem = (CheckTreeLeafItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/CTLBModes.js


/***
 * @extends CTBModeNormal
 * @param {MCheckTreeBox} elt
 * @param {[]} items
 * @constructor
 */

function CTLBModeNormal(elt, items) {
  CTBModeNormal.apply(this, arguments);
}
HTML5_OOP.mixClass(CTLBModeNormal, CTBModeNormal);

CTLBModeNormal.prototype.getViewValues = function () {
  var values = [];
  this.children.forEach(function visit(node) {
    if (node.selected === 'all' && node.data.isLeaf) {
      values.push(node.data.value);
    } else if (node.children) {
      node.children.forEach(visit);
    }
  });
  return values;
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreeleafbox/MCheckTreeLeafBox.js






/***
 * @extends MCheckTreeBox
 * @constructor
 */

function MCheckTreeLeafBox() {
  checktreebox_MCheckTreeBox.apply(this, arguments);
  this.$box.addClass('as-check-tree-leaf-box');
}

HTML5_OOP.mixClass(MCheckTreeLeafBox, checktreebox_MCheckTreeBox);
MCheckTreeLeafBox.tag = 'MCheckTreeLeafBox'.toLowerCase();
MCheckTreeLeafBox.prototype.classes = Object.assign({}, checktreebox_MCheckTreeBox.prototype.classes, {
  ItemElement: checktreeleafbox_CheckTreeLeafItem,
  ModeNormal: CTLBModeNormal
});

MCheckTreeLeafBox.render = function () {
  return checktreebox_MCheckTreeBox.render();
};

MCheckTreeLeafBox.property = checktreeleafbox_CTLBPropHandlers;
MCheckTreeLeafBox.eventHandler = Object.assign({}, checktreebox_MCheckTreeBox.eventHandler);
absol_acomp_ACore.install(MCheckTreeLeafBox);
/* harmony default export */ const checktreeleafbox_MCheckTreeLeafBox = (MCheckTreeLeafBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreeleafmenu/MultiCheckTreeLeafMenu.js






function MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu() {
  multichecktreemenu_MultiCheckTreeMenu.apply(this, arguments);
}

HTML5_OOP.mixClass(MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu, multichecktreemenu_MultiCheckTreeMenu);
MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.tag = 'MultiCheckTreeLeafMenu'.toLowerCase();
MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.prototype.classes = {
  Box: checktreeleafbox_MCheckTreeLeafBox
};

MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.render = function () {
  return multichecktreemenu_MultiCheckTreeMenu.render().addClass('as-multi-check-tree-leaf-menu');
};

MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.property = multichecktreeleafmenu_MCTLMPropHandler;
absol_acomp_ACore.install(MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu);
/* harmony default export */ const multichecktreeleafmenu_MultiCheckTreeLeafMenu = (MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafmenu/SelectTreeLeafMenu.js

/* harmony default export */ const selecttreeleafmenu_SelectTreeLeafMenu = ((/* unused pure expression or super */ null && (SelectTreeLeafMenu)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/DSBPropHandlers.js
var DSBPropHandlers = {};
DSBPropHandlers.items = {
  set: function set(items) {
    this.itemListCtrl.setItems(items);

    if ('savedValue' in this) {
      this.modes.normal.setValue(this.savedValue, this.strictValue);
    }
  },
  get: function get() {
    return this.itemListCtrl.getItems();
  }
};
DSBPropHandlers.value = {
  set: function set(value) {
    this.savedValue = value;
    this.modes.normal.setValue(value, this.strictValue);
  },
  get: function get() {
    return this.modes.normal.getValue(this.strictValue);
  }
};
DSBPropHandlers.selectedItem = {
  get: function get() {
    return this.modes.normal.getSelectedItem();
  }
};
DSBPropHandlers.strictValue = {
  set: function set(value) {
    if (value) {
      this.$box.addClass('as-strict-value');
    } else {
      this.$box.removeClass('as-strict-value');
    }
  },
  get: function get() {
    return this.$box.hasClass('as-strict-value');
  }
};
DSBPropHandlers.enableSearch = {
  set: function set(value) {
    if (value) {
      this.$box.addClass('as-enable-search');
    } else {
      this.$box.removeClass('as-enable-search');
    }
  },
  get: function get() {
    return this.$box.hasClass('as-enable-search');
  }
};
/* harmony default export */ const dualselectbox_DSBPropHandlers = (DSBPropHandlers);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/DSBModes.js




function DSBModeNormal(elt, items) {
  var _this = this;

  this.items = items;
  this.value = [undefined, undefined];
  this.elt = elt;
  this.$lists = this.elt.$lists;
  this.$leftItems = items.map(function (item) {
    return _this._makeLeftItem(item);
  });
  this.$leftItemDict = this.$leftItems.reduce(function (ac, cr) {
    ac[keyStringOf(cr.itemData.value)] = cr;
    return ac;
  }, {});
  this.$rightItemDict = {};
  this.$rightItems = [];
  this.rightListDict = {};

  if (items.length > 0) {
    this.viewRight(items[0].value);
  }

  this.$selectedLeft = null;
  this.$selectedRight = null;
}

DSBModeNormal.prototype._makeLeftItem = function (item) {
  var self = this;

  var itemElt = ACore_({
    "class": 'absol-selectlist-item',
    attr: {
      'data-key': keyStringOf(item.value)
    },
    child: {
      tag: 'span',
      "class": 'absol-selectlist-item-text',
      child: {
        text: item.text
      }
    },
    on: {
      click: function click() {
        self.selectLeft(item.value);
        self.viewToSelected();
        self.elt.notifyChange();
      }
    }
  });

  itemElt.itemData = item;
  return itemElt;
};

DSBModeNormal.prototype._makeRightItem = function (leftItem, item) {
  var self = this;

  var itemElt = ACore_({
    "class": 'absol-selectlist-item',
    attr: {
      'data-key': keyStringOf(item.value)
    },
    child: {
      tag: 'span',
      "class": 'absol-selectlist-item-text',
      child: {
        text: item.text
      }
    },
    on: {
      click: function click() {
        self.selectLeft(leftItem.value);
        self.selectRight(item.value);
        self.elt.notifyChange();
      }
    }
  });

  itemElt.itemData = item;
  return itemElt;
};

DSBModeNormal.prototype.selectLeft = function (leftValue) {
  var itemElt = this.$leftItemDict[keyStringOf(leftValue)];
  if (!itemElt) return false;
  if (this.$selectedLeft === itemElt) return true;

  if (this.$selectedLeft) {
    this.$selectedLeft.removeClass('as-selected');
    this.$selectedLeft = null;
  }

  itemElt.addClass('as-selected');
  this.$selectedLeft = itemElt;
  this.value[0] = leftValue;
  this.viewRight(leftValue);
  var ok = this.selectRight(this.value[1]);
  var sItems;

  if (!ok) {
    sItems = itemElt.itemData.items;
    if (sItems && sItems.length > 0) this.selectRight(sItems[0].value);
  }

  return true;
};

DSBModeNormal.prototype.viewRight = function (leftValue) {
  var _this2 = this;

  var key = keyStringOf(leftValue);
  var holder = this.rightListDict[key];
  var items;
  var leftItem;

  if (!holder) {
    leftItem = this.$leftItemDict[key] && this.$leftItemDict[key].itemData;
    items = leftItem && leftItem.items;

    if (items) {
      holder = {};
      holder.list = items.map(function (sItem) {
        return _this2._makeRightItem(leftItem, sItem);
      });
      holder.dict = holder.list.reduce(function (ac, cr) {
        ac[keyStringOf(cr.itemData.value)] = cr;
        return ac;
      }, {});
      this.rightListDict[key] = holder;
    }
  }

  if (holder) {
    if (this.$rightItems !== holder.list) {
      this.$rightItems = holder.list;
      this.$rightItemDict = holder.dict;
      this.$lists[1].clearChild().addChild(this.$rightItems);
    }
  } else {
    this.$lists[1].clearChild();
    this.$rightItems = null;
    this.$rightItemDict = {};
  }
};

DSBModeNormal.prototype.selectRight = function (value) {
  var itemElt = this.$rightItemDict[keyStringOf(value)];
  if (!itemElt) return false;
  if (this.$selectedRight === itemElt) return true;

  if (this.$selectedRight) {
    this.$selectedRight.removeClass('as-selected');
    this.$selectedRight = null;
  }

  itemElt.addClass('as-selected');
  this.$selectedRight = itemElt;
  this.value[1] = value;
  return true;
};

DSBModeNormal.prototype.onStart = function () {
  this.$lists[0].clearChild().addChild(this.$leftItems);
  this.$lists[1].clearChild().addChild(this.$rightItems);
  this.viewToSelected();
};

DSBModeNormal.prototype.onStop = noop;

DSBModeNormal.prototype.setValue = function (value, strictValue) {
  if (!(value instanceof Array)) {
    value = [undefined, undefined];
  }

  while (value.length < 2) {
    value.push(undefined);
  }

  while (value.length > 2) {
    value.pop();
  }

  var leftOK = this.selectLeft(value[0]);

  if (!leftOK && strictValue) {
    if (this.items.length > 0) {
      leftOK = this.selectLeft(this.items[0].value);
    }
  }

  if (leftOK) this.viewRight(this.value[0]);
  var rightOK = this.selectRight(value[1]);

  if (!rightOK && strictValue) {
    if (this.$selectedLeft && this.$selectedLeft.itemData.items && this.$selectedLeft.itemData.items.length > 0) {
      rightOK = this.selectRight(this.$selectedLeft.itemData.items[0].value);
    }
  }

  this.viewToSelected();
};

DSBModeNormal.prototype.getValue = function (strictValue) {
  var value = this.value.slice();
  if (!strictValue) return value;

  if (!this.$leftItemDict[keyStringOf(value[0])]) {
    value[0] = this.items[0] && this.items[0].value;
  }

  var rightHolder = this.rightListDict[keyStringOf(value[0])];

  if (rightHolder) {
    if (!rightHolder.dict[keyStringOf(value[1])]) {
      if (rightHolder.list.length > 0) {
        value[1] = rightHolder.list[0].itemData.value;
      }
    }
  }

  return value;
};

DSBModeNormal.prototype.getSelectedItem = function () {
  var value = this.value.slice();
  var item = [null, null];

  if (this.$leftItemDict[keyStringOf(value[0])]) {
    item[0] = this.$leftItemDict[keyStringOf(value[0])].itemData;
  }

  var rightHolder = this.rightListDict[keyStringOf(value[0])];

  if (rightHolder) {
    if (rightHolder.dict[keyStringOf(value[1])]) {
      item[1] = rightHolder.dict[keyStringOf(value[1])].itemData;
    }
  }

  return item;
};

DSBModeNormal.prototype.viewToSelected = function () {
  var _this3 = this;

  setTimeout(function () {
    if (_this3.$selectedLeft) {
      vScrollIntoView(_this3.$selectedLeft);
    }

    if (_this3.$selectedRight) {
      vScrollIntoView(_this3.$selectedRight);
    }
  }, 50);
};
/***
 * @extends DSBModeNormal
 * @param elt
 * @param items
 * @constructor
 */


function DSBModeSearch(elt, items) {
  DSBModeNormal.apply(this, arguments);
}
HTML5_OOP.mixClass(DSBModeSearch, DSBModeNormal);
delete DSBModeSearch.prototype.getValue;
delete DSBModeSearch.prototype.setValue;

DSBModeSearch.prototype.onStart = function () {
  DSBModeNormal.prototype.onStart.call(this);
  this.$lists[0].scrollTop = 0;
  this.$lists[1].scrollTop = 0;

  if (this.$selectedLeft) {
    this.$selectedLeft.removeClass('as-selected');
    this.$selectedLeft = null;
  }

  if (this.$selectedRight) {
    this.$selectedRight.removeClass('as-selected');
    this.$selectedRight = null;
  }
};

DSBModeSearch.prototype.updateSelectedFromRef = function () {
  var normalMode = this.elt.modes.normal;

  if (normalMode.$selectedLeft) {
    this.selectLeft(normalMode.$selectedLeft.itemData.value, true);
  }

  if (normalMode.$selectedRight) {
    this.selectRight(normalMode.$selectedRight.itemData.value, true);
  }
};

DSBModeSearch.prototype.selectLeft = function (leftValue, viewOnly) {
  if (!viewOnly) this.elt.modes.normal.selectLeft(leftValue);
  var itemElt = this.$leftItemDict[keyStringOf(leftValue)];
  if (this.$selectedLeft === itemElt) return true;

  if (this.$selectedLeft) {
    this.$selectedLeft.removeClass('as-selected');
    this.$selectedLeft = null;
  }

  if (!itemElt) return false;
  itemElt.addClass('as-selected');
  this.$selectedLeft = itemElt;
  this.viewRight(leftValue);
  var sItems = itemElt.itemData.items;
  if (sItems && sItems.length > 0 && !viewOnly) this.selectRight(sItems[0].value);
  return true;
};

DSBModeSearch.prototype.selectRight = function (value, viewOnly) {
  if (!viewOnly) this.elt.modes.normal.selectRight(value);
  var itemElt = this.$rightItemDict[keyStringOf(value)];
  if (this.$selectedRight === itemElt) return true;

  if (this.$selectedRight) {
    this.$selectedRight.removeClass('as-selected');
    this.$selectedRight = null;
  }

  if (!itemElt) return false;
  itemElt.addClass('as-selected');
  this.$selectedRight = itemElt;
  return true;
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/MDSBItemListController.js




function MDSBItemListController(elt) {
  this.elt = elt;
  this.items = [];
  this._searchItems = [];
  this._searchCache = {};
}

MDSBItemListController.prototype.setItems = function (items) {
  this.items = copySelectionItemArray(items);
  this._searchItems = prepareSearchForList(copySelectionItemArray(this.items));
  this._searchCache = {};
  var mode = new DSBModeNormal(this.elt, this.items);
  this.elt.modes.normal = mode;
  this.elt.mode = mode;
  mode.onStart();
};

MDSBItemListController.prototype.getItems = function () {
  return copySelectionItemArray(this.items);
};

MDSBItemListController.prototype.makeSearch = function (query) {
  if (this._searchCache[query]) return this._searchCache[query].resetAndGet();
  var items = this._searchItems;
  var queryItem = prepareSearchForItem({
    text: query
  });
  var maxScore = 0;
  var holders = items.map(function (item) {
    var h = {
      item: item,
      itemScore: calcItemMatchScore(queryItem, item)
    };
    maxScore = Math.max(maxScore, h.itemScore);
    var childMaxScore = 0;

    if (item.items && item.items.length > 0) {
      h.child = item.items.map(function (cItem) {
        var cItemScore = calcItemMatchScore(queryItem, cItem);
        maxScore = Math.max(maxScore, cItemScore);
        childMaxScore = Math.max(childMaxScore, cItemScore);
        return {
          item: cItem,
          itemScore: cItemScore
        };
      });
      h.childScore = childMaxScore;
    }

    return h;
  });
  holders.sort(function (a, b) {
    return -Math.max(a.itemScore, a.childScore) + Math.max(b.itemScore, b.childScore);
  });
  var midScore = maxScore / 2;
  holders = holders.filter(function (holder) {
    return Math.max(holder.itemScore, holder.childScore) >= midScore;
  });
  var searchingResultItems = holders.map(function (holder) {
    var oldItem = holder.item;
    var item = {
      text: oldItem.text,
      value: oldItem.value
    };
    var childHolders;

    if (holder.child) {
      childHolders = holder.child.slice();
      childHolders.sort(function (a, b) {
        return -a.itemScore + b.itemScore;
      });
      item.items = childHolders.map(function (cHolder) {
        return cHolder.item;
      });
      item.isSearchItem = true;
    }

    return item;
  });
  var mode = new DSBModeSearch(this.elt, searchingResultItems);
  this._searchCache[query] = {
    mode: mode,
    resetAndGet: function resetAndGet() {
      return this.mode;
    }
  };
  return mode;
};

/* harmony default export */ const dualselectbox_MDSBItemListController = (MDSBItemListController);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dualselectbox.css
var dualselectbox = __webpack_require__(6692);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/MDualSelectBox.js








/***
 * @extends {AElement}
 * @constructor
 */

function MDualSelectBox() {
  this.$box = ACore_$('.am-dropdown-box', this);
  this.$lists = $$('.as-dual-select-box-list', this);
  this.itemListCtrl = new dualselectbox_MDSBItemListController(this);
  this.$searchInput = ACore_$(Searcher.tag, this).on('stoptyping', this.eventHandler.searchModify);
  this.$closeBtn = ACore_$('.am-dropdown-box-close-btn', this);
  this.modes = {
    normal: new DSBModeNormal(this, [])
  };
  this.mode = this.modes.normal;
  this.strictValue = true;
  this.on('click', this.eventHandler.click);
}

MDualSelectBox.tag = 'MDualSelectBox'.toLowerCase();

MDualSelectBox.render = function () {
  return ACore_({
    extendEvent: ['change', 'close'],
    "class": ['am-modal', 'am-dropdown-box-modal'],
    child: {
      "class": ['am-dual-select-box', 'am-dropdown-box', 'as-dropdown-box-common-style'],
      child: [{
        "class": 'am-dropdown-box-header',
        child: [{
          tag: Searcher.tag
        }, {
          tag: 'button',
          "class": 'am-dropdown-box-close-btn',
          child: 'span.mdi.mdi-close'
        }]
      }, {
        "class": ['am-dropdown-box-body', 'am-check-tree-box-body', 'as-dual-select-box-list-ctn'],
        child: [{
          "class": ['as-dual-select-box-list', 'absol-selectlist']
        }, {
          "class": 'as-dual-select-box-arrow-ctn',
          child: 'span.mdi.mdi-menu-right'
        }, {
          "class": ['as-dual-select-box-list', 'absol-selectlist']
        }]
      }]
    }
  });
};

MDualSelectBox.prototype.viewToSelected = function () {
  this.modes.normal.viewToSelected();
};

MDualSelectBox.prototype.notifyChange = function () {
  var newValue = this.value;

  if (keyStringOf(newValue) !== keyStringOf(this['savedValue'])) {
    this.savedValue = newValue;
    this.emit('change', {
      type: 'change',
      target: this
    }, this);
  }
};

MDualSelectBox.prototype.resetSearchState = function () {
  this.$searchInput.value = '';
  this.eventHandler.searchModify();
};

MDualSelectBox.property = dualselectbox_DSBPropHandlers;
MDualSelectBox.eventHandler = {};

MDualSelectBox.eventHandler.searchModify = function () {
  var query = this.$searchInput.value.trim().replace(/\s+/g, ' ');

  if (query.length > 0) {
    if (this.mode === this.modes.normal) {
      this.mode.onStop();
      this.$box.addClass('as-searching');
    }

    this.mode.search = this.itemListCtrl.makeSearch(query);
    this.mode = this.mode.search;
    this.mode.onStart();
  } else {
    if (this.mode !== this.modes.normal) {
      this.mode.onStop();
      this.mode = this.modes.normal;
      this.mode.onStart();
      this.$box.removeClass('as-searching');
    }
  }
};

MDualSelectBox.eventHandler.click = function (event) {
  if (event.target === this || hitElement(this.$closeBtn, event)) {
    this.emit('close', {
      type: 'close',
      target: this,
      originalEvent: event
    }, this);
  }
};

/* harmony default export */ const dualselectbox_MDualSelectBox = (MDualSelectBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectmenu/MDSMBoxController.js
function MDSMBoxController(elt) {
  this.elt = elt;
  this.$box = elt.$box;

  for (var key in this) {
    if (key.startsWith('ev_')) {
      this[key] = this[key].bind(this);
    }
  }

  this.elt.on('click', this.ev_click);
  this.$box.on('close', this.ev_close);
}

MDSMBoxController.prototype.ev_click = function () {
  this.elt.isFocus = true;
};

MDSMBoxController.prototype.ev_close = function () {
  this.elt.isFocus = false;
};

MDSMBoxController.prototype.onFocus = function () {
  this.$box.addTo(document.body);
  this.$box.viewToSelected();
  this.elt.off('click', this.ev_click);
};

MDSMBoxController.prototype.onBlur = function () {
  var _this = this;

  this.$box.remove();
  setTimeout(function () {
    _this.elt.on('click', _this.ev_click);
  }, 50);
};

/* harmony default export */ const dualselectmenu_MDSMBoxController = (MDSMBoxController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectmenu/DSMPropsHandlers.js


var DSMPropsHandlers = {};
DSMPropsHandlers.isFocus = {
  set: function set(value) {
    if (this.disabled || this.readOnly) value = false;
    value = !!value;
    if (value === this.hasClass('as-focus')) return;

    if (value) {
      this.savedValue = this.$box.value;
      this.addClass('as-focus');
      this.boxCtrl.onFocus();
    } else {
      this.removeClass('as-focus');
      this.boxCtrl.onBlur();
      this.updateText();

      if (keyStringOf(this.savedValue) !== keyStringOf(this.$box.value)) {
        delete this.savedValue;
        this.notifyChange();
      }
    }
  },
  get: function get() {
    return this.hasClass('as-focus');
  }
};
DSMPropsHandlers.items = {
  set: function set(items) {
    this.$box.items = items;

    if ('pendingValue' in this) {
      this.$box.value = this.pendingValue;
    }

    this.updateText();
  },
  get: function get() {
    return this.$box.items;
  }
};
DSMPropsHandlers.value = {
  set: function set(value) {
    this.pendingValue = value;
    this.$box.value = value;
    this.updateText();
  },
  get: function get() {
    if (!this.strictValue && 'pendingValue' in this) {
      return this.pendingValue;
    }

    var value = this.$box.value;
    var selectedItem = this.$box.selectedItem;
    if (!selectedItem || !selectedItem[0] || !selectedItem[1]) return null;
    return value;
  }
};
DSMPropsHandlers.format = {
  set: function set(value) {
    this.attr('data-format', value);
    this.updateText();
  },
  get: function get() {
    return this.attr('data-format') || '$0, $1';
  }
};
DSMPropsHandlers.strictValue = {
  set: function set(value) {
    this.$box.strictValue = value;

    if (value) {
      this.addClass('as-strict-value');
    } else {
      this.removeClass('as-strict-value');
    }
  },
  get: function get() {
    return this.$box.strictValue;
  }
};
DSMPropsHandlers.disabled = {
  set: function set(value) {
    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.hasClass('as-disabled');
  }
};
DSMPropsHandlers.readOnly = {
  set: function set(value) {
    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.hasClass('as-read-only');
  }
};
/* harmony default export */ const dualselectmenu_DSMPropsHandlers = (DSMPropsHandlers);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectmenu/DualSelectMenu.js






function DualSelectMenu_DualSelectMenu() {
  this.$box = ACore_({
    tag: dualselectbox_MDualSelectBox
  });
  this.$item = ACore_$('.absol-selectlist-item', this);
  HTML5_OOP.drillProperty(this, this.$box, 'enableSearch');
  this.boxCtrl = new dualselectmenu_MDSMBoxController(this);
  this.strictValue = true;
}

DualSelectMenu_DualSelectMenu.tag = 'DualSelectMenu'.toLowerCase();

DualSelectMenu_DualSelectMenu.render = function () {
  return ACore_({
    "class": ['am-dual-select-menu', 'absol-selectmenu', 'as-dual-select-menu'],
    extendEvent: ['change'],
    attr: {
      tabindex: '1'
    },
    child: [{
      "class": 'absol-selectmenu-holder-item',
      child: '.absol-selectlist-item'
    }, {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }, 'attachhook']
  });
};

DualSelectMenu_DualSelectMenu.prototype.notifyChange = function () {
  // console.log('change')
  delete this['pendingValue'];
  this.emit('change', {
    type: 'change',
    target: this
  }, this);
};

DualSelectMenu_DualSelectMenu.prototype.updateText = function () {
  var selectedItem = this.$box.selectedItem;
  var format = this.format;
  var firstToken = '__';
  var secToken = '__';

  if (selectedItem[0]) {
    firstToken = selectedItem[0].text + '';
  }

  if (selectedItem[1]) {
    secToken = selectedItem[1].text + '';
  }

  var text = format.replace('$0', firstToken).replace('$1', secToken);
  this.$item.clearChild().addChild(ACore_({
    tag: 'span',
    "class": 'absol-selectlist-item-text',
    child: {
      text: text
    }
  }));
};

DualSelectMenu_DualSelectMenu.property = dualselectmenu_DSMPropsHandlers;
DualSelectMenu_DualSelectMenu.eventHandler = {};
/* harmony default export */ const dualselectmenu_DualSelectMenu = (DualSelectMenu_DualSelectMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTHeadCell.js

/***
 *
 * @param {TTHeadRow} row
 * @param {TTDHeadCell} data
 * @constructor
 */

function TTHeadCell(row, data) {
  this.row = row;
  this.data = data;
  this.elt = ACore_({
    tag: 'th',
    "class": 'as-tree-table-head-cell'
  });
  if (data.attr) this.elt.attr(data.attr);
  if (data.style) this.elt.addStyle(data.style);
  this.row.head.table.elt.mAdapter.renderHeadCell(this.elt, this.data, this);
}

TTHeadCell.prototype.render = function () {};

/* harmony default export */ const treetable_TTHeadCell = (TTHeadCell);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTHeadRow.js


/**
 *
 * @param {TTHead} head
 * @param {TTDHeadRow} data
 * @constructor
 */

function TTHeadRow(head, data) {
  var _this = this;

  this.head = head;
  this.data = data;
  this.cells = this.data.cells.map(function (cellData) {
    return new treetable_TTHeadCell(_this, cellData);
  });
  this.elt = ACore_({
    tag: 'tr',
    "class": 'as-tree-table-head-row'
  });
  this.elt.addChild(this.cells.map(function (cell, i) {
    return cell.elt.attr('data-col-idx', '' + i);
  }));
}

/* harmony default export */ const treetable_TTHeadRow = (TTHeadRow);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTHead.js

/***
 *
 * @param {TTTable} table
 * @param {TTDHead} data
 * @constructor
 */

function TTHead(table, data) {
  var _this = this;

  this.data = data;
  this.table = table;
  this.elt = this.table.elt.$head;
  this.rows = (this.data.rows || []).map(function (rowData) {
    return new treetable_TTHeadRow(_this, rowData);
  });
  this.elt.clearChild().addChild(this.rows.map(function (r) {
    return r.elt;
  }));
}

/* harmony default export */ const treetable_TTHead = (TTHead);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTCell.js



/***
 *
 * @param {TTRow} row
 * @param {TTDCell} data
 * @constructor
 */

function TTCell(row, data) {
  this.row = row;
  this.data = data;
}

Object.defineProperty(TTCell.prototype, 'elt', {
  get: function get() {
    var _this = this;

    if (!this._elt) {
      this._elt = ACore_({
        tag: 'td',
        "class": 'as-tree-table-cell',
        props: {
          ttCell: this
        },
        on: {
          click: function click(event) {
            if (_this.data && _this.data.on && _this.data.on.click) {
              _this.data.on.click.call(_this._elt, event, _this);
            }
          }
        }
      });

      if (typeof this.data["class"] === "string") {
        addElementClassName(this._elt, this.data["class"]);
      }

      if (this.data.attr) this._elt.attr(this.data.attr);
      if (this.data["class"]) this._elt.addClass(this.data["class"]);
      if (this.data.style) this._elt.addStyle(this.data.style);
      this.row.body.table.elt.mAdapter.renderBodyCell(this.elt, this.data, this);
    }

    return this._elt;
  }
});
Object.defineProperty(TTCell.prototype, 'innerText', Object.getOwnPropertyDescriptor(dynamictable_DTBodyCell.prototype, 'innerText'));
/* harmony default export */ const treetable_TTCell = (TTCell);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTRow.js






/***
 *
 * @param {TTBody} body
 * @param {TTDRow}data
 * @param parentRow
 * @constructor
 */

function TTRow(body, data, parentRow) {
  var _this = this;

  this.id = randomIdent(8);
  this.level = parentRow ? parentRow.level + 1 : 0;
  this.body = body;
  this.data = data;
  this.parentRow = parentRow;
  this.clonedRow = null;
  this.cells = (this.data.cells || []).map(function (cellData) {
    return new treetable_TTCell(_this, cellData);
  });
  this.subRows = (this.data.subRows || []).map(function (rowData) {
    return new TTRow(body, rowData, _this);
  });

  if (!isNone(data.id) && data.subRows && data.subRows.length > 0 && data.id in this.body.table.elt.savedState) {
    this.isOpened = !!this.body.table.elt.savedState[data.id];
  } else if (typeof data.initOpened === 'boolean') {
    this.isOpened = data.initOpened;
  } else if (typeof body.table.data.initOpened === "boolean") {
    this.isOpened = body.table.data.initOpened;
  } else if (typeof body.table.elt.initOpen === 'boolean') {
    this.isOpened = body.table.elt.initOpen;
  }
}

TTRow.prototype.isOpened = false;
/***
 *
 * @param {Array<AElement>=} ac
 */

TTRow.prototype.getRowElements = function (ac) {
  ac = ac || [];
  ac.push(this.elt);

  if (this.isOpened) {
    this.subRows.forEach(function (row) {
      return row.getRowElements(ac);
    });
  }

  return ac;
};

TTRow.prototype.toggle = function () {
  if (this.isOpened) this.close();else this.open();
};

TTRow.prototype.open = function () {
  if (this.isOpened) return;
  if (this.subRows.length === 0) return;
  this.isOpened = true;
  if (!isNone(this.data.id) && this.cells) //real node
    this.body.table.elt.savedState[this.data.id] = this.isOpened;
  this.elt.addClass('as-is-opened');
  var rowElements = this.getRowElements();
  rowElements.shift();
  var bodyElt = this.body.elt;
  var bf = this.body.elt.findChildAfter(this.elt);

  if (bf) {
    rowElements.forEach(function (elt) {
      return bodyElt.addChildBefore(elt, bf);
    });
  } else {
    bodyElt.addChild(rowElements);
  }

  this.updateSizeUp();
};

TTRow.prototype.close = function () {
  if (!this.isOpened) return;
  var rowElements = this.getRowElements();
  rowElements.shift();
  rowElements.forEach(function (elt) {
    return elt.remove();
  });
  this.isOpened = false;
  if (!isNone(this.data.id) && this.cells) this.body.table.elt.savedState[this.data.id] = this.isOpened;

  this._elt.removeClass('as-is-opened');

  this.updateSizeUp();
};

TTRow.prototype.updateSizeUp = function () {
  this.body.table.elt.notifySizeChange();
};

TTRow.prototype.remove = function () {
  var _this2 = this;

  var idx = -1;
  var rowElements;

  var removeRow = function removeRow(idx, rows, dataRows) {
    rows.splice(idx, 1);
    dataRows.splice(idx, 1);
    if (_this2.clonedRow) _this2.clonedRow.remove();

    if (_this2.elt.parentElement) {
      rowElements = _this2.clonedRow ? _this2.clonedRow.getRowElements() : _this2.getRowElements();
      rowElements.forEach(function (elt) {
        return elt.selfRemove();
      });
      HTML5_ResizeSystem.requestUpdateSignal();
    }

    _this2.body.table.elt.queryCtrl.requestTransferSearchItems();
  };

  if (this.parentRow) {
    idx = this.parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      removeRow(idx, this.parentRow.subRows, this.parentRow.data.subRows);
      if (this.parentRow.subRows.length === 0) this.parentRow.elt.removeClass('as-has-sub-row');
    }
  } else {
    idx = this.body.rows.indexOf(this);

    if (idx >= 0) {
      removeRow(idx, this.body.rows, this.body.data.rows);
    }
  }
};
/***
 * @param {TTDRow} rowData
 */


TTRow.prototype.addSubRow = function (rowData) {
  var _this3 = this;

  var row = new TTRow(this.body, rowData, this);
  var clonedRow;
  if (this.clonedRow) clonedRow = new TTClonedRow(row, null, this.subRows.length); //idx is not important

  var rowElements;
  var bf;

  if (this.elt.parentElement && this.isOpened) {
    rowElements = this.clonedRow ? this.clonedRow.getRowElements() : this.getRowElements();
    bf = this.body.elt.findChildAfter(rowElements[rowElements.length - 1]);
    rowElements = clonedRow ? clonedRow.getRowElements() : row.getRowElements();

    if (bf) {
      rowElements.forEach(function (elt) {
        return _this3.body.elt.addChildBefore(elt, bf);
      });
    } else {
      rowElements.forEach(function (elt) {
        return _this3.body.elt.addChild(elt);
      });
    }

    HTML5_ResizeSystem.requestUpdateSignal();
  }

  this.subRows.push(row);

  if (this.data.subRows) {
    this.data.subRows.push(rowData);
  } else {
    this.data.subRows = [rowData];
  }

  if (this.clonedRow) this.clonedRow.addSubRow(clonedRow);
  if (this._elt) this.elt.addClass('as-has-sub-row');
  this.body.table.elt.queryCtrl.requestTransferSearchItems();
};
/***
 *
 @param {TTDRow} newRowData
 */


TTRow.prototype.replace = function (newRowData) {
  var _this4 = this;

  var idx = -1;
  var rowElements;
  var bf;
  var newRow;
  var newClonedRow;
  var needView;

  var makeReplaceRow = function makeReplaceRow(idx, rows, dataRows) {
    newRow = new TTRow(_this4.body, newRowData, _this4.parentRow);
    rows.splice(idx, 1, newRow);
    dataRows.splice(idx, 1, newRowData);

    if (_this4.clonedRow) {
      newClonedRow = new TTClonedRow(newRow, null, idx);

      _this4.clonedRow.replace(newClonedRow);
    }

    if (_this4.elt.parentElement) {
      rowElements = _this4.clonedRow ? _this4.clonedRow.getRowElements() : _this4.getRowElements();
      bf = _this4.body.elt.findChildAfter(rowElements[rowElements.length - 1]);
      rowElements.forEach(function (elt) {
        return elt.selfRemove();
      });
      rowElements = newClonedRow ? newClonedRow.getRowElements() : newRow.getRowElements();

      if (bf) {
        rowElements.forEach(function (elt) {
          return _this4.body.elt.addChildBefore(elt, bf);
        });
      } else {
        rowElements.forEach(function (elt) {
          return _this4.body.elt.addChild(elt);
        });
      }

      HTML5_ResizeSystem.requestUpdateSignal();
    }

    _this4.body.table.elt.queryCtrl.requestTransferSearchItems();
  };

  if (this.parentRow) {
    idx = this.parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      makeReplaceRow(idx, this.parentRow.subRows, this.parentRow.data.subRows);
    }
  } else {
    idx = this.body.rows.indexOf(this);

    if (idx >= 0) {
      makeReplaceRow(idx, this.body.rows, this.body.data.rows);
    }
  }
};
/***
 *
 @param {TTDRow} newRowData
 */


TTRow.prototype.addRowBefore = function (newRowData) {
  var _this5 = this;

  var idx = -1;

  var makeNewRowBefore = function makeNewRowBefore(idx, rows, dataRows) {
    var row, clonedRow;
    var rowElements;
    row = new TTRow(_this5.body, newRowData, _this5.parentRow);

    if (_this5.clonedRow) {
      clonedRow = new TTClonedRow(row, null, idx);
    }

    if (_this5.elt.parentElement) {
      rowElements = clonedRow ? clonedRow.getRowElements() : row.getRowElements();
      rowElements.forEach(function (elt) {
        return _this5.body.elt.addChildBefore(elt, _this5.elt);
      });
      HTML5_ResizeSystem.requestUpdateSignal();
    }

    rows.splice(idx, 0, row);
    dataRows.splice(idx, 0, newRowData);

    if (_this5.clonedRow) {
      _this5.clonedRow.addRowBefore(clonedRow);
    }

    _this5.body.table.elt.queryCtrl.requestTransferSearchItems();
  };

  if (this.parentRow) {
    idx = this.parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      makeNewRowBefore(idx, this.parentRow.subRows, this.parentRow.data.subRows);
    }
  } else {
    idx = this.body.rows.indexOf(this);

    if (idx >= 0) {
      makeNewRowBefore(idx, this.body.rows, this.body.data.rows);
    }
  }
};
/***
 *
 @param {TTDRow} newRowData
 */


TTRow.prototype.addRowAfter = function (newRowData) {
  var _this6 = this;

  var idx = -1;
  var rowElements;
  var bf;

  var makeNewRowAfter = function makeNewRowAfter(idx, rows, dataRows) {
    var row = new TTRow(_this6.body, newRowData, _this6.parentRow);
    var clonedRow;
    if (_this6.clonedRow) clonedRow = new TTClonedRow(row, null, idx);

    if (_this6.elt.parentElement) {
      rowElements = _this6.clonedRow ? _this6.clonedRow.getRowElements() : _this6.getRowElements();
      bf = _this6.body.elt.findChildAfter(rowElements[rowElements.length - 1]);
      rowElements = clonedRow ? clonedRow.getRowElements() : row.getRowElements();

      if (bf) {
        rowElements.forEach(function (elt) {
          return _this6.body.elt.addChildBefore(elt, bf);
        });
      } else {
        rowElements.forEach(function (elt) {
          return _this6.body.elt.addChild(elt);
        });
      }

      HTML5_ResizeSystem.requestUpdateSignal();
    }

    rows.splice(idx + 1, 0, row);
    dataRows.splice(idx + 1, 0, newRowData);
    if (_this6.clonedRow) _this6.clonedRow.addRowBefore(clonedRow);

    _this6.body.table.elt.queryCtrl.requestTransferSearchItems();
  };

  if (this.parentRow) {
    idx = this.parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      makeNewRowAfter(idx, this.parentRow.subRows, this.parentRow.data.subRows);
    }
  } else {
    idx = this.body.rows.indexOf(this);

    if (idx >= 0) {
      makeNewRowAfter(idx, this.body.rows, this.body.data.rows);
    }
  }
};

Object.defineProperty(TTRow.prototype, 'elt', {
  get: function get() {
    var _this7 = this;

    if (!this._elt) {
      this._elt = ACore_({
        tag: 'tr',
        "class": 'as-tree-table-row',
        attr: {
          'data-level': this.level + ''
        },
        props: {
          ttRow: this
        }
      });
      if (this.data.id) this._elt.attr('data-id', this.data.id);
      if (this.isOpened) this._elt.addClass('as-is-opened');
      if (this.subRows.length > 0) this._elt.addClass('as-has-sub-row');

      this._elt.addChild(this.cells.map(function (cell, i) {
        return cell.elt.attr('data-col-idx', i + '');
      }));

      this.$toggle = ACore_$('.as-tree-table-toggle', this._elt);

      if (this.$toggle) {
        this.$toggleCell = this.$toggle.parentElement;
        this.$toggleCell.addClass('as-has-toggle');
        this.$toggle = ACore_({
          elt: this.$toggle,
          child: 'toggler-ico',
          on: {
            click: function click() {
              if (_this7.clonedRow) {
                _this7.clonedRow.toggle();
              } else {
                _this7.toggle();
              }
            }
          }
        });
      }
    }

    return this._elt;
  }
});
Object.defineProperty(TTRow.prototype, 'innerText', Object.getOwnPropertyDescriptor(dynamictable_DTBodyRow.prototype, 'innerText'));
/* harmony default export */ const treetable_TTRow = (TTRow);
/***
 *
 * @param {TTRow} origin
 * @param queryResult
 * @param idx
 * @constructor
 */

function TTClonedRow(origin, queryResult, idx) {
  this.body = origin.body;
  this.idx = idx;
  this.id = origin.id;
  this._elt = origin.elt;
  this.elt = origin.elt;
  this.data = origin.data;
  this.origin = origin;
  this.score = queryResult && queryResult[this.id];
  if (!queryResult) this.score = 1e6;
  this.isOpened = this.score && this.score[0] <= this.score[1];
  this.attach();

  if (this.isOpened) {
    this.subRows = this.origin.subRows.filter(function (row) {
      return queryResult[row.id];
    }).map(function (row, i) {
      return new TTClonedRow(row, queryResult, i);
    });
    this.subRows.sort(function (a, b) {
      var sa = a.score[1];
      var sb = b.score[1];
      if (sa !== sb) return sb - sa;
      return a.idx - b.idx;
    });
  } else {
    this.subRows = this.origin.subRows.map(function (row, i) {
      return new TTClonedRow(row, queryResult, i);
    });
  }
}
['toggle', 'open', 'close', 'getRowElements', 'updateSizeUp'].forEach(function (key) {
  TTClonedRow.prototype[key] = TTRow.prototype[key];
});

TTClonedRow.prototype.remove = function () {
  var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow;
  var idx;

  if (parentRow) {
    idx = parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      parentRow.subRows.splice(idx, 1);
    }
  } else {
    idx = this.origin.body.clonedRows.indexOf(this);

    if (idx >= 0) {
      this.origin.body.clonedRows.splice(idx, 1);
    }
  }
};

TTClonedRow.prototype.replace = function (newClonedRow) {
  var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow;
  var idx;

  if (parentRow) {
    idx = parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      parentRow.subRows.splice(idx, 1, newClonedRow);
    }
  } else {
    idx = this.origin.body.clonedRows.indexOf(this);

    if (idx >= 0) {
      this.origin.body.clonedRows.splice(idx, 1, newClonedRow);
    }
  }
};

TTClonedRow.prototype.addRowBefore = function (newClonedRow) {
  var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow;
  var idx;

  if (parentRow) {
    idx = parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      parentRow.subRows.splice(idx, 0, newClonedRow);
    }
  } else {
    idx = this.origin.body.clonedRows.indexOf(this);

    if (idx >= 0) {
      this.origin.body.clonedRows.splice(idx, 0, newClonedRow);
    }
  }
};

TTClonedRow.prototype.addRowAfter = function (newClonedRow) {
  var parentRow = this.origin.parentRow && this.origin.parentRow.clonedRow;
  var idx;

  if (parentRow) {
    idx = parentRow.subRows.indexOf(this);

    if (idx >= 0) {
      parentRow.subRows.splice(idx + 1, 0, newClonedRow);
    }
  } else {
    idx = this.origin.body.clonedRows.indexOf(this);

    if (idx >= 0) {
      this.origin.body.clonedRows.splice(idx + 1, 0, newClonedRow);
    }
  }
};

TTClonedRow.prototype.addSubRow = function (newClonedRow) {
  this.subRows.push(newClonedRow);
};

TTClonedRow.prototype.attach = function () {
  if (this.isOpened) {
    this.origin.elt.addClass('as-is-opened');
  } else {
    this.origin.elt.removeClass('as-is-opened');
  }

  this.origin.clonedRow = this;
};

TTClonedRow.prototype.detach = function () {
  if (this.origin.isOpened) {
    this.origin.elt.addClass('as-is-opened');
  } else {
    this.origin.elt.removeClass('as-is-opened');
  }

  this.origin.clonedRow = null;
  this.subRows.forEach(function (row) {
    return row.detach();
  });
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTBody.js


/***
 *
 * @param {TTTable}table
 * @param {TTDBody} data
 * @constructor
 */

function TTBody(table, data) {
  var _this = this;

  this.table = table;
  this.data = data;
  this.elt = this.table.elt.$body;
  /***
   *
   * @type {TTRow[]}
   */

  this.rows = (this.data.rows || []).map(function (rowData) {
    return new treetable_TTRow(_this, rowData, null);
  });
  this.clonedRows = null;
  this.renderRows();
}

TTBody.prototype.applyQueryResult = function (queryResult) {
  this.clearClonedRows();

  if (queryResult) {
    this.table.elt.addClass('as-searching');
    this.clonedRows = this.rows.filter(function (row) {
      return queryResult[row.id];
    }).map(function (row, i) {
      return new TTClonedRow(row, queryResult, i);
    });
    this.clonedRows.sort(function (a, b) {
      var sa = a.score[1];
      var sb = b.score[1];
      if (sa !== sb) return sb - sa;
      return a.idx - b.idx;
    });
    this.renderRows(this.clonedRows);
    this.table.elt.notifySizeChange();
  } else {
    this.table.elt.removeClass('as-searching');
    this.renderRows();
  }
};

TTBody.prototype.clearClonedRows = function () {
  if (this.clonedRows) this.clonedRows.forEach(function (row) {
    return row.detach();
  });
  this.clonedRows = null;
};
/***
 *
 */


TTBody.prototype.renderRows = function (rows) {
  rows = rows || this.rows;
  this.elt.clearChild().addChild(rows.reduce(function (ac, row) {
    row.getRowElements(ac);
    return ac;
  }, []));
};
/***
 *
 * @param data
 */


TTBody.prototype.rowOf = function (data) {
  if (data instanceof treetable_TTRow) {
    data = data.data;
  }

  var result = null;
  var queue = this.rows.slice();
  var cr;

  while (queue.length > 0 && !result) {
    cr = queue.shift();

    if (cr.data === data || cr.data.id === data || data.id && cr.data.id === data.id) {
      result = cr;
    } else {
      queue.push.apply(queue, cr.subRows);
    }
  }

  return result;
};
/***
 *
 * @param {TTDRow} rowData
 */


TTBody.prototype.addRow = function (rowData) {
  var _this2 = this;

  var row = new treetable_TTRow(this, rowData, null);
  this.data.rows.push(rowData);
  this.rows.push(row);
  var elements = row.getRowElements();
  elements.forEach(function (elt) {
    return _this2.elt.addChild(elt);
  });
  HTML5_ResizeSystem.requestUpdateSignal();
};

/* harmony default export */ const treetable_TTBody = (TTBody);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTTable.js


/***
 *
 * @param {TreeTable} elt
 * @param data
 * @constructor
 */

function TTTable(elt, data) {
  this.data = data;
  this.elt = elt;
  this.head = new treetable_TTHead(this, this.data.head);
  this.body = new treetable_TTBody(this, this.data.body);
}

/* harmony default export */ const treetable_TTTable = (TTTable);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTDataAdapter.js


/***
 *
 * @param {TreeTable} tableElt
 * @param opt
 * @constructor
 */

function TTDataAdapter(tableElt, opt) {
  this.tableElt = tableElt;
  this.data = null;
  Object.assign(this, opt || {});
}

TTDataAdapter.prototype.render = function () {
  if (this.tableElt.table) {}

  this.tableElt.table = new treetable_TTTable(this.tableElt, this.data);
};
/***
 *
 * @param {AElement} elt
 * @param {TTDHeadCell} data
 * @param {TTHeadCell} controller
 */


TTDataAdapter.prototype.renderHeadCell = function (elt, data, controller) {
  if (data.child) {
    if (data.child.map) {
      elt.addChild(data.child.map(function (it) {
        return ACore_(it);
      }));
    } else {
      elt.addChild(ACore_(data.child));
    }
  }

  if (data.render) {
    data.render.call(null, elt, data, controller);
  }

  if (data.style) {
    elt.addStyle(data.style);
  }
};
/***
 *
 * @param {AElement} elt
 * @param {TTDCell} data
 * @param {TTCell} controller
 */


TTDataAdapter.prototype.renderBodyCell = function (elt, data, controller) {
  if (data.child) {
    if (data.child.map) {
      elt.addChild(data.child.map(function (it) {
        return ACore_(it);
      }));
    } else {
      elt.addChild(ACore_(data.child));
    }
  }

  if (data.render) {
    data.render.call(null, elt, data, controller);
  }

  if (data.style) {
    elt.addStyle(data.style);
  }

  if (data["class"]) {
    elt.addClass(data["class"]);
  }

  if (data.attr) {
    elt.attr(data.attr);
  }
};

/* harmony default export */ const treetable_TTDataAdapter = (TTDataAdapter);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/treetable.css
var treetable = __webpack_require__(8322);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTQueryController.js


/***
 *
 * @param {TreeTable} elt
 * @constructor
 */

function TTQueryController(elt) {
  this.searchMaster = new list_ListSearchMaster();
  this.elt = elt;
  this.$filterInputs = [];
  this.$searchInput = null;
  this['request'] = this['request'].bind(this);

  this._waitDestroy();

  this._rtsiIdx = -1;
}

TTQueryController.prototype._waitDestroy = function () {
  var _this = this;

  setTimeout(function () {
    if (_this.elt.isDescendantOf(document.body)) {
      _this._waitDestroy();
    } else {
      _this.searchMaster.destroy();
    }
  }, 10000);
};

TTQueryController.prototype.attachFilterInput = function (input) {
  if (this.$filterInputs.indexOf(input) >= 0) return;
  if (input.detachTreeTable) input.detachTreeTable();
  input.$treeTable = this;

  if (ACore_$(input).isSupportedEvent('stoptyping')) {
    input.on('stoptyping', this.request);
  } else {
    input.on('change', this.request);
  }

  input.detachTreeTable = this.detachFilterInput.bind(this, input);
  this.$filterInputs.push(input);
};

TTQueryController.prototype.detachFilterInput = function (input) {
  var idx = this.$filterInputs.indexOf(input);
  if (idx < 0) return;
  this.$filterInputs.splice(idx, 1);
  input.off(this.$searchInput.isSupportedEvent('stoptyping') ? 'stoptyping' : 'change', this.request);
  input.detachTreeTable = null;
};

TTQueryController.prototype.attachSearchInput = function (input) {
  if (this.$searchInput === input) return;
  if (input.detachTreeTable) input.detachTreeTable();
  this.$searchInput = input;

  if (ACore_$(input).isSupportedEvent('stoptyping')) {
    input.on('stoptyping', this.request);
  } else {
    input.on('change', this.request);
  }

  input.detachTreeTable = this.detachSearchInput.bind(this, input);
};

TTQueryController.prototype.detachSearchInput = function (input) {
  input = input || this.$searchInput;
  if (input !== this.$searchInput) return;
  input.off(this.$searchInput.isSupportedEvent('stoptyping') ? 'stoptyping' : 'change', this.request);
  input.detachTreeTable = null;
  this.$searchInput = null;
};

TTQueryController.prototype.makeQuery = function () {
  var res = {};

  if (this.$searchInput && this.$searchInput.value.trim().length > 0) {
    res.text = this.$searchInput.value.trim();
  }

  for (var key in res) {
    return res;
  }

  return null;
};

TTQueryController.prototype.request = function () {
  var _this2 = this;

  var query = this.makeQuery();
  if (query) this.searchMaster.query(query).then(function (searchResult) {
    _this2.elt.table.body.applyQueryResult(searchResult);
  });else this.elt.table.body.applyQueryResult(null);
};

TTQueryController.prototype.getSearchItems = function () {
  var getSearchItemOf = function getSearchItemOf(row) {
    var res = {};
    res.text = row.innerText;
    res.value = row.id;

    if (row.subRows && row.subRows.length > 0) {
      res.items = row.subRows.map(getSearchItemOf);
    }

    return res;
  };

  return this.elt.table.body.rows.map(getSearchItemOf);
};

TTQueryController.prototype.transferSearchItems = function () {
  this.searchMaster.transfer(this.getSearchItems());
};

TTQueryController.prototype.requestTransferSearchItems = function () {
  var _this3 = this;

  if (this._rtsiIdx > 0) return;
  this._rtsiIdx = setTimeout(function () {
    _this3._rtsiIdx = -1;

    _this3.transferSearchItems();
  }, 0);
};

/* harmony default export */ const treetable_TTQueryController = (TTQueryController);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LinearColorTinyBar.js




/***
 * @extends {AElement}
 * @constructor
 */

function LinearColorTinyBar() {
  this._value = 0;
  this._colorMapping = 0;
  this._colorMapping = this.BUILDIN_COLORS_RANGE.rainbow;
  /***
   *
   * @type {Text}
   */

  this.$text = ACore_$('.as-linear-color-tiny-text', this).firstChild;
  /***
   * @type {string} valueText
   * @memberOf LinearColorTinyBar#
   * @name valueText
   */

  /***
   * @type {number}  from 0..1..Inf
   * @memberOf LinearColorTinyBar#
   * @name value
   */

  /***
   * @type {Array} - from 0..1..Inf
   * @memberOf LinearColorTinyBar#
   * @name colorMapping#
   */
}

LinearColorTinyBar.tag = 'LinearColorTinyBar'.toLowerCase();

LinearColorTinyBar.render = function () {
  return ACore_({
    "class": 'as-linear-color-tiny-bar',
    child: [{
      tag: 'span',
      "class": 'as-linear-color-tiny-text',
      child: {
        text: '0.00%'
      }
    }, '.as-linear-color-tiny-bar-rect']
  });
};

LinearColorTinyBar.prototype.BUILDIN_COLORS_RANGE = js_LinearColorBar.prototype.BUILDIN_COLORS_RANGE;

LinearColorTinyBar.prototype._updateColor = function () {
  var value = this._value;
  var colorMapping = this.colorMapping;
  var i = 0;

  while (i < colorMapping.length) {
    if (i + 1 == colorMapping.length || colorMapping[i + 1].value > value) break;
    ++i;
  }

  this.addStyle('--color', colorMapping[i].color + '');
};

LinearColorTinyBar.property = {};
LinearColorTinyBar.property.value = {
  set: function set(value) {
    if (typeof value === "string") value = parseFloat(value);
    if (typeof value !== "number") value = 0;
    if (isNaN(value)) value = 0;
    this._value = Math.max(value, 0);
    this.addStyle('--value', this._value + '');

    this._updateColor();
  },
  get: function get() {
    return this._value;
  }
};
LinearColorTinyBar.property.valueText = {
  set: function set(value) {
    this.$text.data = value;
  },
  get: function get() {
    return this.$text.data;
  }
};
LinearColorTinyBar.property.colorMapping = {
  set: function set(value) {
    var ok = true;

    if (typeof value === 'string') {
      if (!(value in this.BUILDIN_COLORS_RANGE)) {
        value = 'rainbow';
      }

      value = this.BUILDIN_COLORS_RANGE[value];
    } else if (value instanceof Array) {
      ok = value.length > 1;

      if (!ok) {
        console.warn("colorMapping.length must > 1", value);
      }
    } else {
      console.warn("Invalid colorMapping", value);
    }

    if (!ok) value = this.BUILDIN_COLORS_RANGE.rainbow;
    this._colorMapping = value;

    this._updateColor();
  },
  get: function get() {
    return this._colorMapping;
  }
};
absol_acomp_ACore.install(LinearColorTinyBar);
/* harmony default export */ const js_LinearColorTinyBar = (LinearColorTinyBar);
ShareSerializer.addHandlerBefore({
  match: function match(elt, scope, stack) {
    return elt.hasClass && elt.hasClass('as-linear-color-tiny-bar-rect');
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    bound.x -= printer.O.x;
    bound.y -= printer.O.y;
    printer.rect(bound, {
      fill: elt.getComputedStyleValue('background-color')
    });
  }
}, '*');
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TreeTable.js
















/***
 * @typedef {Object} TTDHeadCell
 * @property {AbsolConstructDescriptor|Array<AbsolConstructDescriptor>|AElement} [child]
 * @property {function(elt:AElement, data:TTDHeadCell, controller:TTCell): void} render
 * @property {CSSStyleDeclaration} style
 */

/***
 * @typedef {Object} TTDHeadRow
 * @property {Array<TTDHeadCell>} cells
 * @property {Array<TTDHeadRow>} subRows
 */

/***
 * @typedef {Object} TTDHead
 * @property {Array<TTDHeadRow>} rows
 */

/***
 * @typedef {Object} TTDCell
 * @property {AbsolConstructDescriptor|Array<AbsolConstructDescriptor>|AElement} [child]
 * @property {function(elt:AElement, data:TTDCell, controller:TTCell): void} render
 * @property {CSSStyleDeclaration} [style]
 * @property {string|Array<string>} class
 * @property {Object} attr
 */

/***
 * @typedef {Object} TTDRow
 * @property {Array<TTDCell>} cells
 * @property {Array<TTDRow>} subRows
 * @property {string} [id]
 *
 */

/***
 * @typedef {Object} TTDHead
 * @property {Array<TTDHeadRow>} rows
 */

/***
 * @typedef {Object} TTDBody
 * @property {Array<TTDRow>} rows
 */

/***
 * @typedef {Object} TTData
 * @property {TTDHead} head
 * @property {TTDBody} body
 * @property {boolean} [initOpened]
 */

/***
 * @typedef {Object} TTDAdapter
 * @property {TTData} data
 */

var _loadCss = function loadCss() {
  var dynamicCss = new HTML5_DynamicCSS();
  dynamicCss.setRules(Array(20).fill(null).reduce(function (ac, cr, i) {
    ac[".as-tree-table-row[data-level=\"".concat(i, "\"] .as-tree-table-toggle::before")] = {
      width: 2 * i + 'em'
    };
    ac[['.as-tree-table.as-hide-col-' + i + ' td[data-col-idx="' + i + '"]', '.as-tree-table.as-hide-col-' + i + ' th[data-col-idx="' + i + '"]'].join(',')] = {
      display: 'none'
    };
    ac[".as-tree-table-row[data-level=\"".concat(i, "\"] .as-tree-table-cell.as-has-toggle")] = {
      'padding-left': "calc(5px + ".concat(2 * i + 1.5, "em)")
    };
    ac[".as-printer-content .as-tree-table-row[data-level=\"".concat(i, "\"] .as-tree-table-cell.as-has-toggle")] = {
      'padding-left': "calc(5px + ".concat(2 * i, "em)")
    };
    return ac;
  }, {})).commit();
  _loadCss = noop;
};
/***
 * @extends AElement
 * @constructor
 */


function TreeTable() {
  _loadCss();

  this._hiddenColumns = [];
  this.$head = ACore_$('thead', this);
  this.$body = ACore_$('tbody', this);
  this.savedState = {};
  /**
   *
   * @type {null|TTTable}
   */

  this.table = null;
  /***
   *
   * @type {null|TTDataAdapter}
   */

  this.mAdapter = null;
  this.queryCtrl = new treetable_TTQueryController(this);
  this.rowMoveTool = new TTRowMoveTool(this);
  /***
   * @name adapter
   * @type TTDAdapter
   * @memberOf TreeTable#
   */

  /***
   * @name searchInput
   * @type SearchTextInput
   * @memberOf TreeTable#
   */
}

TreeTable.tag = 'TreeTable'.toLowerCase();

TreeTable.render = function () {
  return ACore_({
    extendEvent: ['orderchange'],
    tag: 'table',
    "class": 'as-tree-table',
    child: [{
      tag: 'thead',
      "class": 'as-tree-table-head'
    }, {
      tag: 'tbody'
    }]
  });
};

TreeTable.prototype.removeRow = function (rowData) {
  if (!this.table) return;
  var row = this.table.body.rowOf(rowData);
  if (row) row.remove();
};

TreeTable.prototype.replaceRow = function (rowData, oldRowData) {
  if (!this.table) return;
  var row = this.table.body.rowOf(oldRowData);
  if (row) row.replace(rowData);
};
/***
 *
 * @param rowData
 * @param {any|null} parentRow
 */


TreeTable.prototype.addRowIn = function (rowData, parentRow) {
  if (!this.table) return;
  var row;

  if (parentRow) {
    row = this.table.body.rowOf(parentRow);
    if (row) row.addSubRow(rowData);else {
      console.error('Can not find row', parentRow);
    }
  } else {
    this.table.body.addRow(rowData);
  }
};

TreeTable.prototype.addRow = function (rowData) {
  if (!this.table) return;
  this.table.body.addRow(rowData);
};

TreeTable.prototype.addRows = function (rowDataArr) {
  var _this = this;

  if (!this.table) return;
  rowDataArr.forEach(function (rowData) {
    _this.table.body.addRow(rowData);
  });
};
/***
 *
 * @param rowData
 * @param {any|null} bfRow
 */


TreeTable.prototype.addRowBefore = function (rowData, bfRow) {
  if (!this.table) return;
  var row;

  if (bfRow) {
    row = this.table.body.rowOf(bfRow);
    if (row) row.addRowBefore(rowData);else {
      console.error('Can not find row', bfRow);
    }
  } else {
    this.table.body.addRow(rowData);
  }
};
/***
 *
 * @param rowData
 * @param {any|null} atRow
 */


TreeTable.prototype.addRowAfter = function (rowData, atRow) {
  if (!this.table) return;
  var row;

  if (atRow) {
    row = this.table.body.rowOf(atRow);
    if (row) row.addRowAfter(rowData);else {
      console.error('Can not find row', atRow);
    }
  } else {
    if (this.table.body.rows.length === 0) {
      this.table.body.addRow(rowData);
    } else {
      this.table.body.rows[0].addRowBefore(rowData);
    }
  }
};

TreeTable.prototype.rowOf = function (rowData) {
  return this.table.body.rowOf(rowData);
};

TreeTable.prototype.viewIntoRow = function (row) {
  var _this2 = this;

  var counter = 300;

  var wait = function wait() {
    counter--;

    if (_this2.isDescendantOf(document.body)) {
      row = _this2.rowOf(row);

      if (row) {
        vScrollIntoView(row.elt);
      }
    } else if (counter > 0) {
      setTimeout(wait, 30);
    }
  };

  setTimeout(wait, 10);
};

TreeTable.prototype.notifySizeChange = function () {
  var c = this.parentElement;

  while (c) {
    if (typeof c.updateSize === 'function') c.updateSize();else if (typeof c.requestUpdateSize === 'function') c.requestUpdateSize();
    c = c.parentElement;
  }
};

TreeTable.prototype.attachSearchInput = function (input) {
  this.searchInput = input;
};

TreeTable.property = {};
TreeTable.property.adapter = {
  set: function set(adapter) {
    if (adapter.type === 'struct') {
      adapter = ttStructAdapter2TTDAdapter(adapter);
    }

    this._adapterData = adapter;

    if (adapter && adapter.data) {
      adapter.data.initOpened = adapter.data.initOpened || adapter.initOpened; //adapt param
    }

    this.mAdapter = new treetable_TTDataAdapter(this, adapter);
    this.mAdapter.render();
    this.queryCtrl.transferSearchItems();
    var c = this.parentElement;

    while (c) {
      if (c.hasClass && c.hasClass('absol-table-vscroller') && c.update) {
        c.update();
        break;
      }

      c = c.parentElement;
    }

    HTML5_ResizeSystem.requestUpdateSignal();
    var td = ACore_$('td', this);

    if (td) {
      var attachhook = ACore_('attachhook').once('attached', function () {
        attachhook.remove();
        HTML5_ResizeSystem.requestUpdateSignal();
      }).addTo(td);
    }
  },
  get: function get() {
    return this._adapterData;
  }
};
TreeTable.property.filterInputs = {
  set: function set(inputs) {},
  get: function get() {}
};
TreeTable.property.searchInput = {
  set: function set(input) {
    if (input) this.queryCtrl.attachSearchInput(input);else this.queryCtrl.detachSearchInput();
  },
  get: function get() {
    return this.queryCtrl.$searchInput;
  }
};
TreeTable.property.hiddenColumns = {
  set: function set(value) {
    value = value || [];

    this._hiddenColumns.forEach(function (idxV) {
      this.removeClass('as-hide-col-' + idxV);
    }.bind(this));

    this._hiddenColumns = value;

    this._hiddenColumns.forEach(function (idxV) {
      this.addClass('as-hide-col-' + idxV);
    }.bind(this));

    var c = this.parentElement;

    while (c) {
      if (c.hasClass && (c.hasClass('absol-table-vscroller') || c.hasClass('absol-table-scroller')) && (c.update || c.updateContent)) {
        (c.update || c.updateContent).call(c);
        break;
      }

      c = c.parentElement;
    }

    if (this.isDescendantOf(document.body)) HTML5_ResizeSystem.update();
  },
  get: function get() {
    return this._hiddenColumns;
  }
};
absol_acomp_ACore.install(TreeTable);
/* harmony default export */ const treetable_TreeTable = (TreeTable);
/**
 *
 * @param {TreeTable} elt
 * @constructor
 */

function TTRowMoveTool(elt) {
  this.elt = elt;
  this.dragListenners = {
    dragstart: this.ev_dragStart.bind(this),
    drag: this.ev_drag.bind(this),
    dragend: this.ev_dragEnd.bind(this),
    dragdeinit: this.ev_dragDeinit.bind(this)
  };
  this.$body = ACore_({
    tag: js_Hanger,
    elt: this.elt.$body,
    props: {
      hangOn: 3
    }
  }).on('draginit', this.ev_dragInit.bind(this));
  /**
   *
   * @type {null|TTRow}
   */

  this.inParent = null;
  /**
   *
   * @type {null|TTRow}
   */

  this.row = null;
  this.siblingRows = [];
  this.siblingBounds = [];
}

TTRowMoveTool.prototype._getZIndex = function () {
  var res = 0;
  var c = this.elt;

  while (c) {
    res = Math.max(res, parseInt(getComputedStyle(c).getPropertyValue('z-index'), 10) || 0);
    c = c.parentElement;
  }

  return res;
};

TTRowMoveTool.prototype.ev_dragInit = function (event) {
  var row = this._findRow(event.target, true);

  if (!row) return;
  if (this.elt.table.body.clonedRows) return; // searching

  this.inParent = row.parentRow;
  this.row = row;
  this.$body.on(this.dragListenners);
};

TTRowMoveTool.prototype.ev_dragDeinit = function () {
  this.$body.off(this.dragListenners);
};

TTRowMoveTool.prototype.ev_dragStart = function (event) {
  var _this3 = this;

  event.preventDefault();
  var row = this.row;
  var originTableElt = this.elt.table.elt;
  var originBody = originTableElt.lastChild;
  var tableBound = originTableElt.getBoundingClientRect();

  var zIndex = this._getZIndex();

  this.$clonedTable = ACore_$(originTableElt.cloneNode(false)).addClass('as-dt-body-row-cloned-ctn'); //reuse class

  this.$clonedTable.addStyle({
    tableLayout: 'fixed',
    width: tableBound.width + 'px',
    zIndex: zIndex + 200
  }).addTo(document.body);
  this.$modal = this.$modal || ACore_({
    tag: js_Modal,
    style: {
      zIndex: zIndex + 201,
      userSelect: 'none'
    }
  });
  this.$modal.addTo(document.body);
  this.$clonedBody = ACore_$(originBody.cloneNode());
  this.$clonedTable.addChild(this.$clonedBody);
  var originRowElt = row.elt;
  this.$clonedRow = ACore_$(originRowElt.cloneNode(true)).addStyle({
    backgroundColor: originRowElt.getComputedStyleValue('background-color')
  });
  this.$clonedBody.addChild(this.$clonedRow);
  var rowBound = originRowElt.getBoundingClientRect();
  this.$clonedTable.addStyle({
    top: rowBound.top + 'px',
    left: rowBound.left + 'px'
  });
  this.$newPostLine = this.$newPostLine || ACore_('.as-dt-insert-line');
  this.$newPostLine.addStyle({
    left: rowBound.left + 'px',
    width: rowBound.width + 'px'
  });
  this.$newPostLine.addTo(document.body);
  this.rowBond = Math_Rectangle.fromClientRect(rowBound);
  this.mouseOffset = event.currentPoint.sub(this.rowBond.A());
  Array.prototype.forEach.call(this.$clonedRow.childNodes, function (td, i) {
    var originTd = originRowElt.childNodes[i];
    var bound = originTd.getBoundingClientRect();
    ACore_$(td).addStyle({
      'width': bound.width + 'px',
      boxSizing: 'border-box'
    });
  });
  this.siblingRows = this.inParent ? this.inParent.subRows.slice() : this.elt.table.body.rows.slice();
  this.firstSiblingRow = this.inParent ? this.inParent.subRows[0] : this.elt.table.body.rows[0];
  this.siblingBounds = (this.inParent ? this.inParent.subRows : this.elt.table.body.rows).map(function (row) {
    return _this3._boundOfRow(row);
  });
  this.idx = this.siblingRows.indexOf(this.row);
  this.newIdx = this.idx;
  this.$scroller = findVScrollContainer(this.elt);
  if (this.$scroller === document.body.parentElement) this.$scroller = null;
  this.overflowCheckITV = setInterval(function () {
    if (!_this3.$scroller) return;

    var scrollerBound = _this3.$scroller.getBoundingClientRect();

    var cloneBound = _this3.$clonedTable.getBoundingClientRect();

    if (cloneBound.height >= scrollerBound.height) return;
    var newScrollTop = _this3.$scroller.scrollTop;

    if (cloneBound.top < scrollerBound.top) {
      newScrollTop = newScrollTop - Math.min(100, (scrollerBound.top - cloneBound.top) / 6);
    } else if (cloneBound.bottom > scrollerBound.bottom) {
      newScrollTop = newScrollTop - Math.min(100, (scrollerBound.bottom - cloneBound.bottom) / 6);
      newScrollTop = Math.min(_this3.$scroller.scrollHeight - _this3.$scroller.clientHeight, newScrollTop);
    }

    newScrollTop = Math.max(0, newScrollTop);

    if (newScrollTop !== _this3.$scroller.scrollTop) {
      _this3.$scroller.scrollTop = newScrollTop;
    }
  }, 33);
};

TTRowMoveTool.prototype._boundOfRow = function (row) {
  var rowElements = row.getRowElements();
  var bound = Math_Rectangle.fromClientRect(rowElements[0].getBoundingClientRect());

  if (rowElements.length > 1) {
    bound = bound.merge(Math_Rectangle.fromClientRect(rowElements[rowElements.length - 1].getBoundingClientRect()));
  }

  return bound;
};

TTRowMoveTool.prototype.ev_drag = function (event) {
  event.preventDefault();
  var newPos = event.currentPoint.sub(this.mouseOffset);
  this.$clonedTable.addStyle('top', newPos.y + 'px');
  var firstSiblingRowBound = Math_Rectangle.fromClientRect(this.firstSiblingRow.elt.getBoundingClientRect());
  var viewDelta = firstSiblingRowBound.A().sub(this.siblingBounds[0].A()).y;
  var y = newPos.y + this.rowBond.height / 2 - viewDelta;
  var beforeIdx = this.siblingBounds.length;
  var rBound;

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

    if (rBound.centerPoint().y > y) {
      beforeIdx = i;
      break;
    }
  }

  if (beforeIdx === this.idx + 1 || beforeIdx === this.idx) {
    this.$newPostLine.addStyle('display', 'none');
    this.newIdx = this.idx;
  } else {
    this.$newPostLine.removeStyle('display');

    if (beforeIdx < this.siblingBounds.length) {
      this.$newPostLine.addStyle('top', this.siblingBounds[beforeIdx].y + viewDelta + 'px');

      if (beforeIdx < this.idx) {
        this.newIdx = beforeIdx;
      } else {
        this.newIdx = beforeIdx - 1;
      }
    } else {
      this.newIdx = this.siblingBounds.length - 1;
      this.$newPostLine.addStyle('top', this.siblingBounds[this.siblingBounds.length - 1].C().y + viewDelta + 'px');
    }
  }
};

TTRowMoveTool.prototype.ev_dragEnd = function (event) {
  clearInterval(this.overflowCheckITV);
  this.$modal.remove();
  this.$newPostLine.remove();
  this.$clonedTable.remove();

  if (this.newIdx !== this.idx) {
    if (this.inParent) {
      this.inParent.subRows.splice(this.idx, 1);
      this.inParent.subRows.splice(this.newIdx, 0, this.row);
      this.inParent.data.subRows.splice(this.idx, 1);
      this.inParent.data.subRows.splice(this.newIdx, 0, this.row.data);
    } else {
      this.elt.table.body.rows.splice(this.idx, 1);
      this.elt.table.body.rows.splice(this.newIdx, 0, this.row);
      this.elt.table.body.data.rows.splice(this.idx, 1);
      this.elt.table.body.data.rows.splice(this.newIdx, 0, this.row.data);
    }

    this.elt.table.body.renderRows();
    this.elt.emit('orderchange', {
      type: 'orderchange',
      target: this.row,
      inParent: this.inParent || this.elt.table.body,
      inParentData: this.inParent ? this.inParent.data : this.elt.table.body.data,
      from: this.idx,
      to: this.newIdx,
      originalEvent: event,
      row: this.row,
      data: this.row.data,
      devMessage: this.inParent ? 'order change in array event.inParent.subRows' : 'order change in array event.inParent.rows'
    });
  }
};

TTRowMoveTool.prototype._findRow = function (elt, inDraZone) {
  var hitDragZone = false;

  while (elt) {
    if (elt.classList.contains('as-drag-zone')) hitDragZone = true;

    if (elt.ttRow) {
      if (hitDragZone || !inDraZone) return elt.ttRow;
      return null;
    }

    elt = elt.parentElement;
  }

  return null;
};
/***
 *
 * @param adapterData
 * @returns {TTDAdapter}
 */


function ttStructAdapter2TTDAdapter(adapterData) {
  var toString = {
    'Date': function Date(x) {
      return x ? formatDateTime(x, 'dd/MM/yyyy') : '';
    },
    'DateTime': function DateTime(x) {
      return x ? formatDateTime(x, 'dd/MM/yyyy HH:mm') : '';
    },
    text: function text(x) {
      return (x || '') + '';
    }
  };

  var getItemDict = function getItemDict(desc) {
    var dict = desc.__dict__;

    if (!dict) {
      Object.defineProperty(desc, '__dict__', {
        enumerable: false,
        writable: true,
        configurable: true,
        value: (desc.items || []).reduce(function makeDict(ac, cr) {
          var key = keyStringOf(cr.value);
          ac[key] = cr;

          if (cr.items && cr.items.reduce) {
            cr.items.reduce(makeDict, ac);
          }

          return ac;
        }, {})
      });
      dict = desc.__dict__;
    }

    return dict;
  };

  var handlers = {
    'Date': function Date(x) {
      return [{
        tag: 'span',
        child: {
          text: x ? formatDateTime(x, 'dd/MM/yyyy') : ''
        }
      }];
    },
    'DateTime': function DateTime(x) {
      return [{
        tag: 'span',
        child: {
          text: x ? formatDateTime(x, 'dd/MM/yyyy HH:mm') : ''
        }
      }];
    },
    text: function text(x) {
      return [{
        tag: 'span',
        child: {
          text: (x || '') + ''
        }
      }];
    },
    performance: function performance(x, desc) {
      return [{
        tag: js_LinearColorTinyBar.tag,
        props: {
          colorMapping: desc.colorMapping || 'performance',
          value: x,
          extend: typeof desc.extend === "number" && desc.extend > 0 ? desc.extend : 0.5,
          valueText: typeof x === 'number' ? (x * 100).toFixed(2) + '%' : x + ''
        }
      }];
    },
    "enum": function _enum(x, desc) {
      var dict = getItemDict(desc);
      var item = dict[keyStringOf(x)];
      if (item) return [{
        tag: 'span',
        child: {
          text: item.text
        }
      }];else return [{
        tag: 'span',
        child: {
          text: ''
        }
      }];
    },
    '{enum}': function _enum(x, desc) {
      var dict = getItemDict(desc);
      if (!(x instanceof Array)) return [{
        tag: 'span',
        child: {
          text: ''
        }
      }];
      var items = x.map(function (it) {
        return dict[keyStringOf(it)];
      }).filter(function (it) {
        return !!it;
      });
      var text = items.map(function (it) {
        return it.text;
      }).join(', ');
      return [{
        tag: 'span',
        child: {
          text: text
        }
      }];
    }
  };
  /**
   *
   * @type {TTDAdapter}
   */

  var res = {
    data: {
      initOpened: true,
      head: {
        rows: [{
          cells: adapterData.propertyNames.map(function (name) {
            var cellData = {
              child: {
                text: name
              }
            };
            var descriptor = adapterData.propertyDescriptors[name];
            if (descriptor && descriptor.text) cellData.child.text = descriptor.text;
            return cellData;
          })
        }]
      },
      body: {
        rows: adapterData.records.map(function visit(it) {
          var row = {};
          row.cells = adapterData.propertyNames.map(function (name) {
            var descriptor = adapterData.propertyDescriptors[name];
            var type = descriptor && descriptor.type || 'text';
            var value = it[name];
            var f = toString[type] || toString.text;
            var text = f(value);
            var handler = handlers[type] || handlers.text;
            var cell = {
              innerText: text,
              attr: {
                'data-type': type
              },
              child: handler(value, descriptor)
            };

            if (name === adapterData.treeBy) {
              cell.child.unshift('.as-tree-table-toggle');
            }

            return cell;
          });

          if (it.__children__) {
            row.subRows = it.__children__.map(visit);
          }

          return row;
        })
      }
    }
  };
  return res;
}
ShareSerializer.addHandlerBefore({
  id: 'TreeTableCellBorder',
  match: function match(elt, scope, stack) {
    if (!elt.hasClass) return false;
    if (!elt.hasClass('as-tree-table-head-cell') && !elt.hasClass('as-tree-table-cell')) return false;
    var style = getComputedStyle(elt);
    var borderColor = style.getPropertyValue('border-color');
    var borderStyle = style.getPropertyValue('border-style');
    var borderWidth = style.getPropertyValue('border-width');
    var borderRadius = style.getPropertyValue('border-radius');
    if (borderStyle === 'none' || borderWidth === '0px') return false;
    scope.declare('borderStyle', {
      width: parseFloat(borderWidth.replace('px', '')),
      radius: parseMeasureValue(borderRadius),
      color: borderColor
    });
    return true;
  },
  exec: function exec(printer, elt, scope, stack, accept) {
    var borderStyle = scope.get('borderStyle');
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());
    var rect = bound.clone();
    var strokeWidth = borderStyle.width;
    rect.x -= printer.O.x;
    rect.y -= printer.O.y;
    var radius = borderStyle.radius;
    var rounded;

    if (radius) {
      switch (radius.unit) {
        case '%':
          rounded = [radius.value * rect.width / 100, radius.value * rect.height / 100];
          break;

        case 'px':
          rounded = radius.value;
          break;
      }
    }

    printer.rect(rect, {
      stroke: borderStyle.color,
      rounded: rounded,
      strokeWidth: strokeWidth
    });
    return true;
  }
}, 'Border');
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/finder.css
var finder = __webpack_require__(2209);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mobileapp.css
var mobileapp = __webpack_require__(2287);
;// 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 random_randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
function randomPick(arr) {
  var id = random_randomInt(0, arr.length - 1);
  return arr[id];
}
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/TaskManager.js



/***
 *
 * @param {TaskManager} manager
 * @param {function(finishTask: function, bundle: any): (void|Promise)=} func
 * @param {any=} bundle
 * @constructor
 */

function Task(manager, func, bundle) {
  this.manager = manager;
  this.id = randomIdent(12);
  this.func = func;
  this.bundle = bundle;
  this.state = 0;
}

Task.prototype.begin = function () {
  if (this.state !== 0) return;
  this.state = 1;
  var sync;

  if (this.func) {
    try {
      sync = this.func(this.end.bind(this), this.bundle);
    } catch (error) {
      console.error(error);
    }
  }

  if (sync && sync.then) sync["catch"](function (error) {
    return console.error(error);
  }).then(this.end.bind(this));
};

Task.prototype.end = function () {
  if (this.state !== 1) return;
  this.state = 2;
  this.manager.onFinishTask(this);
};

function TaskManager(opt) {
  HTML5_EventEmitter.call(this);
  opt = opt || {};
  this.limit = typeof opt.limit === "number" && opt.limit >= 1 ? opt.limit : Infinity;
  this.pendingTasks = [];
  this.runningTasks = [];
}

HTML5_OOP.mixClass(TaskManager, HTML5_EventEmitter);
/***
 *
 * @param {function(finishTask: function, bundle: any): (void|Promise)} func
 * @param {any} bundle
 */

TaskManager.prototype.requestTask = function (func, bundle) {
  var task = new Task(this, func, bundle);

  if (this.runningTasks.length < this.limit) {
    this.runningTasks.push(task);
    this.emit('task_begin', {
      type: 'task_begin',
      task: task
    }, this);
    task.begin();
  } else {
    this.pendingTasks.push(task);
  }
};

TaskManager.prototype.onFinishTask = function (task) {
  var idx = this.runningTasks.indexOf(task);
  if (idx < 0) return;
  this.runningTasks.splice(idx, 1);
  this.emit('task_end', {
    type: 'task_end',
    task: task
  }, this);

  while (this.pendingTasks.length > 0 && this.runningTasks.length < this.limit) {
    task = this.pendingTasks.shift();
    this.runningTasks.push(task);
    this.emit('task_begin', {
      type: 'task_begin',
      task: task
    }, this);
    task.begin();
  }
};

TaskManager.prototype.newTask = function () {
  var task = new Task(this, null, null);
  this.runningTasks.push(task);
  this.emit('task_begin', {
    type: 'task_begin',
    task: task
  }, this);
  task.begin();
  return task;
};

/* harmony default export */ const AppPattern_TaskManager = (TaskManager);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/finder/FileThumbnail.js




var thumbnailCache = {};
var dbSync;

var getDb = function getDb() {
  dbSync = dbSync || new Promise(function (resolve) {
    var request = window.indexedDB.open('FileThumbnailDB', 1);

    request.onupgradeneeded = function (event) {
      var db = event.target.result;
      db.createObjectStore("files", {});
    };

    request.onsuccess = function (event) {
      var db = event.target.result;
      var request1;

      if (localStorage.getItem('FileThumbnail_clear_cache') === '1') {
        localStorage.removeItem('FileThumbnail_clear_cache');
        request1 = db.transaction('files', 'readwrite').objectStore('files').clear();

        request1.onsuccess = function () {
          resolve(db);
        };

        request1.onerror = function () {
          resolve(null);
        };
      } else resolve(db);
    };

    request.onerror = function () {
      resolve(null);
    };
  });
  return dbSync;
};

var dbGetItem = function dbGetItem(key) {
  return getDb().then(function (db) {
    if (!db) return null;
    var request = db.transaction('files').objectStore('files').get(key);
    return new Promise(function (resolve) {
      request.onsuccess = function (event) {
        var data = event.target.result;
        resolve(data);
      };

      request.onerror = function () {
        resolve(null);
      };
    });
  });
};

var dbSetItem = function dbSetItem(key, value) {
  return getDb().then(function (db) {
    if (!db) return null;
    var objectStore = db.transaction('files', 'readwrite').objectStore('files');
    var request = objectStore.put(value, key);
    return new Promise(function (resolve) {
      request.onsuccess = function (event) {
        var data = event.target.result;
        resolve(data);
      };

      request.onerror = function () {
        resolve(null);
      };
    });
  });
};

document.addEventListener('keydown', function (event) {
  if (event.ctrlKey && event.key === 'F5') {
    localStorage.setItem('FileThumbnail_clear_cache', '1');
  }
});

var url2small = function url2small(url) {
  return new Promise(function (resolve) {
    var image = new Image();
    image.crossOrigin = 'anonymous';
    image.crossorigin = 'anonymous';
    image.src = url;

    image.onload = function () {
      var now = new Date();

      if (image.naturalWidth <= 200 && image.naturalHeight < 200) {
        resolve(url);
        return;
      }

      var scale = Math.min(200 / image.naturalWidth, 200 / image.naturalHeight);
      var width = Math.round(image.naturalWidth * scale);
      var height = Math.round(image.naturalHeight * scale);
      var canvas = document.createElement('canvas');
      canvas.width = width;
      canvas.height = height;
      var ctx = canvas.getContext('2d');

      for (var i = 0; i < 20; ++i) {
        for (var j = 0; j < 20; ++j) {
          ctx.fillStyle = (i ^ j) & 1 ? '#BBBBBB' : '#FFFFFF';
          ctx.fillRect(i * 10, j * 10, 10, 10);
        }
      }

      ctx.drawImage(image, 0, 0, width, height);
      resolve(canvas.toDataURL('image/jpeg', 0.5));
    };
  });
};

var getThumbnailUrl = function getThumbnailUrl(url) {
  if (!thumbnailCache[url]) {
    thumbnailCache[url] = dbGetItem(url).then(function (result) {
      if (!result) {
        result = url2small(url).then(function (canvasResult) {
          if (canvasResult) dbSetItem(url, canvasResult);
          return canvasResult;
        });
      }

      return result;
    });
  }

  return thumbnailCache[url];
};

function FileThumbnail() {
  this._value = null;
  this.$fileName = ACore_$('.as-file-thumbnail-file-name', this);
  this.$bg = ACore_$('.as-file-thumbnail-background', this);
  /***
   * @type {string}
   * @name fileName
   * @memberOf FileThumbnail#
   */

  /***
   * @type {string|null}
   * @name fileType
   * @memberOf FileThumbnail#
   */

  /***
   * @type {string|null}
   * @name thumbnail
   * @memberOf FileThumbnail#
   */

  /***
   * @type {boolean}
   * @name isDirectory
   * @memberOf FileThumbnail#
   */
}

FileThumbnail.tag = 'FileThumbnail'.toLowerCase();

FileThumbnail.render = function () {
  return ACore_({
    "class": 'as-file-thumbnail',
    child: [{
      "class": 'as-file-thumbnail-background'
    }, {
      "class": 'as-file-thumbnail-file-name',
      child: []
    }, {
      "class": 'as-file-thumbnail-check',
      child: 'span.mdi.mdi-check-bold'
    }]
  });
};

FileThumbnail.prototype._updateFileName = function () {
  var fileName = this.fileName;

  if (!fileName) {
    return;
  }

  var parts;
  var matched;
  matched = fileName.match(/([^_+\-.]+)|([_+\-.]+)/g);
  parts = matched || [];

  if (parts.length > 2 && parts[parts.length - 2] === '.') {
    parts[parts.length - 2] += parts[parts.length - 1];
    parts.pop();
  }

  parts = parts.map(function (txt) {
    return ACore_({
      tag: 'span',
      child: {
        text: txt
      }
    });
  });
  this.$fileName.clearChild().addChild(parts);
};

FileThumbnail.prototype._updateThumbnail = function () {
  var _this = this;

  var previewUrl;
  var thumbnail = this.thumbnail;
  var fileType = this.isDirectory ? 'folder' : this.fileType;

  if (thumbnail) {
    if (typeof thumbnail === "string") {
      this._previewUrl = thumbnail;
      getThumbnailUrl(thumbnail).then(function (smallerUrl) {
        if (thumbnail !== _this._previewUrl) return;

        _this.$bg.addStyle('backgroundImage', 'url("' + smallerUrl + '")');
      });
    } else if (thumbnail instanceof Blob || thumbnail instanceof File) {
      thumbnail.url = thumbnail.url || URL.createObjectURL(thumbnail);
      this._previewUrl = thumbnail.url;
    }
  }

  if (catalog_namespaceObject.indexOf(fileType) >= 0) {
    previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + fileType + '.svg';
  } else {
    previewUrl = messageinput_MessageInput.iconAssetRoot + '/' + 'blank' + '.svg';
  }

  if (previewUrl) {
    this.$bg.addStyle('backgroundImage', 'url("' + encodeURI(previewUrl) + '")');
  } else {
    this.$bg.removeStyle('backgroundImage');
  }
};

FileThumbnail.property = {};
FileThumbnail.property.value = {
  set: function set(value) {
    value = value || null;
    this._value = value;
    this._valueInfo = fileInfoOf(value);

    this._updateFileName();

    this._updateThumbnail();
  },
  get: function get() {
    return this._value;
  }
};
FileThumbnail.property.fileName = {
  set: function set(value) {
    this._fileName = value;

    this._updateFileName();
  },
  get: function get() {
    return this._fileName || this._valueInfo && this._valueInfo.name || null;
  }
};
FileThumbnail.property.fileType = {
  set: function set(value) {
    this._fileType = value;

    this._updateThumbnail();
  },

  /***
   * @this FileInputBox
   * @return {*}
   */
  get: function get() {
    if (this.isDirectory) return null;
    return this._fileType || this._valueInfo && this._valueInfo.type || null;
  }
};
FileThumbnail.property.checked = {
  set: function set(value) {
    if (value) {
      this.addClass('as-checked');
    } else {
      this.removeClass('as-checked');
    }
  },
  get: function get() {
    return this.hasClass('as-checked');
  }
};
FileThumbnail.property.thumbnail = {
  set: function set(value) {
    this._thumbnail = value || null;

    this._updateThumbnail();
  },
  get: function get() {
    return this._thumbnail;
  }
};
FileThumbnail.property.isDirectory = {
  set: function set(value) {
    if (value) {
      this.addClass('as-is-directory');
    } else {
      this.removeClass('as-is-directory');
    }
  },
  get: function get() {
    return this.hasClass('as-is-directory');
  }
};
absol_acomp_ACore.install(FileThumbnail);
/* harmony default export */ const finder_FileThumbnail = (FileThumbnail);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/finder/Finder.js
function Finder_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Finder_typeof = function _typeof(obj) { return typeof obj; }; } else { Finder_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Finder_typeof(obj); }


































var Finder_isMobile = Detector_BrowserDetector.isMobile;
/***
 * @extends AElement
 * @constructor
 */

function Finder() {
  var _this = this;

  if (Finder_isMobile) this.addClass('as-mobile'); // if (BrowserDetector.isMobile) alert("Chưa hỗ trợ điện thoại!");

  this.$attachhook = ACore_('attachhook').addTo(this);

  this.$attachhook.requestUpdateSize = function () {
    _this.layoutCtn.update();

    _this.navCtrl.notifyVisibleContentItems();
  };

  this.$attachhook.once('attached', function () {
    HTML5_ResizeSystem.add(_this.$attachhook);

    _this.layoutCtn.update();

    _this.navCtrl.onStart();

    _this.navCtrl.notifyVisibleContentItems();

    ContextMenu.auto();
  });
  this.domSignal = new HTML5_DomSignal(ACore_('attachhook').addTo(this));
  this.$header = ACore_$('.as-finder-header', this);
  this.$nomalActionCtn = ACore_$('.as-finder-normal-action-button-ctn', this);
  this.$tinyActionCtn = ACore_$('.as-finder-tiny-action-button-ctn', this);
  this.$contentHeader = ACore_$('.as-finder-content-header', this);
  this.$navCtn = ACore_$('.as-finder-nav-ctn', this);
  this.$nav = ACore_$(ExpGroup.tag, this.$navCtn);
  this.$searchCtn = ACore_$('.as-finder-search-ctn', this);
  this.$contentCtn = ACore_$('.as-finder-content-ctn', this);
  this.$content = ACore_$('.as-finder-content', this);
  this.$body = ACore_$('.as-finder-body', this);
  this.$commandButtons = $$('.as-finder-nav-header button', this).concat($$('.as-finder-content-header button', this)).concat($$('.as-finder-search-footer button', this)).concat($$('.as-finder-search-header button', this)).reduce(function (ac, cr) {
    var name = cr.attr('name');
    ac[name] = cr;

    if (cr.items) {
      //ribbon button
      cr.on('select', function (event) {
        _this.execCommand(name, event.item.value, event.item);
      });
    } else {
      cr.on('click', function () {
        _this.execCommand(name);
      });
    }

    return ac;
  }, {});
  this.$searchTypeSelect = ACore_$('.as-finder-search-type-select', this);
  this.$searchText = ACore_$('.as-finder-search-text', this);
  this.fileSystem = new AbsolFileSystem();
  this.layoutCtn = new Finder_LayoutController(this);
  this.navCtrl = new NavigatorController(this);
  this.selectCtrl = Finder_isMobile ? new MobileSelectController(this) : new SelectController(this);
  this.uploadCtrl = new UploadController(this);
  this.commandCtrl = new CommandController(this);
  this.folderDialog = new FolderDialog(this);
  this.searchCtrl = new SearchController(this);
  /***
   * @type {string}
   * @name displayPath
   * @memberOf Finder#
   */

  /***
   * @type {string}
   * @name path
   * @memberOf Finder#
   */

  /***
   * @type {string}
   * @name rootPath
   * @memberOf Finder#
   */

  /***
   * @type {string}
   * @name accept
   * @memberOf Finder#
   */
}

Finder.tag = 'Finder'.toLowerCase();

Finder.render = function () {
  return ACore_({
    "class": 'as-finder',
    extendEvent: ['selectedchange', 'dblclickfile'],
    attr: {
      'data-selected-file-count': '0',
      'data-selected-folder-count': '0'
    },
    child: [{
      "class": 'as-finder-header',
      child: [{
        "class": 'as-finder-normal-action-button-ctn'
        /* child: Finder.prototype.actions.map(act => ({
             tag: FlexiconButton.tag,
             attr: { name: act.name },
             props: {
                 text: act.text,
                 // icon: act.icon
             }
         }))*/

      }, {
        "class": 'as-finder-tiny-action-button-ctn'
        /*child: Finder.prototype.actions.map(act => ({
            tag: 'button',
            attr: { name: act.name, title: act.text },
            child: act.icon
        }))*/

      }]
    }, {
      "class": ['as-finder-nav-ctn'],
      child: [{
        "class": 'as-finder-nav-header',
        child: [{
          "class": 'as-finder-nav-header-left',
          child: [{
            tag: 'button',
            "class": 'as-transparent-button',
            attr: {
              title: "Close Navigator",
              name: 'nav_toggle'
            },
            child: 'span.mdi.mdi-menu-open'
          }]
        }, {
          "class": 'as-finder-nav-header-right',
          child: [{
            tag: 'button',
            "class": 'as-transparent-button',
            attr: {
              title: "Search",
              name: 'switch_to_search'
            },
            child: 'span.mdi.mdi-magnify'
          }, {
            tag: 'button',
            "class": 'as-transparent-button',
            attr: {
              title: "Expand All",
              name: 'nav_expand_all'
            },
            child: 'span.mdi.mdi-arrow-expand-vertical'
          }, {
            tag: 'button',
            "class": 'as-transparent-button',
            attr: {
              title: "Collapse All",
              name: 'nav_collapse_all'
            },
            child: 'span.mdi.mdi-arrow-collapse-vertical'
          }, {
            tag: 'button',
            "class": 'as-transparent-button',
            attr: {
              title: "Reload",
              name: 'reload'
            },
            child: 'span.mdi.mdi-reload'
          }]
        }]
      }, {
        tag: ExpGroup.tag,
        "class": 'as-bscroller'
      }]
    }, {
      "class": 'as-finder-search-ctn',
      child: [{
        "class": 'as-finder-search-header',
        child: [{
          tag: 'button',
          "class": 'as-transparent-button',
          attr: {
            title: "Close Navigator",
            name: 'nav_toggle'
          },
          child: 'span.mdi.mdi-menu-open'
        }]
      }, {
        "class": 'as-finder-search-body',
        child: [{
          tag: Searcher.tag,
          "class": 'as-finder-search-text'
        }, {
          "class": 'as-finder-search-field',
          child: [{
            child: {
              text: 'Kiểu'
            }
          }, {
            child: {
              tag: 'selectmenu',
              "class": 'as-finder-search-type-select',
              props: {
                items: [{
                  text: 'Tất cả',
                  value: 'all',
                  icon: 'span.mdi.mdi-asterisk'
                }, {
                  text: 'Hình ảnh',
                  value: 'image',
                  icon: 'span.mdi.mdi-image-outline'
                }, {
                  text: 'Tài liệu',
                  value: 'document',
                  icon: 'span.mdi.mdi-file-document'
                }]
              }
            }
          }]
        }, {
          "class": 'as-finder-search-footer',
          child: [{
            tag: js_FlexiconButton.tag,
            attr: {
              name: 'start_search'
            },
            props: {
              text: 'OK'
            }
          }, {
            tag: js_FlexiconButton.tag,
            attr: {
              name: 'cancel_search'
            },
            props: {
              text: 'Hủy'
            }
          }]
        }]
      }]
    }, {
      tag: js_DropZone.tag,
      attr: {
        'data-view-as': 'list'
      },
      "class": ['as-finder-body'],
      child: [{
        "class": 'as-finder-content-header',
        child: [{
          "class": 'as-finder-content-header-left',
          child: [{
            tag: 'button',
            attr: {
              title: 'Open Navigator',
              name: 'nav_toggle'
            },
            "class": 'as-transparent-button',
            child: ['span.mdi.mdi-menu']
          }, {
            tag: js_RibbonButton,
            attr: {
              title: 'View As',
              name: 'content_view_as'
            },
            "class": 'as-transparent-button',
            props: {
              text: 'List',
              icon: 'span.mdi.mdi-format-list-bulleted-square',
              items: [{
                icon: 'span.mdi.mdi-format-list-bulleted-square',
                text: 'List',
                value: 'list'
              }, {
                text: 'Medium Icons',
                icon: 'span.mdi.mdi-grid',
                value: 'content'
              }, {
                text: 'Lage Icons',
                icon: 'span.mdi.mdi-image-outline',
                value: 'lage_icons'
              }]
            } // child: ['span.mdi.mdi-format-list-bulleted-square']

          }]
        }, {
          "class": 'as-finder-content-header-right'
        }]
      }, {
        tag: js_Hanger.tag,
        "class": 'as-finder-content-ctn',
        props: {
          hangOn: 5
        },
        child: {
          "class": ['as-finder-content']
        }
      }, {
        "class": 'as-finder-upload-overlay',
        child: [{
          "class": 'as-finder-upload-overlay-icon-ctn',
          child: 'span.mdi.mdi-cloud-upload-outline'
        }, {
          child: {
            text: 'Thả file vào đây để tải lên'
          }
        }]
      }]
    }]
  });
};

Finder.property = {};
Finder.property.fileSystem = {
  set: function set(fs) {
    this._fileSystem = fs;
  },
  get: function get() {
    return this._fileSystem;
  }
};
Finder.property.path = {
  set: function set(path) {
    this.navCtrl.path = path;
  },
  get: function get() {
    return this.navCtrl.path;
  }
};
Finder.property.displayPath = {
  // set: function (path) {
  //     this.navCtrl.path = path;
  // },
  get: function get() {
    return this.navCtrl.displayPath;
  }
};
Finder.property.rootPath = {
  set: function set(path) {
    this.navCtrl.rootPath = path;
  },
  get: function get() {
    return this.navCtrl.rootPath;
  }
};
Finder.property.selectedFiles = {
  get: function get() {
    return this.selectCtrl.$selectedItems.filter(function (elt) {
      return elt.stat && !elt.stat.isDirectory;
    }).map(function (elt) {
      return elt.stat;
    });
  }
};

Finder.prototype.execCommand = function (name) {
  return this.commandCtrl.execCommand.apply(this.commandCtrl, arguments);
};

Finder.prototype.addCommand = function (name, descriptor) {
  this.commandCtrl.addCommand(name, descriptor);
};

Finder.prototype.addButton = function (name, bf) {
  this.commandCtrl.addButton(name, bf);
};
/****
 *
 * @param {string} name
 * @param {string=} bf
 */


Finder.prototype.addFolderMenuItem = function (name, bf) {
  this.commandCtrl.addFolderMenuItem(name, bf);
};

Finder.prototype.findZIndex = function () {
  var c = this;
  var res = 0;
  var zIndex;

  while (c) {
    zIndex = parseInt(getComputedStyle(c).getPropertyValue('z-index'));
    if (!isNaN(zIndex)) res = Math.max(zIndex, res);
    c = c.parentElement;
  }

  return res;
};

absol_acomp_ACore.install(Finder);
/* harmony default export */ const finder_Finder = (Finder);
var FinderCommands = {};
Finder.prototype.commands = FinderCommands;
FinderCommands.upload = {
  text: 'Tải lên',
  icon: 'span.mdi.mdi-upload-outline',
  match: function match(fileElt) {
    return !fileElt && this.searchCtrl.state !== 'RUNNING' && this.dirStat && this.dirStat.writable;
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    var _this2 = this;

    openFileDialog({
      multiple: true
    }).then(function (files) {
      if (files && files.length > 0) {
        _this2.uploadCtrl.upload(files);
      }
    });
  }
};
FinderCommands.upload_to_folder = {
  text: 'Tải lên',
  icon: 'span.mdi.mdi-upload-outline',
  match: function match(treElt) {
    return treElt && treElt.stat && treElt.stat.writable;
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    var _this3 = this;

    //todo: selected folder
    openFileDialog({
      multiple: true
    }).then(function (files) {
      if (files && files.length > 0) {
        _this3.uploadCtrl.upload(files);
      }
    });
  }
};
FinderCommands["delete"] = {
  icon: 'span.mdi.mdi-delete-outline',
  text: 'Xóa',

  /***
   * @this Finder
   */
  match: function match(fileElt) {
    return fileElt && this.selectCtrl.$selectedItems.length > 0 && this.selectCtrl.$selectedItems.every(function (elt) {
      return elt.stat && !elt.stat.isDirectory && elt.stat.writable;
    });
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    var _this4 = this;

    var paths = this.selectCtrl.$selectedItems.map(function (elt) {
      return elt.stat.path;
    });
    var names = this.selectCtrl.$selectedItems.map(function (elt) {
      return elt.fileName;
    });
    if (names.length === 0) return;

    var contentElt = ACore_({
      style: {
        maxHeight: '50vh',
        overflow: 'auto'
      },
      child: {
        style: {
          display: 'table'
        },
        child: names.map(function (name) {
          return {
            style: {
              display: 'table-row'
            },
            child: [{
              style: {
                display: 'table-cell',
                padding: '5px 20px 5px 10px'
              },
              child: {
                style: {
                  'min-width': '30em'
                },
                child: {
                  text: name
                }
              }
            }, {
              style: {
                display: 'table-cell',
                padding: '5px 10px'
              },
              child: {
                "class": 'as-finder-task-check',
                style: {
                  'min-width': '3em',
                  textAlign: 'right'
                },
                child: 'span'
              }
            }]
          };
        })
      }
    });

    var modal = ACore_({
      tag: js_Modal.tag,
      style: {
        zIndex: this.findZIndex() + 9000
      },
      child: {
        tag: js_MessageDialog.tag,
        props: {
          dialogTitle: 'Xóa file',
          dialogActions: [{
            name: "ok",
            text: "OK"
          }, {
            name: 'cancel',
            text: 'Hủy'
          }]
        },
        child: [{
          child: {
            tag: 'span',
            child: {
              text: "Xác nhận xóa những file dưới đây: "
            }
          }
        }, contentElt],
        on: {
          action: function action(event, sender) {
            var promises;
            var errors = [];

            if (event.action.name === 'ok') {
              sender.$actionBtns[0].disabled = true;
              sender.$actionBtns[0].text = "Đang tiến hành xóa..";
              sender.$actionBtns[1].disabled = true;
              promises = paths.map(function (path, i) {
                return _this4.fileSystem.unlink(path).then(function () {
                  ACore_$('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild(ACore_('span.mdi.mdi-check'));
                })["catch"](function (err) {
                  errors.push(err);
                  ACore_$('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild(ACore_('span.mdi.mdi-alert-decagram-outline')).addChild(ACore_({
                    tag: 'span',
                    "class": '.as-finder-task-error-message',
                    child: {
                      text: err.message
                    }
                  }));
                });
              });
              Promise.all(promises).then(function () {
                var commands = {};

                if (errors.length > 0) {
                  errors.forEach(function (err) {
                    if (err.command) {
                      commands[err.command] = true;
                    }
                  });
                  if (commands.reload) _this4.execCommand('reload');
                  sender.$actionBtns[1].disabled = false;
                  sender.$actionBtns[0].text = "Hoàn thành";
                } else {
                  _this4.navCtrl.reload(_this4.path, true).then(function () {
                    return modal.remove();
                  });
                }
              });
            } else {
              modal.remove();
            }
          }
        }
      }
    }).addTo(document.body);
  }
};
FinderCommands.view = {
  icon: 'span.mdi.mdi-eye-outline',
  text: 'Xem',
  match: function match(fileElt) {
    return !!fileElt;
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    var elt = this.selectCtrl.$selectedItems[0];
    if (!elt) return;

    if (elt.stat.isDirectory) {
      this.navCtrl.viewDir(elt.stat.path);
      return;
    }

    var url = elt.stat.url;
    if (!url) return;
    var type = elt.fileType;

    if (type === 'xlsx' || type === 'docx' || type === 'xls' || type === 'doc' || type === 'ppt' || type === 'pptx') {
      url = 'https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(url);
    } else {
      url = encodeURI(url);
    }

    var mineType = Converter_ext2MineType[type] || 'none';
    var content;

    if (mineType.startsWith('video')) {
      content = ACore_({
        tag: 'video',
        style: {
          maxWidth: 'calc(90vw - 20px)',
          maxHeight: 'calc(90vh - 80px)',
          width: '900px',
          height: 'auto'
        },
        attr: {
          autoplay: 'true',
          controls: 'true'
        },
        props: {
          src: url
        }
      });
    } else if (mineType.startsWith('audio')) {
      content = ACore_({
        tag: 'audio',
        style: {
          margin: '5px'
        },
        attr: {
          autoplay: 'true',
          controls: 'true'
        },
        props: {
          src: url
        }
      });
    } else if (mineType.startsWith('image')) {
      content = ACore_({
        tag: 'img',
        style: {
          maxWidth: 'calc(90vw - 20px)',
          maxHeight: 'calc(90vh - 80px)',
          width: 'auto',
          height: 'auto'
        },
        attr: {},
        props: {
          src: url
        }
      });
    } else {
      content = ACore_({
        tag: 'iframe',
        style: {
          maxWidth: 'calc(90vw - 20px)',
          maxHeight: 'calc(90vh - 80px)',
          width: '900px',
          height: '600px'
        },
        props: {
          src: url,
          onload: function onload() {// console.log(this.contentWindow.document.body.offsetHeight, this.contentWindow.document.body.offsetWidth)
          }
        }
      });
    }

    var modal = ACore_({
      tag: js_Modal.tag,
      style: {
        zIndex: this.findZIndex() + 9000
      },
      child: {
        tag: js_WindowBox.tag,
        child: content,
        props: {
          windowTitle: elt.stat.displayName || elt.stat.name,
          windowActions: [{
            name: 'close',
            icon: 'span.mdi.mdi-close'
          }]
        },
        on: {
          action: function action() {
            modal.remove();
          }
        }
      }
    }).addTo(document.body);
  }
};
FinderCommands.download = {
  icon: 'span.mdi.mdi-download-outline',
  text: 'Tải về',
  match: function match(elt) {
    return elt && this.selectCtrl.$selectedItems.length > 0 && this.selectCtrl.$selectedItems.every(function (elt) {
      return elt.stat && !elt.stat.isDirectory;
    });
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    var taskMng = new AppPattern_TaskManager({
      limit: 4
    });
    this.selectCtrl.$selectedItems.forEach(function (elt) {
      if (elt.isDirectory) return;
      var url = elt.stat.url;
      if (!url) return;
      taskMng.requestTask(function (onFinish, bundle) {
        FileSaver_saveAs(bundle.url, bundle.name);
        setTimeout(onFinish, 100);
      }, {
        url: url,
        name: elt.fileName
      });
    });
  }
};
FinderCommands.rename = {
  icon: 'span.mdi.mdi-rename',
  text: 'Đổi tên',

  /***
   * @this Finder
   */
  match: function match(elt) {
    return elt && this.selectCtrl.$selectedItems.length === 1 && elt.stat && !elt.stat.isDirectory && elt.stat.writable; //todo: rename folder
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    var _this5 = this;

    var elt = this.selectCtrl.$selectedItems[0];
    if (!elt) return;
    var path = elt.stat.path;
    var value = elt.fileName;

    var input = ACore_({
      tag: js_TextArea2.tag,
      style: {
        outline: 'none',
        position: 'absolute',
        zIndex: 100,
        left: 0,
        bottom: 0,
        width: '100%'
      },
      props: {
        value: elt.fileName
      },
      on: {
        blur: function blur() {
          var newValue = input.value.replace(/<>:\\\/\|\?\*\^/g, '').trim();
          input.remove();
          if (!value) return;
          if (value === newValue) return;

          _this5.fileSystem.rename(path, newValue).then(function (newStat) {
            elt.stat = newStat;
            elt.value = newStat.url;
            elt.fileName = newStat.displayName || newStat.name;
          });
        }
      }
    });

    elt.addChild(input);
    input.on('keydown', function (event) {
      if (event.key.match(/<>:\\\/\|\?\*\^/)) {
        event.preventDefault();
        setTimeout(function () {
          return input.updateSize();
        }, 30);
      } else if (event.key === 'Enter') {
        input.blur();
      } else if (event.key === 'Escape') {
        input.value = value;
        input.updateSize();
        input.blur();
      }
    }, true);
    input.updateSize();
    input.focus();
    var ext = value.match(/\.[a-zA-Z0-9]+$/);

    if (ext) {
      ext = ext[0];
    } else {
      ext = '';
    }

    input.setSelectionRange(0, value.length - ext.length);
  }
};
FinderCommands.copy = {
  icon: 'span.mdi.mdi-content-copy',
  text: 'Sao chép',
  exec: function exec() {}
};
FinderCommands.move = {
  text: 'Di chuyển',
  icon: 'span.mdi.mdi-file-move-outline',
  match: function match(fileElt) {
    if (arguments.length === 0) {
      return this.selectCtrl.$selectedItems.every(function (elt) {
        return elt.stat.writable;
      });
    }

    return fileElt && fileElt.stat && fileElt.stat.writable;
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    var _this6 = this;

    var itemElements = this.selectCtrl.$selectedItems.slice();
    var paths = itemElements.map(function (elt) {
      return elt.stat.path;
    });
    var names = itemElements.map(function (elt) {
      return elt.fileName;
    });
    if (names.length === 0) return;
    var currentFolderPath = this.path;
    this.folderDialog.open(currentFolderPath, false, function (newFolderPath, stat) {
      return newFolderPath !== currentFolderPath && stat.writable;
    }, 'Di chuyển file').then(function (newFolderPath) {
      if (!newFolderPath) return;
      if (newFolderPath === currentFolderPath) return;

      var contentElt = ACore_({
        style: {
          maxHeight: '50vh',
          overflow: 'auto'
        },
        child: {
          style: {
            display: 'table'
          },
          child: names.map(function (name) {
            return {
              style: {
                display: 'table-row'
              },
              child: [{
                style: {
                  display: 'table-cell',
                  padding: '5px 20px 5px 10px'
                },
                child: {
                  style: {
                    'min-width': '30em'
                  },
                  child: {
                    text: name
                  }
                }
              }, {
                style: {
                  display: 'table-cell',
                  padding: '5px 10px'
                },
                child: {
                  "class": 'as-finder-task-check',
                  style: {
                    'min-width': '3em',
                    textAlign: 'right'
                  },
                  child: 'span'
                }
              }]
            };
          })
        }
      });

      var modal = ACore_({
        tag: js_Modal.tag,
        style: {
          zIndex: _this6.findZIndex() + 9000
        },
        child: {
          tag: js_MessageDialog.tag,
          props: {
            dialogTitle: 'Di chuyển file',
            dialogActions: [{
              name: 'close',
              text: 'Đóng'
            }]
          },
          child: [{
            child: {
              tag: 'span',
              child: {
                text: "Danh sách đang di chuyển: "
              }
            }
          }, contentElt],
          on: {
            action: function action(event, sender) {
              modal.remove();
            }
          }
        }
      }).addTo(document.body);

      var errors = [];
      var promises = paths.map(function (path, i) {
        var newPath = newFolderPath + '/' + path.split('/').pop();
        return _this6.fileSystem.move(path, newPath).then(function () {
          ACore_$('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild(ACore_('span.mdi.mdi-check'));
        })["catch"](function (err) {
          errors.push(err);
          ACore_$('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild(ACore_('span.mdi.mdi-alert-decagram-outline')).addChild(ACore_({
            tag: 'span',
            "class": '.as-finder-task-error-message',
            child: {
              text: err.message
            }
          }));
        });
      });
      Promise.all(promises).then(function () {
        var commands = {};

        if (errors.length > 0) {
          errors.forEach(function (err) {
            if (err.command) {
              commands[err.command] = true;
            }
          });
          if (commands.reload) _this6.execCommand('reload');
        } else {
          _this6.navCtrl.reload(_this6.path, true).then(function () {
            return modal.remove();
          });
        }
      });
    });
  }
};
FinderCommands.move_dir = {
  text: 'Di chuyển',
  icon: 'span.mdi.mdi-folder-arrow-right-outline',
  match: function match(expElt) {
    return expElt && expElt.stat && expElt.stat.writable && !expElt.stat.isVirtual;
  },

  /***
   * @this Finder
   */
  exec: function exec(expElt) {
    var _this7 = this;

    var path = expElt.stat.path;
    var currentFolderPath = path.split('/');
    var name = currentFolderPath.pop();
    currentFolderPath = currentFolderPath.join('/');
    this.folderDialog.open(currentFolderPath, true, function (newPath) {
      return !newPath.startsWith(path);
    }, 'Di chuyển thư mục').then(function (newFolderPath) {
      if (!newFolderPath) return;
      return _this7.fileSystem.move(path, newFolderPath + '/' + name).then(function () {
        _this7.path = newFolderPath + '/' + name;

        _this7.navCtrl.reload(_this7.rootPath).then(function () {
          _this7.navCtrl.viewDir(_this7.path);
        });
      });
    });
  }
};
FinderCommands.rmdir = {
  text: 'Xóa',
  icon: 'span.mdi.mdi-delete-outline',

  /***
   * @this Finder
   * @param elt
   */
  match: function match(elt) {
    if (elt.stat && elt.stat.isVirtual) return false;
    if (elt) return elt.stat && elt.stat.writable;
    return false;
  },
  exec: function exec(elt) {}
};
FinderCommands.select_all = {
  text: 'Chọn tất cả',
  icon: 'span.mdi.mdi-select-all',
  match: function match(fileElt) {
    return !fileElt;
  },

  /***
   * @this Finder
   */
  exec: function exec() {
    this.selectCtrl.selectAll();
  }
};
FinderCommands.nav_expand_all = {
  /***
   * @this Finder
   */
  exec: function exec() {
    this.navCtrl.expandAll();
  }
};
FinderCommands.nav_collapse_all = {
  /***
   * @this Finder
   */
  exec: function exec() {
    this.navCtrl.collapseAll();
  }
};
FinderCommands.reload = {
  /***
   * @this Finder
   */
  exec: function exec() {
    var _this8 = this;

    this.fileSystem.clearCache();
    this.navCtrl.reload().then(function () {
      _this8.navCtrl.viewDir(_this8.path);
    });
  }
};
FinderCommands.content_view_as = {
  /***
   * @this Finder
   */
  exec: function exec(value, item) {
    this.$commandButtons['content_view_as'].text = item.text;
    this.$commandButtons['content_view_as'].icon = item.icon;
    this.$body.attr('data-view-as', value);
  }
};
FinderCommands.switch_to_search = {
  /***
   * @this Finder
   */
  exec: function exec() {
    this.searchCtrl.start();
  }
};
FinderCommands.cancel_search = {
  /***
   * @this Finder
   */
  exec: function exec() {
    this.searchCtrl.stop();
    this.navCtrl.viewDir(this.path);
  }
};
FinderCommands.start_search = {
  /***
   * @this Finder
   */
  exec: function exec() {
    this.searchCtrl.search();
  }
};
FinderCommands.nav_toggle = {
  icon: 'span.mdi.mdi-menu',
  exec: function exec() {
    if (this.hasClass('as-nav-open')) {
      this.removeClass('as-nav-open');
    } else {
      this.addClass('as-nav-open');
    }
  }
};
/***
 *
 * @param {Finder} elt
 * @constructor
 */

function Finder_LayoutController(elt) {
  this.elt = elt;
  this.actionButtonWidth = 0;
  this.elt.domSignal.on('requestUpdateActionButtonSize', this.updateActionButtonSize.bind(this));
  this.elt.on('click', this.ev_click.bind(this));
}

Finder_LayoutController.prototype.requestUpdateActionButtonSize = function () {
  this.elt.domSignal.emit('requestUpdateActionButtonSize');
};

Finder_LayoutController.prototype.updateActionButtonSize = function () {
  var font = this.elt.$nomalActionCtn.getComputedStyleValue('font');
  var fontSize = this.elt.$nomalActionCtn.getFontSize();
  this.actionButtonWidth = Array.prototype.reduce.call(this.elt.$nomalActionCtn.childNodes, function (ac, cr) {
    return ac + Math.max(110, 0.715 * fontSize * 2 + utils_measureText(cr.text, font).width) + 10;
  }, 60);
  this.update();
};

Finder_LayoutController.prototype.update = function () {
  var bound = this.elt.getBoundingClientRect();

  if (bound.width < 500) {
    if (!this.elt.hasClass('as-mini-layout')) this.elt.addClass('as-mini-layout');
  } else {
    if (this.elt.hasClass('as-mini-layout')) {
      this.elt.removeClass('as-mini-layout');
      this.elt.removeClass('as-nav-open');
    }
  }

  if (this.elt.hasClass('as-action-button-minimized')) {
    if (this.actionButtonWidth <= bound.width) {
      this.elt.removeClass('as-action-button-minimized');
    }
  } else {
    if (this.actionButtonWidth > bound.width) {
      this.elt.addClass('as-action-button-minimized');
    }
  }

  var bodyBound = this.elt.$body.getBoundingClientRect();
  var col = Math.floor(bodyBound.width / 300) || 1;
  this.elt.$body.addStyle('--col', col + '');
};

Finder_LayoutController.prototype.ev_click = function (event) {
  if (event.target === this.elt) {
    this.elt.removeClass('as-nav-open');
  }
};
/***
 *
 * @param {Finder} elt
 * @constructor
 */


function CommandController(elt) {
  var _this9 = this;

  Object.keys(this.constructor.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) {
      _this9[key] = _this9[key].bind(_this9);
    }
  });
  this.elt = elt;
  this.$normalActionCtn = this.elt.$nomalActionCtn;
  this.$tinyActionCtn = this.elt.$tinyActionCtn;
  this.commands = Object.assign({}, this.elt.commands);
  this.buttonNames = ['upload', 'view', 'download', 'move', 'rename', 'delete'];
  this.folderMenuItemNames = ['upload_to_folder', 'move_dir'];
  this.contentMenuItemNames = ['view', 'download', 'upload', 'select_all', 'move', 'delete', 'rename'];
  this.$navCtn = this.elt.$navCtn;
  this.$navCtn.defineEvent('contextmenu').on('contextmenu', this.ev_navContextMenu);
  this.$contentCtn = this.elt.$contentCtn;
  this.$contentCtn.defineEvent('contextmenu').on('contextmenu', this.ev_contentContextMenu);
  this.updateButtons();
}

CommandController.prototype.updateButtons = function () {
  var _this10 = this;

  this.$normalActionCtn.clearChild();
  var buttons = this.buttonNames.map(function (name) {
    var desc = _this10.commands[name] || {};
    return ACore_({
      tag: js_FlexiconButton.tag,
      attr: {
        name: name
      },
      props: {
        text: desc.text || name
      },
      on: {
        click: function click() {
          _this10.execCommand(name);
        }
      }
    });
  });
  this.$normalActionCtn.addChild(buttons);
  buttons = this.buttonNames.map(function (name) {
    var desc = _this10.commands[name] || {};
    return ACore_({
      tag: 'button',
      "class": 'as-transparent-button',
      attr: {
        name: name
      },
      child: desc.icon,
      on: {
        click: function click() {
          _this10.execCommand(name);
        }
      }
    });
  });
  this.$tinyActionCtn.addChild(buttons);
  this.elt.layoutCtn.requestUpdateActionButtonSize();
};

CommandController.prototype.execCommand = function (name) {
  var args = Array.prototype.slice.call(arguments, 1);
  var desc = this.commands[name];

  if (desc && typeof desc.exec === 'function') {
    return desc.exec.apply(this.elt, args);
  }

  return null;
};

CommandController.prototype.addCommand = function (name, desc) {
  this.commands[name] = Object.assign({}, this.commands[name], desc);
};
/****
 *
 * @param {string} name
 * @param {string=} bf
 */


CommandController.prototype.addButton = function (name, bf) {
  var _this11 = this;

  var idx = this.buttonNames.indexOf(bf);
  var bfElt, smallBfElt;

  if (idx >= 0) {
    this.buttonNames.splice(idx, 0, name);
    bfElt = ACore_$("button[name=\"".concat(name, "\"]"), this.$normalActionCtn);
    smallBfElt = ACore_$("button[name=\"".concat(name, "\"]"), this.$tinyActionCtn);
  } else {
    this.buttonNames.push(name);
  }

  var desc = this.commands[name] || {};
  this.$normalActionCtn.addChildBefore(ACore_({
    tag: js_FlexiconButton.tag,
    attr: {
      name: name
    },
    props: {
      text: desc.text || name
    },
    on: {
      click: function click() {
        _this11.execCommand(name);
      }
    }
  }), bfElt);
  this.$tinyActionCtn.addChild(ACore_({
    tag: 'button',
    "class": 'as-transparent-button',
    attr: {
      name: name
    },
    child: desc.icon,
    on: {
      click: function click() {
        _this11.execCommand(name);
      }
    }
  }), smallBfElt);
  this.elt.layoutCtn.requestUpdateActionButtonSize();
};
/****
 *
 * @param {string} name
 * @param {string=} bf
 */


CommandController.prototype.addFolderMenuItem = function (name, bf) {
  idx = this.folderMenuItemNames.indexOf(name);
  if (idx >= 0) return;
  var idx = this.folderMenuItemNames.indexOf(bf);
  if (idx >= 0) this.folderMenuItemNames.splice(idx, 0, name);else this.folderMenuItemNames.push(name);
};
/****
 *
 * @param {string} name
 * @param {string=} bf
 */


CommandController.prototype.addContentMenuItem = function (name, bf) {
  idx = this.folderMenuItemNames.indexOf(name);
  if (idx >= 0) return; //todo

  var idx = this.folderMenuItemNames.indexOf(bf);
  if (idx >= 0) this.folderMenuItemNames.splice(idx, 0, name);else this.folderMenuItemNames.push(name);
};

CommandController.prototype.ev_navContextMenu = function (event) {
  var _this12 = this;

  var expTree;
  var c = event.target;

  while (c && !expTree) {
    if (c.stat) expTree = c;
    c = c.parentElement;
  }

  if (expTree) this.elt.navCtrl.viewDir(expTree.stat.path, [this.elt.rootPath].concat(expTree.getPath()).join('/'));
  var items = this.folderMenuItemNames.map(function (name) {
    var desc = _this12.commands[name];
    if (!desc) return null;

    if (typeof desc.match === "function") {
      if (!desc.match.call(_this12.elt, expTree)) return null;
    }

    return {
      text: desc.text,
      icon: desc.icon,
      cmd: name
    };
  }).filter(function (x) {
    return !!x;
  });

  if (items.length > 0) {
    event.showContextMenu({
      items: items
    }, function (event) {
      var cmd = event.menuItem.cmd;

      _this12.execCommand(cmd, expTree);
    });
  }
};

CommandController.prototype.ev_contentContextMenu = function (event) {
  var _this13 = this;

  var fileElt;
  var c = event.target;

  while (c && !fileElt) {
    if (c.stat) fileElt = c;
    c = c.parentElement;
  }

  var selectedElements = this.elt.selectCtrl.$selectedItems;

  if (fileElt && selectedElements.indexOf(fileElt) < 0) {
    this.elt.selectCtrl.deselectAll();
    this.elt.selectCtrl.select(fileElt);
  } // if (expTree) this.elt.navCtrl.viewDir(expTree.stat.path, [this.elt.rootPath].concat(expTree.getPath()).join('/'));


  var items = this.contentMenuItemNames.map(function (name) {
    var desc = _this13.commands[name];
    if (!desc) return null;

    if (typeof desc.match === "function") {
      if (!desc.match.call(_this13.elt, fileElt)) return null;
    }

    return {
      text: desc.text,
      icon: desc.icon,
      cmd: name
    };
  }).filter(function (x) {
    return !!x;
  });

  if (items.length > 0) {
    event.showContextMenu({
      items: items
    }, function (event) {
      var cmd = event.menuItem.cmd;

      _this13.execCommand(cmd, fileElt);
    });
  }
};
/***
 * for desktop
 * @param {Finder} elt
 * @constructor
 */


function SelectController(elt) {
  var _this14 = this;

  this.elt = elt;
  this.$selectedItems = []; // first element is focus

  this.$content = this.elt.$content;
  this.$contentCtn = this.elt.$contentCtn;
  Object.keys(this.constructor.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) {
      _this14[key] = _this14[key].bind(_this14);
    }
  });

  this._setupSelectTool();
}
/***
 *
 * @protected
 */


SelectController.prototype._setupSelectTool = function () {
  this._draged = false;
  this._dragOffset = new Math_Vec2(0, 0);
  this.$selectArea = ACore_('.as-finder-select-area');
  this.$contentCtn.on('draginit', this.ev_dragInit).on('dragdeinit', this.ev_dragDeinit).on('dragstart', this.ev_dragStart).on('drag', this.ev_drag).on('dragend', this.ev_dragEnd);
};

SelectController.prototype.deselectAll = function () {
  while (this.$selectedItems.length > 0) {
    this.$selectedItems.pop().checked = false;
  }

  this._updateCount();

  this.elt.emit('selectedchange');
};

SelectController.prototype.select = function (elt) {
  //todo: more option
  this.deselectAll();
  this.$selectedItems.push(elt);
  elt.checked = true;

  this._updateCount();

  this.elt.emit('selectedchange');
};

SelectController.prototype.selectAll = function () {
  //todo: more option
  this.deselectAll();
  var fileElements = Array.prototype.slice.call(this.$content.childNodes);
  this.$selectedItems.push.apply(this.$selectedItems, fileElements);
  fileElements.forEach(function (elt) {
    elt.checked = true;
  });

  this._updateCount();

  this.elt.emit('selectedchange');
};

SelectController.prototype.ev_dragInit = function (event) {
  if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {
    event.cancel();
    return;
  } // event.preventDefault();


  this._draged = false;
};

SelectController.prototype.ev_dragDeinit = function (event) {
  if (!this._draged) this.ev_click(event);
};

SelectController.prototype.ev_dragStart = function (event) {
  this._draged = true;
  this.elt.addClass('as-dragging');
  this.$selectArea.addStyle('z-index', this.elt.findZIndex() + 100 + '').addTo(document.body);
  var bound = Math_Rectangle.fromClientRect(this.$content.getBoundingClientRect());
  this._dragOffset = event.currentPoint.sub(bound.A());
  var pos = bound.A().add(this._dragOffset);
  this.$selectArea.addStyle({
    left: pos.x + 'px',
    top: pos.y + 'px'
  });
};

SelectController.prototype.ev_drag = function (event) {
  this._draged = true;
  var bound = Math_Rectangle.fromClientRect(this.$content.getBoundingClientRect());
  var A = bound.A().add(this._dragOffset);
  var C = event.currentPoint;
  var sRect = Math_Rectangle.boundingPoints([A, C]);
  this.$selectArea.addStyle({
    left: sRect.x + 'px',
    top: sRect.y + 'px',
    width: sRect.width + 'px',
    height: sRect.height + 'px'
  });
};

SelectController.prototype.ev_dragEnd = function () {
  var _this15 = this;

  while (this.$selectedItems.length > 0) {
    this.$selectedItems.pop().checked = false;
  }

  var selectBound = Math_Rectangle.fromClientRect(this.$selectArea.getBoundingClientRect());
  Array.prototype.forEach.call(this.$content.childNodes, function (elt) {
    var bound = Math_Rectangle.fromClientRect(elt.getBoundingClientRect());

    if (selectBound.isCollapse(bound, 0)) {
      _this15.$selectedItems.push(elt);

      elt.checked = true;
    }
  });
  this._draged = true;
  this.$selectArea.remove();
  this.elt.removeClass('as-dragging');

  this._updateCount();

  this.elt.layoutCtn.update();
  this.elt.emit('selectedchange');
};

SelectController.prototype._updateCount = function () {
  var folderCount = this.$selectedItems.filter(function (elt) {
    return elt.stat.isDirectory;
  }).length;
  this.elt.attr('data-selected-file-count', this.$selectedItems.length - folderCount + '');
  this.elt.attr('data-selected-folder-count', folderCount + '');
};

SelectController.prototype.ev_click = function (event) {
  event = event.originalEvent || event.originEvent || event;
  var c = event.target;
  var itemElt;

  while (c && !itemElt) {
    if (c.hasClass && c.hasClass('as-file-thumbnail')) {
      itemElt = c;
      break;
    }

    c = c.parentElement;
  }

  var focusIdx;
  var currentIdx;

  if (this.$selectedItems.length === 0 && itemElt) {
    this.$selectedItems.push(itemElt);
    itemElt.checked = true;
  } else if (isMouseRight(event)) {} else if (!event.ctrlKey && !event.shiftKey) {
    while (this.$selectedItems.length > 0) {
      this.$selectedItems.pop().checked = false;
    }

    if (itemElt) {
      this.$selectedItems.push(itemElt);
      itemElt.checked = true;
    }
  } else if (event.shiftKey) {
    if (itemElt) {
      focusIdx = Array.prototype.indexOf.call(this.$content.childNodes, this.$selectedItems[0]);
      currentIdx = Array.prototype.indexOf.call(this.$content.childNodes, itemElt);

      while (this.$selectedItems.length > 1) {
        this.$selectedItems.pop().checked = false;
      }

      while (currentIdx !== focusIdx) {
        itemElt = this.$content.childNodes[currentIdx];
        this.$selectedItems.push(itemElt);
        itemElt.checked = true;
        if (currentIdx < focusIdx) currentIdx++;else currentIdx--;
      }
    }
  } else if (event.ctrlKey) {
    if (itemElt) {
      currentIdx = this.$selectedItems.indexOf(itemElt);

      if (currentIdx >= 0) {
        this.$selectedItems.splice(currentIdx, 1);
        itemElt.checked = false;
      } else {
        this.$selectedItems.unshift(itemElt);
        itemElt.checked = true;
      }
    }
  }

  this._updateCount();

  this.elt.layoutCtn.update();
  this.elt.emit('selectedchange');
};
/***
 * @extends SelectController
 * @param elt
 * @constructor
 */


function MobileSelectController(elt) {
  SelectController.apply(this, arguments);
}

HTML5_OOP.mixClass(MobileSelectController, SelectController);

MobileSelectController.prototype._setupSelectTool = function () {
  this.$content.on('click', this.ev_click);
};
/***
 *
 * @param {Finder} elt
 * @constructor
 */


function UploadController(elt) {
  var _this16 = this;

  /***
   *
   * @type {Finder}
   */
  this.elt = elt;
  this.$body = this.elt.$body;
  Object.keys(this.constructor.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) {
      _this16[key] = _this16[key].bind(_this16);
    }
  });
  this.$body.on({
    fileenter: this.ev_fileEnter,
    filedrop: this.ev_fileDrop
  });
}

UploadController.prototype.upload = function (files) {
  var _this17 = this;

  var screenSize = getScreenSize();

  var contentElt = ACore_({
    style: {
      maxHeight: '50vh',
      overflow: 'auto'
    },
    child: {
      style: {
        display: 'table'
      },
      child: files.map(function (file) {
        return {
          style: {
            display: 'table-row'
          },
          child: [{
            style: {
              display: 'table-cell',
              padding: '5px 20px 5px 10px'
            },
            child: {
              style: {
                'width': Math.min(screenSize.width - 180, 800) / 14 + 'em',
                textOverflow: 'ellipsis',
                overflow: 'hidden'
              },
              child: {
                text: file.name
              }
            }
          }, {
            style: {
              display: 'table-cell',
              padding: '5px 10px'
            },
            child: {
              "class": 'as-upload-percent',
              style: {
                'min-width': '3em',
                textAlign: 'right',
                color: 'rgb(30,237,219)'
              },
              child: {
                text: ''
              }
            }
          }]
        };
      })
    }
  });

  var modal = ACore_({
    tag: js_Modal.tag,
    style: {
      zIndex: this.elt.findZIndex() + 9000
    },
    child: {
      tag: js_MessageDialog.tag,
      props: {
        dialogTitle: 'Tải lên'
      },
      child: contentElt
    }
  }).addTo(document.body);

  var syncs = files.map(function (file, i) {
    var percentText = ACore_$('.as-upload-percent', contentElt.firstChild.childNodes[i]);
    return _this17.elt.fileSystem.writeFile(_this17.elt.path + '/' + file.name, file, function (done) {
      var textBound = percentText.getBoundingClientRect();
      var ctnBound = contentElt.getBoundingClientRect();

      if (textBound.bottom > ctnBound.bottom) {
        contentElt.scrollTop += textBound.bottom - ctnBound.bottom;
      }

      percentText.firstChild.data = Math.round(done * 100) + '%';
    });
  });
  Promise.all(syncs).then(function () {
    _this17.elt.navCtrl.reload(_this17.elt.path, true).then(function () {
      return modal.remove();
    });
  });
};

UploadController.prototype.ev_fileEnter = function (event) {
  var files = Array.prototype.slice.call(event.dataTransfer.files);
  if (files.length === 0) return;
};

UploadController.prototype.ev_fileDrop = function (event) {
  if (this.elt.searchCtrl.state === "RUNNING") return;
  var files = event.files;
  if (files.length > 0) this.upload(files);
};
/***
 * @extends EventEmitter
 * @param {Finder} elt
 * @constructor
 */


function FolderDialog(elt) {
  HTML5_EventEmitter.call(this);
  this.elt = elt;
}

HTML5_OOP.mixClass(FolderDialog, HTML5_EventEmitter);

FolderDialog.prototype._init = function () {
  if (this.$modal) return;
  this.$modal = ACore_({
    tag: 'modal',
    "class": 'as-finder-folder-dialog-modal',
    child: {
      tag: js_MessageDialog.tag,
      props: {
        dialogTitle: 'Duyệt thư mục',
        dialogActions: [{
          name: 'ok',
          text: 'OK'
        }, {
          name: 'cancel',
          text: 'Hủy'
        }]
      },
      child: [{
        "class": 'as-finder-folder-dialog-content',
        child: [{
          "class": 'as-finder-folder-dialog-selected-ctn',
          child: [{
            tag: 'span',
            child: {
              text: 'Đã chọn thư mục: '
            }
          }, {
            tag: 'span',
            child: {
              text: ' ... '
            }
          }]
        }, {
          "class": 'as-finder-folder-dialog-tree-ctn',
          child: [{
            tag: ExpGroup.tag
          }, {
            tag: ExpTree.tag,
            "class": 'as-finder-folder-dialog-tree-root',
            props: {
              name: 'root',
              icon: 'span.mdi.mdi-harddisk'
            }
          }]
        }]
      }]
    }
  });
  this.$dialog = ACore_$(js_MessageDialog.tag, this.$modal);
  this.$treeCtn = ACore_$('.as-finder-folder-dialog-tree-ctn', this.$modal);
  this.$rootTree = ACore_$('.as-finder-folder-dialog-tree-root', this.$modal);
  this.$content = ACore_$('.as-finder-folder-dialog-content', this.$modal);
  this.$expGroup = ACore_$(ExpGroup.tag, this.$content);
  this.$selectedCtn = ACore_$('.as-finder-folder-dialog-selected-ctn', this.$content);
  this.$selectedPath = this.$selectedCtn.childNodes[1];
  this.$activeNode = null;
};

FolderDialog.prototype.open = function (initPath, showRoot, checkFunc, title) {
  var _this18 = this;

  var cPath = initPath;

  this._init();

  var fileSystem = this.elt.fileSystem;
  var zIndex = this.elt.findZIndex() + 9000;
  this.$modal.addStyle('z-index', zIndex + '');
  this.$modal.addTo(document.body);

  if (this.$activeNode) {
    this.$activeNode.active = false;
    this.$activeNode = null;
  }

  this.$dialog.$actionBtns[0].disabled = true;
  this.$dialog.dialogTitle = title || 'Duyệt';

  var makeTree = function makeTree(path, ctnElt, level) {
    level = level || 0;
    return fileSystem.readDir(path).then(function (dirs) {
      return Promise.all(dirs.map(function (dir) {
        return fileSystem.stat(path + '/' + dir);
      }));
    }).then(function (stats) {
      return stats.filter(function (stat) {
        return stat.isDirectory;
      });
    }).then(function (stats) {
      var syncs = [];
      ctnElt.clearChild();
      var children = stats.map(function (stat) {
        var nodePath = path + '/' + stat.name;

        var node = ACore_({
          tag: ExpTree.tag,
          props: {
            stat: stat,
            name: stat.displayName || stat.name,
            icon: {
              tag: 'img',
              props: {
                src: messageinput_MessageInput.iconAssetRoot + '/folder.svg'
              }
            },
            path: nodePath
          },
          on: {
            statuschage: function statuschage() {},
            press: function press() {
              if (_this18.$activeNode) _this18.$activeNode.active = false;
              _this18.$activeNode = node;
              _this18.$activeNode.active = true;
              _this18.$selectedPath.firstChild.data = node.getPath().join('/');
              cPath = nodePath;

              if (checkFunc && !checkFunc(cPath, stat)) {
                _this18.$dialog.$actionBtns[0].disabled = true;
              } else {
                _this18.$dialog.$actionBtns[0].disabled = false;
              }
            }
          }
        });

        if (nodePath === cPath) {
          node.active = true;
          _this18.$activeNode = node;
        }

        if (checkFunc && !checkFunc(nodePath, stat)) {
          node.getNode().addStyle('opacity', 0.3 + '');
        }

        node.getNode().on({
          dblclick: function dblclick() {
            if (node.status === 'close') {
              node.status = 'open';
            } else if (node.status === 'open') {
              node.status = 'close';
            }
          }
        });
        if (stat.name !== 'node_modules') syncs.push(makeTree(nodePath, node, level + 1));
        return node;
      });
      children.forEach(function (c) {
        ctnElt.addChild(c);
      });

      if (children.length) {
        ctnElt.status = level > 1 ? 'close' : 'open';
      } else {
        ctnElt.status = 'none';
      }

      return Promise.all(syncs);
    });
  };

  var onRootPress;

  if (showRoot) {
    this.$expGroup.addStyle('display', 'none');
    this.$rootTree.removeStyle('display');

    if (cPath === this.elt.rootPath) {
      this.$activeNode = this.$rootTree;
      this.$activeNode.active = true;
    }

    onRootPress = function onRootPress() {
      var node = _this18.$rootTree;
      var nodePath = _this18.elt.rootPath;
      if (_this18.$activeNode) _this18.$activeNode.active = false;
      _this18.$activeNode = node;
      _this18.$activeNode.active = true;
      _this18.$selectedPath.firstChild.data = node.getPath().join('/');
      cPath = nodePath;

      if (cPath === initPath || checkFunc && !checkFunc(cPath, {
        writable: true
      })) {
        _this18.$dialog.$actionBtns[0].disabled = true;
      } else {
        _this18.$dialog.$actionBtns[0].disabled = false;
      }
    };

    this.$rootTree.on('press', onRootPress);
  } else {
    this.$expGroup.removeStyle('display');
    this.$rootTree.addStyle('display', 'none');
  }

  makeTree(this.elt.rootPath, showRoot ? this.$rootTree : this.$expGroup).then(function () {
    var p;

    if (_this18.$activeNode) {
      _this18.$selectedPath.firstChild.data = _this18.$activeNode.getPath().join('/');
      p = _this18.$activeNode.getParent();

      while (p) {
        if (p.status === 'close') {
          p.status = 'open';
        }

        p = p.getParent && p.getParent();
      }

      setTimeout(function () {
        vScrollIntoView(_this18.$activeNode.firstChild);
      }, 10);
    }
  });
  return new Promise(function (resolve) {
    var finish = function finish(event) {
      _this18.$dialog.off('action', finish);

      _this18.$modal.remove();

      if (event.action.name === 'cancel') resolve(null);else resolve(cPath);

      if (onRootPress) {
        _this18.$rootTree.off('press', onRootPress);
      }
    };

    _this18.$dialog.on('action', finish);
  });
};

var isMatchAccept = function isMatchAccept(accept, statInfo) {
  if (accept && Finder_typeof(accept) === "object" && accept.accept) accept = accept.accept;
  if (typeof accept !== "string") return true;
  if (!accept) return true;
  if (statInfo.isDirectory) return true;
  var fileInfo = fileInfoOf(statInfo);

  if (accept.startsWith('image')) {
    return fileInfo.mimeType && fileInfo.mimeType.startsWith('image');
  }

  return true; // not handle other case
};
/***
 *
 * @param {Finder} elt
 * @constructor
 */


function NavigatorController(elt) {
  var _this19 = this;

  this.elt = elt;
  this.path = '';
  this.rootPath = '';
  this._states = {};
  this._notifiedVisibleIdx = 0;
  this.$navCtn = this.elt.$navCtn;
  this.$nav = this.elt.$nav;
  this.$contentCtn = this.elt.$contentCtn;
  this.$content = this.elt.$content;
  Object.keys(this.constructor.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) {
      _this19[key] = _this19[key].bind(_this19);
    }
  });
  this.$contentCtn.on('scroll', this.ev_contentScroll);
}

NavigatorController.prototype.onStart = function () {
  /**
   *
   * @type {AbsolFileSystem}
   */
  this.fileSystem = this.elt.fileSystem;
  this.$treeByPath = {};
  this.$treeByPath[this.rootPath || '..'] = this.$nav;
  this.reload(this.rootPath, true);
};

NavigatorController.prototype.reload = function (fromPath, autoOpen) {
  var _this20 = this;

  var opened = !autoOpen;

  var makeTree = function makeTree(path, ctnElt) {
    if (!opened && ctnElt.path) {
      _this20.viewDir(ctnElt.path, [_this20.elt.rootPath].concat(ctnElt.getPath()).join('/'));

      opened = true;
    }

    return _this20.fileSystem.readDir(path).then(function (dirs) {
      return Promise.all(dirs.map(function (dir) {
        return _this20.fileSystem.stat(path + '/' + dir);
      }));
    }).then(function (stats) {
      return stats.filter(function (stat) {
        return stat.isDirectory;
      });
    }).then(function (stats) {
      var syncs = [];
      ctnElt.clearChild();
      var children = stats.map(function (stat) {
        var nodePath = path + '/' + stat.name;

        var node = ACore_({
          tag: ExpTree.tag,
          props: {
            stat: stat,
            name: stat.displayName || stat.name,
            icon: {
              tag: 'img',
              props: {
                src: messageinput_MessageInput.iconAssetRoot + '/folder.svg'
              }
            },
            path: nodePath
          },
          on: {
            statuschage: function statuschage() {
              _this20._states[path + '/' + stat.name] = node.status;
            },
            press: function press() {
              if (_this20.path !== nodePath) _this20.viewDir(nodePath, [_this20.elt.rootPath].concat(node.getPath()).join('/'));
            }
          }
        });

        node.getNode().on({
          dblclick: function dblclick() {
            if (node.status === 'close') {
              node.status = 'open';
            } else if (node.status === 'open') {
              node.status = 'close';
            }

            _this20._states[nodePath] = node.status;
          }
        });
        _this20.$treeByPath[nodePath] = node;
        if (stat.name !== 'node_modules') syncs.push(makeTree(nodePath, node));

        if (!opened) {
          _this20.viewDir(nodePath, [_this20.elt.rootPath].concat(node.getPath()).join('/'));

          opened = true;
        }

        return node;
      });
      children.forEach(function (c) {
        ctnElt.addChild(c);
      });

      if (children.length) {
        if (_this20._states[ctnElt.path] === 'close' || _this20._states[ctnElt.path] === 'open') {
          ctnElt.status = _this20._states[ctnElt.path];
        } else {
          ctnElt.status = 'close';
        }
      } else {
        ctnElt.status = 'none';
      }

      return Promise.all(syncs);
    });
  };

  if (this.$treeByPath[fromPath || '..']) return makeTree(fromPath, this.$treeByPath[fromPath || '..']);
  return Promise.resolve();
};

NavigatorController.prototype.viewDir = function (path) {
  var _this21 = this;

  this.elt.selectCtrl.deselectAll();

  if (this.$treeByPath[this.path]) {
    this.$treeByPath[this.path].active = false;
    this.$treeByPath[this.path].active = false;
  }

  this.path = path;
  this.$treeByPath[this.path].active = true;
  var c = this.$treeByPath[this.path].getParent();

  while (c) {
    if (c.status === 'close') c.status = 'open';
    c = c.getParent && c.getParent();
  }

  vScrollIntoView(this.$treeByPath[this.path].firstChild);
  this.fileSystem.stat(path).then(function (stat) {
    _this21.elt.dirStat = stat;
    if (_this21.path !== path) return;
    if (stat.writable) _this21.elt.addClass('as-writable-folder');else _this21.elt.removeClass('as-writable-folder');

    if (stat.isVirtual) {
      _this21.elt.addClass('as-virtual-folder');
    } else {
      _this21.elt.removeClass('as-virtual-folder');
    }
  });
  this.fileSystem.readDir(path).then(function (dirs) {
    return Promise.all(dirs.map(function (dir) {
      return _this21.fileSystem.stat(path + '/' + dir);
    }));
  }).then(function (stats) {
    if (_this21.path !== path) return;
    stats.sort(function (a, b) {
      var aName, bName;

      if (a.isDirectory === b.isDirectory) {
        aName = a.displayName || a.name;
        bName = b.displayName || b.name;
        if (aName < bName) return -1;
        return 1;
      } else {
        if (a.isDirectory) return -1;
        return 1;
      }
    });
    stats = stats.filter(function (x) {
      return isMatchAccept(_this21.elt.accept, x);
    });

    _this21.viewContent(stats);
  });
};

NavigatorController.prototype.viewContent = function (stats) {
  var _this22 = this;

  this.clearContent();
  stats.forEach(function (stat) {
    _this22.pushContentItem(stat);
  });
  this.notifyVisibleContentItems();
};

NavigatorController.prototype.clearContent = function () {
  this._notifiedVisibleIdx = 0;
  this.$content.clearChild();
};

NavigatorController.prototype.pushContentItem = function (stat) {
  var _this23 = this;

  var elt = ACore_({
    tag: finder_FileThumbnail.tag,
    extendEvent: ['visible'],
    attr: {
      title: stat.displayName || stat.name
    },
    props: {
      isDirectory: stat.isDirectory,
      value: stat.url,
      fileName: stat.displayName || stat.name,
      stat: stat
    },
    on: {
      visible: function visible() {
        var mineType = Converter_ext2MineType[elt.fileType];

        if (mineType && mineType.startsWith('image/')) {
          elt.thumbnail = stat.url;
        }
      },
      dblclick: function dblclick() {
        var prevented = false;
        var event;

        if (!stat.isDirectory) {
          event = {
            fileElt: elt,
            stat: stat,
            preventDefault: function preventDefault() {
              prevented = true;
            }
          };

          _this23.elt.emit('dblclickfile', event);
        }

        if (!prevented) _this23.elt.execCommand('view');
      }
    }
  });

  this.$content.addChild(elt);
};

NavigatorController.prototype.notifyVisibleContentItems = function () {
  var elt;
  var bound = this.$contentCtn.getBoundingClientRect();
  var eBound;

  while (this._notifiedVisibleIdx < this.$content.childNodes.length) {
    elt = this.$content.childNodes[this._notifiedVisibleIdx];
    eBound = elt.getBoundingClientRect();

    if (eBound.top < bound.bottom) {
      elt.emit('visible');
    } else {
      break;
    }

    this._notifiedVisibleIdx++;
  }
};

NavigatorController.prototype.expandAll = function () {
  var _this24 = this;

  var visit = function visit(nodeElt) {
    if (nodeElt.status === 'close') {
      nodeElt.status = 'open';
      _this24._states[nodeElt.path] = 'open';
    }

    if (nodeElt.status === 'open') {
      nodeElt.getChildren().forEach(visit);
    }
  };

  Array.prototype.forEach.call(this.$nav.childNodes, visit);
};

NavigatorController.prototype.collapseAll = function () {
  var _this25 = this;

  var visit = function visit(nodeElt) {
    if (nodeElt.status === 'open') {
      nodeElt.status = 'close';
      _this25._states[nodeElt.path] = 'close';
    }

    if (nodeElt.status === 'close') {
      nodeElt.getChildren().forEach(visit);
    }
  };

  Array.prototype.forEach.call(this.$nav.childNodes, visit);
};

NavigatorController.prototype.ev_contentScroll = function (event) {
  this.notifyVisibleContentItems();
};

var fileTextQuery2Regex = function fileTextQuery2Regex(text) {
  var code = stringFormat_nonAccentVietnamese(text.toLowerCase()).replace(/[.,+^$()\[\]{}|\\]/g, function (x) {
    return '\\' + x;
  }).replace(/\*+/g, '(.*)').replace(/\?/g, '.');
  return new RegExp(code, 'i');
};
/***
 * @extends Context
 * @param {Finder} elt
 * @constructor
 */


function SearchController(elt) {
  var _this26 = this;

  AppPattern_Context.apply(this);
  this.elt = elt;
  this.$searchText = this.elt.$searchText.on('keydown', function (event) {
    if (event.key === 'Enter') {
      _this26.$searchText.blur();

      _this26.search();
    }
  });
}

HTML5_OOP.mixClass(SearchController, AppPattern_Context);

SearchController.prototype.onStart = function () {
  // console.log('start')
  this.elt.addClass('as-searching');
  this.$searchText.value = '';
  this.$searchText.focus();
};

SearchController.prototype.onStop = function () {
  this.elt.removeClass('as-searching');
  this.session = randomIdent(10);
  this.$searchText.waiting = false;
};

SearchController.prototype.search = function () {
  var _this27 = this;

  var session = randomIdent(10);
  this.session = session;
  this.elt.navCtrl.clearContent();
  this.$searchText.waiting = true;
  var fileSystem = this.elt.fileSystem;
  var rootPath = this.elt.rootPath;
  var result = [];
  var type = this.elt.$searchTypeSelect.value;
  var text = this.$searchText.value.trim();
  var regex = fileTextQuery2Regex(text);

  var isMatched = function isMatched(stat) {
    var fileInfo = fileInfoOf(stat.displayName || stat.name);
    var mineType = fileInfo.mimeType || '';
    var fileType = fileInfo.type || '';
    fileType = fileType.toLowerCase();

    if (mineType && type !== 'all') {
      if (type === 'image' && !mineType.startsWith('image') && type !== 'svg') {
        return false;
      } else if (type === 'document' && ['doc', 'docx', 'pdf', 'xlsx'].indexOf(fileType) < 0 && !mineType.startsWith('text')) {
        return false;
      }
    }

    if (text.length === 0) return true;
    if (stat.displayName && stat.displayName.match(regex)) return true;
    if (stat.name && stringFormat_nonAccentVietnamese(stat.name.toLowerCase()).match(regex)) return true;
    return false;
  };

  var handleStat = function handleStat(stat) {
    if (session !== _this27.session) return;
    if (stat.isDirectory) return new Promise(function (rs) {
      setTimeout(function () {
        rs(visitDir(stat.path));
      }, 5);
    });

    if (isMatched(stat)) {
      _this27.elt.navCtrl.pushContentItem(stat);

      _this27.elt.navCtrl.notifyVisibleContentItems();
    }
  };

  var handleDirResult = function handleDirResult(dir, names) {
    var syncs = names.map(function (name) {
      return fileSystem.stat(dir + '/' + name).then(function (stat) {
        if (session !== _this27.session) return;
        if (stat) return handleStat(stat);
      });
    });
    return Promise.all(syncs);
  };

  var visitDir = function visitDir(path) {
    return fileSystem.readDir(path).then(function (names) {
      return handleDirResult(path, names);
    });
  };

  visitDir(rootPath).then(function () {
    if (session !== _this27.session) return;
    _this27.$searchText.waiting = false;
  });
};
/***
 *
 * @constructor
 */


function FinderFileSystem() {}
FinderFileSystem.prototype.supporteDisplayName = false;

FinderFileSystem.prototype.readDir = function (path) {};

FinderFileSystem.prototype.unlink = function (path) {
  console.log(path);
};

FinderFileSystem.prototype.stat = function (path) {};

FinderFileSystem.prototype.rmdir = function (path) {};

FinderFileSystem.prototype.mkdir = function (path) {};

FinderFileSystem.prototype.writeFile = function (file, data) {};

FinderFileSystem.prototype.copy = function () {};

FinderFileSystem.prototype.rename = function (path, name) {};

FinderFileSystem.prototype.move = function (oldPath, newPath) {};

FinderFileSystem.prototype.clearCache = function () {};
/***
 * @extends FinderFileSystem
 * @constructor
 */


function AbsolFileSystem() {
  FinderFileSystem.apply(this, arguments);
  this.sync = Promise.resolve();
  this.cache = {
    readDir: {},
    stats: {}
  };
  this.taskMng = new AppPattern_TaskManager({
    limit: 4
  });
}

HTML5_OOP.mixClass(AbsolFileSystem, FinderFileSystem);
AbsolFileSystem.prototype.API_PREFIX = location.href.indexOf('localhost') >= 0 ? 'https://absol.cf' : '';

AbsolFileSystem.prototype.clearCache = function () {
  this.cache = {
    readDir: {},
    stats: {}
  };
};

AbsolFileSystem.prototype.readDir = function (path) {
  var _this28 = this;

  this.sync = this.sync.then(function () {
    if (_this28.cache.readDir[path || '..']) return _this28.cache.readDir[path || '..'];
    return fetch(_this28.API_PREFIX + '/filesystem/ls.php', {
      method: 'POST',
      cache: "no-cache",
      headers: {
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        path: path
      })
    }).then(function (res) {
      return res.json();
    }).then(function (res) {
      res = res.filter(function (c) {
        return c.path.startsWith('/html');
      });
      res.forEach(function (c) {
        c.name = c.path.split('/').pop();
        c.url = c.path.replace('/html', _this28.API_PREFIX || location.origin);
      });
      _this28.cache.readDir[path || '..'] = res.map(function (c) {
        return c.name;
      });
      res.forEach(function (c) {
        _this28.cache.stats[c.path] = c;
      });
    }).then(function () {
      return _this28.cache.readDir[path || '..'];
    });
  });
  return this.sync;
};

AbsolFileSystem.prototype.stat = function (path) {
  var _this29 = this;

  return this.sync.then(function () {
    path = path || '';
    if (_this29.cache.stats[path || '..']) return _this29.cache.stats[path || '..'];
    var dir = path.split('/');
    dir.pop();
    dir = dir.join('/');
    return _this29.readDir(dir).then(function () {
      return _this29.cache.stats[path || '..'];
    });
  });
};
/***
 *
 * @param file
 * @param {File|Blob}data
 * @param {function(done: number):void=}onProcess
 */


AbsolFileSystem.prototype.writeFile = function (file, data, onProcess) {
  var _this30 = this;

  if (file.toLowerCase().endsWith('.php')) file += '.txt';
  var folderPath = file.split('/');
  folderPath.pop();
  folderPath = folderPath.join('/');
  delete this.cache.readDir[folderPath];
  var prefix = ['file', new Date().getTime(), randomArbitrary(0, 1000000) >> 0].join('_');
  var parts = [];
  var chuck_limit = 2 << 20;
  var partName;
  var fileSize = data.size;
  var fileStartOffset = 0;
  var fileEndOffset = 0;
  var idx = 0;
  var syncs = [];
  var syncDone = 0;
  var bundle;
  var began = false;

  var handle = function handle(bundle) {
    return new Promise(function (rs) {
      _this30.taskMng.requestTask(function (finishTask, bundle) {
        if (typeof onProcess === "function" && !began) {
          began = true;
          onProcess(syncDone / (syncs.length || 1));
        }

        var form = new FormData();
        form.append('action', 'upload_part');
        form.append('fileUpload', bundle.file, bundle.name);
        fetch(_this30.API_PREFIX + '/filesystem/writefile.php', {
          method: 'POST',
          body: form
        }).then(function (res) {
          return res.text();
        }).then(function (text) {
          if (text !== 'OK') throw new Error(text);
          syncDone++;

          if (typeof onProcess === "function") {
            onProcess(syncDone / (syncs.length || 1));
          }

          rs(location.origin);
          finishTask();
        });
      }, bundle);
    });
  };

  while (fileStartOffset < fileSize) {
    fileEndOffset = Math.min(fileStartOffset + chuck_limit, fileSize);
    partName = prefix + '.p' + idx;
    parts.push(partName);
    bundle = {
      file: data.slice(fileStartOffset, fileEndOffset),
      idx: idx,
      name: partName
    };
    idx++;
    fileStartOffset = fileEndOffset;
    syncs.push(handle(bundle));
  }

  return Promise.all(syncs).then(function () {
    var form = new FormData();
    form.append('action', 'join_parts');
    form.append('parts', parts.join(';'));
    form.append('path', file);
    fetch(_this30.API_PREFIX + '/filesystem/writefile.php', {
      method: 'POST',
      body: form
    }).then(function (res) {
      return res.text();
    }).then(function (text) {
      if (text !== 'OK') throw new Error(text);
    });
  });
};

AbsolFileSystem.prototype.unlink = function (path) {
  var folderPath = path.split('/');
  folderPath.pop();
  folderPath = folderPath.join('/');
  delete this.cache.readDir[folderPath];
  var form = new FormData();
  form.append('action', 'delete_files');
  form.append('paths', path);
  return fetch(this.API_PREFIX + '/filesystem/writefile.php', {
    method: 'POST',
    body: form
  }).then(function (res) {
    return res.text();
  }).then(function (text) {
    if (text !== 'OK') throw new Error(text);
  });
};

AbsolFileSystem.prototype.rename = function (path, name) {
  var _this31 = this;

  var folderPath = path.split('/');
  folderPath.pop();
  folderPath = folderPath.join('/');
  var form = new FormData();
  form.append('action', 'rename');
  form.append('path', path);
  form.append('new_name', name);
  return fetch(this.API_PREFIX + '/filesystem/writefile.php', {
    method: 'POST',
    body: form
  }).then(function (res) {
    return res.text();
  }).then(function (text) {
    if (text !== 'OK') throw new Error(text);
    var newPath = folderPath + '/' + name;
    delete _this31.cache.readDir[folderPath];
    delete _this31.cache.stats[path];
    return {
      url: newPath.replace('/html', _this31.API_PREFIX || location.origin),
      path: newPath,
      name: name
    };
  });
};

AbsolFileSystem.prototype.move = function (oldPath, newPath) {
  var _this32 = this;

  var oldFolderPath = oldPath.split('/');
  oldFolderPath.pop();
  oldFolderPath = oldFolderPath.join('/');
  var newFolderPath = newPath.split('/');
  newFolderPath.pop();
  newFolderPath = newFolderPath.join('/');
  var form = new FormData();
  form.append('action', 'move');
  form.append('old_path', oldPath);
  form.append('new_path', newPath);
  return fetch(this.API_PREFIX + '/filesystem/writefile.php', {
    method: 'POST',
    body: form
  }).then(function (res) {
    return res.text();
  }).then(function (text) {
    if (text !== 'OK') throw new Error(text);
    delete _this32.cache.readDir[oldFolderPath];
    delete _this32.cache.readDir[newFolderPath];
    delete _this32.cache.stats[oldPath];
  });
};
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/treechart.css
var treechart = __webpack_require__(6817);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeChart.js








function autoThemeVariable(viewElt) {
  var cp = getComputedStyle(document.body);
  var color = cp.getPropertyValue('--menu-background-color') || cp.getPropertyValue('--variant-color-primary') || 'blue';
  color = Color.parse(color.trim());
  var hsla = color.toHSLA();
  hsla[2] = (hsla[2] + 1) / 2;
  hsla[1] = (hsla[1] + 0.2) / 2;
  var nColor = Color.fromHSLA(hsla[0], hsla[1], hsla[2], hsla[3]);
  viewElt.addStyle('--vert-node-background-color', nColor.toString('rgba'));
  nColor = nColor.getContrastYIQ();
  viewElt.addStyle('--vert-node-text-color', nColor.toString('rgba'));
  hsla[0] += 0.1;
  if (hsla[0] > 1) hsla[0] -= 1;
  nColor = Color.fromHSLA(hsla[0], hsla[1], hsla[2], hsla[3]);
  viewElt.addStyle('--horz-node-background-color', nColor.toString('rgba'));
  nColor = nColor.getContrastYIQ();
  viewElt.addStyle('--horz-node-text-color', nColor.toString('rgba'));
  hsla[0] -= 0.2;
  if (hsla[0] < 0) hsla[0] += 1;
  nColor = Color.fromHSLA(hsla[0], hsla[1], hsla[2], hsla[3]);
  viewElt.addStyle('--root-background-color', nColor.toString('rgba'));
  nColor = nColor.getContrastYIQ();
  viewElt.addStyle('--root-text-color', nColor.toString('rgba'));
}
/***
 * @extends AElement
 * @constructor
 */


function TreeChart() {
  // autoThemeVariable(this);
  this.$domSignal = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  this.domSignal.on('formatSize', this._formatSize.bind(this));
  this.domSignal.on('fixWidth', this._fixWidth.bind(this));
  this.$root = null;
  this._maxHorizonLevel = 2;
  /***
   * @name data
   * @type {any}
   * @memberOf TreeChart#
   */

  /***
   * @name maxHorizonLevel
   * @type {number}
   * @memberOf TreeChart#
   */
}

TreeChart.tag = 'TreeChart';

TreeChart.render = function () {
  return ACore_({
    "class": 'as-tree-chart'
  });
};

TreeChart.prototype._updateContent = function () {
  var _this = this;

  if (this.$root) {
    this.$root.remove();
    this.$root = null;
  }

  var data = this.data;
  if (!data) return;

  var makeTree = function makeTree(nodeData, level) {
    var textChildren = [];

    if (nodeData.icon) {
      textChildren.push(ACore_(nodeData.icon).addClass('as-tree-chart-icon'));
    }

    textChildren.push({
      tag: 'span',
      "class": 'as-tree-chart-text',
      child: {
        text: nodeData.text || nodeData.name
      }
    });

    var elt = ACore_({
      "class": 'as-tree-chart-node',
      attr: {
        "data-level": level + ''
      },
      child: [{
        "class": 'as-tree-chart-content-ctn',
        child: {
          "class": 'as-tree-chart-content',
          child: textChildren
        }
      }, {
        "class": 'as-tree-chart-child-ctn'
      }]
    });

    elt.$content = ACore_$('.as-tree-chart-content', elt);
    elt.$childCtn = ACore_$('.as-tree-chart-child-ctn', elt);
    var fillColor, textColor;

    if (typeof nodeData.fill === "string") {
      fillColor = src_Color_Color.parse(nodeData.fill);
    } else if (nodeData.fill instanceof src_Color_Color) {
      fillColor = nodeData.fill;
    }

    if (fillColor) {
      textColor = fillColor.getContrastYIQ();
      elt.$content.addStyle({
        color: textColor.toString('hex8'),
        backgroundColor: fillColor.toString('hex8')
      });
    }

    if (level === _this.maxHorizonLevel) elt.addClass('as-horizontal');
    if (nodeData.isLeaf) elt.addClass('as-is-leaf');

    if (nodeData.items && nodeData.items.length > 0) {
      elt.addClass('as-has-children');
      /***
       * @type {AElement[]}
       */

      elt.$children = nodeData.items.map(function (it) {
        return makeTree(it, level + 1);
      });
      elt.$childCtn.addChild(elt.$children);
    }

    return elt;
  };

  this.$root = makeTree(data, 0).addTo(this);
  this.domSignal.emit('formatSize');
};

TreeChart.prototype._formatSize = function () {
  if (!this.$root) return;
  var cBound = this.getBoundingClientRect();
  var maxHorizonLevel = this.maxHorizonLevel;

  var visit = function visit(elt, level) {
    if (!elt.$children) return;
    var sArr, maxS;

    if (level < maxHorizonLevel) {
      sArr = elt.$children.map(function (e) {
        return e.$content.getBoundingClientRect().height;
      });
      maxS = Math.max.apply(Math, sArr);
      elt.$children.forEach(function (elt, i) {
        if (sArr[i] < maxS) {
          elt.$content.addStyle('height', maxS + 'px');
        }
      });
    } else {
      sArr = elt.$children.map(function (e) {
        return e.$content.getBoundingClientRect().width;
      });
      maxS = Math.max.apply(Math, sArr);
      elt.$children.forEach(function (elt, i) {
        if (sArr[i] < maxS) {
          elt.$content.addStyle('width', maxS + 'px');
        }
      });
    }

    elt.$children.forEach(function (c) {
      return visit(c, level + 1);
    });
  };

  visit(this.$root, 0);
  var newBound = this.getBoundingClientRect();

  if (cBound.width !== newBound.width || cBound.height !== newBound.height) {
    HTML5_ResizeSystem.update();
  }

  this.domSignal.emit('fixWidth');
};

TreeChart.prototype._fixWidth = function () {
  if (!this.$root) return;
  var cBound = this.getBoundingClientRect();
  var maxHorizonLevel = this.maxHorizonLevel;

  var visit = function visit(elt) {
    if (!elt.$children) return;
    elt.$children.forEach(function (c) {
      return visit(c);
    });
    var bound, cBound;
    bound = elt.$childCtn.getBoundingClientRect();
    cBound = elt.$childCtn.getBoundingRecursiveRect(100);

    if (cBound.width > bound.width) {
      elt.$childCtn.addStyle('width', cBound.width + 'px');
    }
  };

  visit(this.$root);
  var newBound = this.getBoundingClientRect();

  if (cBound.width !== newBound.width || cBound.height !== newBound.height) {
    HTML5_ResizeSystem.update();
  }
};

TreeChart.property = {};
TreeChart.property.data = {
  set: function set(data) {
    data = copyJSVariable(data || null);
    this._data = data;

    this._updateContent();
  },
  get: function get() {
    return this._data;
  }
};
TreeChart.property.maxHorizonLevel = {
  set: function set(value) {
    if (!isNaturalNumber(value)) value = 2; //default

    this._maxHorizonLevel = value;

    this._updateContent();
  },
  get: function get() {
    return this._maxHorizonLevel;
  }
};
absol_acomp_ACore.install(TreeChart);
/* harmony default export */ const js_TreeChart = (TreeChart);
;// 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-acomp/js/MultiLanguageText.js

/***
 * @extends AElement
 * @constructor
 */

function MultiLanguageText() {
  this._v = Array(5).fill(null);
  this._key = null;
  this.$text = document.createTextNode('');
  this.addChild(this.$text);
}

MultiLanguageText.tag = 'mlt';

MultiLanguageText.render = function () {
  return ACore_('span');
};

MultiLanguageText.prototype._updateText = function () {
  var text = '';

  if (this._key && window.LanguageModule && window.LanguageModule.text2) {
    text = window.LanguageModule.text2(this._key, this._v);
  }

  text = text.replace(/<br>/g, '\n');
  this.$text.data = text;
};

MultiLanguageText.attribute = Array(5).fill(0).reduce(function (ac, u, i) {
  ac['v' + i] = {
    set: function set(value) {
      this._v[i] = value;

      this._updateText();
    },
    get: function get() {
      return this._v[i];
    },
    remove: function remove() {
      this._v[i] = null;
    }
  };
  return ac;
}, {});
MultiLanguageText.attribute.key = {
  set: function set(value) {
    this._key = value;

    this._updateText();
  },
  get: function get() {
    return this._key;
  },
  remove: function remove() {
    this._key = null;
  }
};

MultiLanguageText.replaceAll = function (root) {
  $$('mlt', root).forEach(function (elt) {
    if (elt.tagName !== 'MLT') return;
    var attr = Array.prototype.reduce.call(elt.attributes, function (ac, at) {
      ac[at.name] = at.value;
      return ac;
    }, {});
    elt.selfReplace(ACore_({
      tag: MultiLanguageText,
      attr: attr
    }));
  });
};

/* harmony default export */ const js_MultiLanguageText = (MultiLanguageText);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CopyableIconTooltip.js
function CopyableIconTooltip_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { CopyableIconTooltip_typeof = function _typeof(obj) { return typeof obj; }; } else { CopyableIconTooltip_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return CopyableIconTooltip_typeof(obj); }







/***
 * @extends {AElement}
 * @constructor
 */

function CopyableIconTooltip() {
  this._content = '';
  this.$content = null;
  this._value = '';
  this._icon = 'span.mdi.mdi-information-outline';
  this.$icon = ACore_$('.as-cit-icon', this);
  this.tooltip = new TooltipController(this);
}

CopyableIconTooltip.tag = 'CopyableIconTooltip'.toLowerCase();

CopyableIconTooltip.render = function () {
  return ACore_({
    tag: 'button',
    "class": 'as-copyable-icon-tooltip',
    child: 'span.mdi.mdi-information-outline.as-cit-icon'
  });
};

CopyableIconTooltip.property = {};
CopyableIconTooltip.property.content = {
  set: function set(value) {
    this._content = value || '';

    if (CopyableIconTooltip_typeof(this._content) === "object") {
      this.$content = ACore_(this._content);
    } else if (typeof this._content === "string") {
      this.$content = ACore_({
        tag: 'span',
        style: {
          'white-space': 'pre-wrap'
        },
        props: {
          innerHTML: this._content
        }
      });
      js_MultiLanguageText.replaceAll(this.$content);
    }
  },
  get: function get() {
    return this._content;
  }
};
CopyableIconTooltip.property.icon = {
  set: function set(value) {
    value = value || '';
    this._icon = value;
    this.clearChild();
    this.$icon = null;

    if (value) {
      if (Dom_isDomNode(value)) {
        if (value.parentElement) value = value.cloneNode(true);
      } else value = ACore_(value);

      this.$icon = ACore_$(value).addClass('as-cit-icon');
      this.addChild(this.$icon);
    }
  },
  get: function get() {
    return this._icon;
  }
};
CopyableIconTooltip.property.value = {
  set: function set(value) {
    this._value = value;
  },
  get: function get() {
    return this._value;
  }
};
/***
 *
 * @param {CopyableIconTooltip} elt
 * @constructor
 */

function TooltipController(elt) {
  /***
   *
   * @type {CopyableIconTooltip}
   */
  this.elt = elt;
  this.elt.on('mouseenter', this.ev_mouseEnter.bind(this));
  this.elt.on('mouseleave', this.ev_mouseLeave.bind(this));
  this.elt.on('click', this.ev_click.bind(this));
  this.session = -2;
  this.timeout = -1;
}

TooltipController.prototype.ev_mouseEnter = function () {
  clearTimeout(this.timeout);
  if (this.elt.$content) this.session = Tooltip.show(this.elt, this.elt.$content, 'auto');
};

TooltipController.prototype.ev_mouseLeave = function () {
  var _this = this;

  this.timeout = setTimeout(function () {
    Tooltip.close(_this.session);
  }, 500);
};

TooltipController.prototype.ev_click = function () {
  var text;

  if (this.elt._value !== null && this.elt._value !== undefined) {
    text = this.elt._value + '';
  } else if (typeof this.elt._content === "string") {
    text = this.elt._content;
  } else {
    text = this.elt.$content.innerText;
  }

  copyText(text);
  Snackbar.show('Copied: ' + text);
};

/* harmony default export */ const js_CopyableIconTooltip = (CopyableIconTooltip);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateNLevelInput.js



/**
 * @extends {AElement}
 * @constructor
 */

function DateNLevelInput() {
  this.$level = ACore_$('.as-date-n-level-input-select-level', this);
  this.$date = ACore_$('dateinput', this);
  this.ctrl = new DateNLevelInputCtrl(this);
  this._allowLevels = this.defaultAllowLevels.slice();
}

DateNLevelInput.tag = 'DateNLevelInput'.toLowerCase();
DateNLevelInput.prototype.leve2format = {
  date: 'dd/MM/yyyy',
  week: 'Tuần ww, yyyy',
  month: 'MM/yyyy',
  quarter: 'Quý QQ, yyyy',
  year: 'yyyy'
};
DateNLevelInput.prototype.leve2Name = {
  date: 'Ngày',
  week: 'Tuần',
  month: 'Tháng',
  quarter: 'Quý',
  year: 'Năm'
};
DateNLevelInput.prototype.defaultAllowLevels = ['date', 'month', 'year'];

DateNLevelInput.render = function () {
  return ACore_({
    "class": 'as-date-n-level-input',
    extendEvent: ['change'],
    child: [{
      tag: 'dateinput',
      props: {
        format: 'dd/MM/yyyy'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-date-n-level-input-select-level'],
      child: 'span.mdi.mdi-cog'
    }]
  });
};

DateNLevelInput.property = {};
DateNLevelInput.property.allowLevels = {
  set: function set(value) {
    var _this = this;

    if (typeof value === "string") {
      value = value.split(/\s*,\s*/);
    }

    if (!(value instanceof Array)) {
      value = this.defaultAllowLevels.slice();
    }

    value = value.filter(function (x) {
      return !!_this.leve2format[x];
    });
    if (!value || value.length === 0) value = this.defaultAllowLevels.slice();
    var prevLevel = this.level;
    this._allowLevels = value;
    var newLevel = this.level;

    if (prevLevel !== newLevel) {
      this.level = newLevel; //update
    }
  },
  get: function get() {
    return this._allowLevels.slice();
  }
};
DateNLevelInput.property.level = {
  set: function set(value) {
    if (!this.leve2format[value]) value = 'date';
    this.attr('data-level', value);
    this.$date.format = this.leve2format[value];
    this.ctrl.prevVal = this.$date.value;
    this.ctrl.level = value;
  },
  get: function get() {
    var level = this.ctrl.level;
    if (this._allowLevels.indexOf(level) < 0) level = this._allowLevels[0];
    return level;
  }
};
DateNLevelInput.property.format = {
  get: function get() {
    return this.$date.format;
  }
};
DateNLevelInput.property.value = {
  set: function set(value) {
    this.$date.value = value;
    this.ctrl.prevVal = this.$date.value;
  },
  get: function get() {
    return this.$date.value;
  }
};
DateNLevelInput.property.readOnly = {
  set: function set(value) {
    this.$date.readOnly = value;

    if (value) {
      this.addClass('as-read-only');
    } else {
      this.removeClass('as-read-only');
    }
  },
  get: function get() {
    return this.$date.readOnly;
  }
};
DateNLevelInput.property.disabled = {
  set: function set(value) {
    this.$date.disabled = value;
    this.$level.disabled = value;

    if (value) {
      this.addClass('as-disabled');
    } else {
      this.removeClass('as-disabled');
    }
  },
  get: function get() {
    return this.$date.disabled;
  }
};

function DateNLevelInputCtrl(elt) {
  var _this2 = this;

  this.elt = elt;
  this.prevVal = this.elt.value;
  this.elt.$date.on('change', this.ev_dateChange.bind(this));
  this.level = 'date';
  js_QuickMenu.toggleWhenClick(this.elt.$level, {
    getMenuProps: function getMenuProps() {
      var props = {};
      props.items = _this2.elt._allowLevels.map(function (name) {
        return {
          text: "".concat(_this2.elt.leve2Name[name], " (").concat(_this2.elt.leve2format[name], ")"),
          level: name,
          icon: name === _this2.level ? 'span.mdi.mdi-check' : null
        };
      });
      return props;
    },
    onSelect: function onSelect(item) {
      if (_this2.level !== item.level) {
        _this2.level = item.level;

        _this2.ev_levelChange();
      }
    }
  });
}

DateNLevelInputCtrl.prototype.ev_dateChange = function (event) {
  this.notifyCanBeChanged();
};

DateNLevelInputCtrl.prototype.ev_levelChange = function (event) {
  var value = this.level;
  this.elt.attr('data-level', value);
  this.elt.$date.format = this.elt.leve2format[value];
  this.elt.$date.value = null;
  this.notifyCanBeChanged();
};

DateNLevelInputCtrl.prototype.notifyCanBeChanged = function (force) {
  var value = this.elt.$date.value;

  if (force || !value !== !this.prevVal || value && compareDate(value, this.prevVal) !== 0) {
    this.elt.emit('change', Object.assign({}, {
      value: value,
      prevValue: this.prevVal,
      target: this.elt
    }), this.elt);
    this.prevVal = value;
  }
};

/* harmony default export */ const js_DateNLevelInput = (DateNLevelInput);
absol_acomp_ACore.install(DateNLevelInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tableoftextinput.css
var tableoftextinput = __webpack_require__(7823);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/swatchestable.css
var swatchestable = __webpack_require__(401);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/red_cross.tpl
/* harmony default export */ const red_cross = ("<svg width=\"$width\" height=\"$height\" version=\"1.1\" viewBox=\"0 0 $width $height\" xmlns=\"http://www.w3.org/2000/svg\">\r\n    <g fill=\"none\" stroke=\"#f00\">\r\n        <path d=\"m0 0 $width $height\"/>\r\n        <path d=\"m$width 0-$width $heightz\" stroke-width=\"1px\"/>\r\n    </g>\r\n</svg>\r\n");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/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); }







/**
 * @extends AElement
 * @constructor
 */

function ColorCell() {
  this.$value = this.firstChild;

  if (!ColorCell.css) {
    ColorCell.css = new HTML5_DynamicCSS().setProperty('.as-color-cell.as-null .as-color-cell-value', 'background-image', "url(\"data:image/svg+xml;base64,".concat(base64EncodeUnicode(red_cross.replace(/\$width/g, '24').replace(/\$height/g, '24')), "\")")).commit();
  }
}
ColorCell.tag = 'ColorCell'.toString();

ColorCell.render = function () {
  return ACore_({
    "class": 'as-color-cell',
    child: ['.as-color-cell-value']
  });
};

ColorCell.property = {};
ColorCell.property.value = {
  set: function set(value) {
    if (value === null || value === undefined) {
      this.addClass('as-null');
    } else if (value) {
      this.removeClass('as-null');
      this.$value.addStyle('background-color', value + '');
    }

    this._value = value;
  },
  get: function get() {
    return this._value;
  }
};

function SwatchesTable() {
  this._data = [];
  this._poolCells = [];
  this._poolRows = [];
  this._dict = {};
}

SwatchesTable.tag = 'SwatchesTable'.toLowerCase();

SwatchesTable.render = function () {
  return ACore_({
    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 = src_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 = ACore_('.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 = ACore_({
            tag: ColorCell,
            "class": 'as-swatches-table-cell'
          });
          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].value = row[j];
          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].value = row[j].value; // rowElt.childNodes[j].firstChild.addStyle('background-color', row[j].value);

            rowElt.childNodes[j].__swatchescell_value = row[j].value;
            this._dict[src_Color_Color.parse(row[j].value + '').toHex8()] = rowElt.childNodes[j];
          } else {
            rowElt.childNodes[j].firstChild.removeStyle('background-color');
            this._dict[src_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].value = row[j];
          rowElt.childNodes[j].attr('title', null);
          rowElt.childNodes[j].__swatchescell_value = row[j];
          this._dict[src_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": "White",
  "value": "#ffffff"
}, {
  "name": "Black",
  "value": "#000000"
}]];
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"
}]];
absol_acomp_ACore.install('swatchestable', SwatchesTable);
/* harmony default export */ const colorpicker_SwatchesTable = ((/* unused pure expression or super */ null && (SwatchesTable)));
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/solidcolorpicker.css
var solidcolorpicker = __webpack_require__(6270);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/spectrumcolor.css
var spectrumcolor = __webpack_require__(5345);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SpectrumColor.js



function SpectrumColor() {}

SpectrumColor.tag = 'SpectrumColor'.toLowerCase();

SpectrumColor.render = function () {
  return ACore_({
    "class": 'as-spectrum-color',
    child: {
      "class": 'as-spectrum-color-sat',
      child: '.as-spectrum-color-val'
    }
  });
};

absol_acomp_ACore.install('spectrumcolor', SpectrumColor);
/* harmony default export */ const colorpicker_SpectrumColor = (SpectrumColor);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SolidColorPicker.js











/**
 * @extends AElement
 * @constructor
 */

function SolidColorPicker() {
  if (!SolidColorPicker.css) {
    SolidColorPicker.css = new HTML5_DynamicCSS().setProperty('.as-color-cell.as-solid-color-picker-selected.as-null .as-color-cell-value', 'background-image', "url(\"data:image/svg+xml;base64,".concat(base64EncodeUnicode(red_cross.replace(/\$width/g, '58').replace(/\$height/g, '22')), "\")")).commit();
  }

  this.swatchMode = new SCPSWatchMode(this);
  this.pickerMode = new SCPPickerMode(this);
  this.modes = [this.swatchMode, this.pickerMode];
  this.modeCtrl = new SCPSWatchModeController(this);
  HTML5_OOP.drillProperty(this, this.modeCtrl, 'mode');
  this.footerCtrl = new SCPFooterController(this);
  this.$opacity = this.footerCtrl.$opacity;
  this.$hex = this.footerCtrl.$hex;
  this.$selected = this.footerCtrl.$selected;
  this.historyCtrl = new SCPHistoryController(this);
  this.$swatchesName = this.modeCtrl.$swatchesName;
  this.on('keydown', this.eventHandler.keydown);
  this._lastEmitHex8 = '';
  this.rawValue = new src_Color_Color([1, 0, 0, 1]);
  this._swatchesNames = ['Material Design', 'Moqups Classic', 'Bootstrap', 'iOS'];
  this._swatchesShortName = ['material', 'moqups', 'bootstrap', 'ios'];
  this._swatchesIcons = ['span.mdi.mdi-palette', 'span.mdi.mdi-material-design', 'span.mdi.mdi-bootstrap', 'span.mdi.mdi-apple-ios'];
  this._swatchesData = [MaterialSwatches, MoqupsClassicSwathes, BootstrapSwatches, iOsSwatches];
  /**
   * @type {import('absol-acomp/js/BScroller').default}
   */

  this.$swatchesTableCtn = this.swatchMode.$swatchesTableCtn;
  this.$selectedDot = ACore_('.as-solid-color-picker-selected-dot'); //share

  /**
   * @type {import('./SwatchesTable').default}
   */

  this.$swatchesTable = this.swatchMode.$swatchesTable;
  this.$recentSwatchesTable = this.historyCtrl.$recentSwatchesTable;
  this.$attachhook = ACore_('attachhook').on('attached', this.eventHandler.attached).addTo(this);
  this.$spectrum = this.pickerMode.$spectrum;
  this.$spectrumDot = this.pickerMode.$spectrumDot;
  this.$alpha = this.pickerMode.$alpha;
  this.$submitBtn = ACore_$('.as-solid-color-picker-submit-btn', this).on('click', this.notifySubmit.bind(this));
  /**
   * @name hasOpacity
   * @type {boolean}
   * @memberof SolidColorPicker#
   */

  /**
   * @name nullable
   * @type {boolean}
   * @memberof SolidColorPicker#
   */

  /**
   * @name value
   * @type {Color|null}
   * @memberof SolidColorPicker#
   */
}

SolidColorPicker.tag = 'SolidColorPicker'.toLowerCase();

SolidColorPicker.render = function () {
  return ACore_({
    attr: {
      tabindex: '1'
    },
    extendEvent: ['change', 'sizechange', 'submit'],
    "class": ['as-solid-color-picker', 'as-has-opacity'],
    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: 'Material Design'
          }
        }, 'span.mdi.mdi-menu-down']
      }, {
        tag: 'bscroller',
        "class": ['as-solid-color-picker-swatches-ctn'],
        child: {
          tag: 'swatchestable',
          props: {
            data: MaterialSwatches
          }
        }
      }, {
        tag: colorpicker_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-none-ctn',
        child: [{
          tag: ColorCell,
          "class": 'as-solid-color-picker-none-cell',
          props: {
            value: null
          }
        }, {
          child: {
            text: 'None'
          }
        }]
      }, {
        "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: [{
        tag: ColorCell,
        "class": 'as-solid-color-picker-selected'
      }, {
        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 = [];
SolidColorPicker.css = null;
/**
 * @param {Color} color
 */

SolidColorPicker.pushColorHistory = function (color) {
  if (!color) return;
  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.swatchMode.viewValue();
};

SolidColorPicker.prototype.notifyCanBeChanged = function () {
  var value = this.value;
  var cHex8 = value ? this.rawValue.toHex8() : "null";

  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.rawValue);
  this.emit('submit', {
    target: this,
    value: this.rawValue,
    type: 'submit'
  }, this);
};

SolidColorPicker.property = {};
/**
 * @type {SolidColorPicker}
 */

SolidColorPicker.property.value = {
  /**
   *
   * @param {Color} value
   */
  set: function set(value) {
    value = value || null;

    if (value && !value.toHex8) {
      //is
      try {
        value = src_Color_Color.parse(value + '');
      } catch (e) {
        value = new src_Color_Color([0, 0, 0, 0]);
      }
    }

    this.rawValue = value;
    this.footerCtrl.viewValue();
    this.pickerMode.viewValue();
    this.swatchMode.viewValue(); //
    // this._lastEmitHex8 = value.toHex8();
    // this._setValue(value);
    // this._setRGB(value.toHex6());
    // this._setOpacityPercent(Math.round(value.rgba[3] * 100));
    //
    // var hsba = Color.rgbaToHSBA(value.rgba);
    // this._setHue(hsba[0] * 360);
    // this._setSatBrightness(hsba[1] * 100, hsba[2] * 100);
    // this._updateNear();
  },
  get: function get() {
    var nullable = this.nullable;
    var hasOpacity = this.hasOpacity;
    var value = this.rawValue || null; //

    if (!nullable && !value) value = new src_Color_Color([0, 0, 0, 0]);
    if (!hasOpacity && value) value.rgba[3] = 1;
    return 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.swatchMode.viewValue();
  },
  get: function get() {
    return this._swatches;
  }
};
SolidColorPicker.property.nullable = {
  set: function set(value) {
    if (value) {
      this.addClass('as-nullable');
    } else {
      this.removeClass('as-nullable');
    }

    this.footerCtrl.viewValue();
    this.pickerMode.viewValue();
    this.swatchMode.viewValue();
  },
  get: function get() {
    return this.hasClass('as-nullable');
  }
};
SolidColorPicker.property.hasOpacity = {
  /**
   * @this SolidColorPicker#
   * @param value
   */
  set: function set(value) {
    if (value) {
      this.addClass('as-has-opacity');
    } else {
      this.removeClass('as-has-opacity');
    }

    this.footerCtrl.viewValue();
    this.swatchMode.viewValue();
    this.pickerMode.viewValue();
  },
  get: function get() {
    return this.hasClass('as-has-opacity');
  }
};
/**
 * @type {SolidColorPicker}
 */

SolidColorPicker.eventHandler = {};

SolidColorPicker.eventHandler.attached = function () {
  SolidColorPicker.pushInstances(this);
  this.reloadSetting();
};

SolidColorPicker.eventHandler.keydown = function (event) {
  if (event.key === 'Enter') {
    event.preventDefault();
    event.target.blur();
    this.notifySubmit();
  }
};

absol_acomp_ACore.install('solidcolorpicker', SolidColorPicker);
/**
 *
 * @param {SolidColorPicker} elt
 *
 * @constructor
 */

function SCPHistoryController(elt) {
  this.elt = elt;
  this.$recentSwatchesTable = ACore_$('.as-solid-color-picker-recent-swatches-ctn swatchestable', this.elt).on('presscell', this.elt.swatchMode.ev_pressCell.bind(this));
}
/**
 *
 * @param {SolidColorPicker} elt
 * @constructor
 */


function SCPSWatchModeController(elt) {
  var _this = this;

  this.elt = elt;
  this.$swatchesName = ACore_$('.as-solid-color-picker-swatches-name', this.elt);
  js_QuickMenu.toggleWhenClick(this.$swatchesName, {
    anchor: [1, 6],
    getMenuProps: function getMenuProps() {
      return {
        extendClasses: 'as-solid-color-picker-swatches-name-menu',
        extendStyle: {
          'font-size': _this.elt.getComputedStyleValue('font-size')
        },
        items: _this.elt._swatchesNames.map(function (name, i) {
          return {
            text: name,
            value: _this.elt._swatchesShortName[i],
            icon: _this.elt._swatchesIcons[i]
          };
        })
      };
    },
    onSelect: function onSelect(item) {
      _this.elt.swatches = item.value;
    }
  });
  this.$mode = ACore_$('.as-solid-color-picker-mode', this.elt).on('change', this.updateMode.bind(this));
  this.viewingMode = null;
  this.updateMode();
}

SCPSWatchModeController.prototype.updateMode = function () {
  var value = this.$mode.value;
  if (value === this.viewingMode) return;
  this.elt.removeClass('as-solid-color-picker-mode-' + this.viewingMode);
  this.viewingMode = value + '';
  this.elt.addClass('as-solid-color-picker-mode-' + this.viewingMode);
  this.$mode.value = this.viewingMode;
  this.elt.notifySizeCanBeChanged();
};

Object.defineProperty(SCPSWatchModeController.prototype, 'mode', {
  set: function set(value) {
    this.$mode.value = value;
    this.updateMode();
  },
  get: function get() {
    return this.$mode.value;
  }
});
/**
 *
 * @param {SolidColorPicker} elt
 * @constructor
 */

function SCPSWatchMode(elt) {
  this.elt = elt;
  /**
   *
   * @type {BScroller}
   */

  this.$swatchesTableCtn = ACore_$('.as-solid-color-picker-swatches-ctn', this.elt);
  /**
   * @type {SwatchesTable}
   */

  this.$swatchesTable = ACore_$('.as-solid-color-picker-swatches-ctn swatchestable', this.elt).on('presscell', this.ev_pressCell.bind(this));
  this.$noneCtn = ACore_$('.as-solid-color-picker-none-ctn', this.elt).on('click', this.ev_clickNone.bind(this));
}

SCPPickerMode.prototype.name = "swatches";
SCPPickerMode.prototype.displayName = "SWATCHES";

SCPSWatchMode.prototype.ev_pressCell = function (event) {
  try {
    var value = src_Color_Color.parse(event.value + '');
    var hC = value.getContrastYIQ();
    hC.rgba[3] = 0.7;
    value.rgba[3] = this.elt.footerCtrl.opacity;
    this.elt.rawValue = value;
    this.elt.footerCtrl.viewValue();
    this.elt.$selectedDot.addStyle('box-shadow', "inset 0px 0px 0.3em 0.125em ".concat(hC.toString('rgba')));
    event.cellElt.addChild(this.elt.$selectedDot);
    this.$noneCtn.removeClass('as-selected');
    this.elt.pickerMode.viewValue(); //
  } catch (e) {// this.$selectedDot.removeStyle('box-shadow');
    // this.$hex.value = 'ffffff';
  }

  this.elt.notifyCanBeChanged();
};

SCPSWatchMode.prototype.ev_clickNone = function (event) {
  this.elt.rawValue = null;
  this.viewValue();
  this.elt.footerCtrl.viewValue();
  this.elt.swatchMode.viewValue();
  this.elt.pickerMode.viewValue();
  this.elt.notifyCanBeChanged();
};

SCPSWatchMode.prototype.viewValue = function () {
  this.elt.$selectedDot.remove();
  var cell, hC;
  /**
   *
   * @type {Color|null}
   */

  var value = this.elt.value;
  if (!value) this.$noneCtn.addClass('as-selected');else this.$noneCtn.removeClass('as-selected');

  if (this.elt.modeCtrl.mode === 'swatches' && value) {
    cell = this.$swatchesTable.getCell(value.toString('hex6'));
    if (cell) this.$swatchesTableCtn.scrollInto(cell);
  }

  if (!cell && value) {
    cell = this.elt.$recentSwatchesTable.getCell(value.toString('hex6'));
  }

  if (cell) {
    hC = value.getContrastYIQ();
    hC.rgba[3] = 0.7;
    this.elt.$selectedDot.addStyle('box-shadow', "inset 0px 0px 0.3em 0.125em ".concat(hC.toString('rgba')));
    cell.addChild(this.elt.$selectedDot);
  }
};
/**
 *
 * @param {SolidColorPicker} elt
 * @constructor
 */


function SCPPickerMode(elt) {
  this.elt = elt;
  this.$spectrum = ACore_({
    tag: 'hanger',
    elt: ACore_$('.as-solid-color-picker-spectrum', this.elt)
  }).on('predrag', this.ev_spectrumDrag.bind(this)).on('drag', this.ev_spectrumDrag.bind(this));
  this.$hueDot = ACore_$('.as-solid-color-picker-hue-dot', this.elt);
  this.$spectrumDot = ACore_$('.as-solid-color-picker-spectrum-dot', this.elt);
  this.$alpha = ACore_({
    tag: 'hanger',
    elt: ACore_$('.as-solid-color-picker-alpha', this.elt)
  }).on('predrag', this.ev_alphaDrag.bind(this)).on('drag', this.ev_alphaDrag.bind(this));
  this.$alphaDot = ACore_$('.as-solid-color-picker-alpha-dot', this.elt);
  this.$hue = ACore_({
    tag: 'hanger',
    elt: ACore_$('.as-solid-color-picker-hue', this.elt)
  }).on('predrag', this.ev_hueDrag.bind(this)).on('drag', this.ev_hueDrag.bind(this));
  this.$near = ACore_$('.as-solid-color-picker-near', this.elt).on('presscell', this.ev_nearPressCell.bind(this));
  this._hue = 0;
  this._sat = 1;
  this._brightness = 1;
}

SCPPickerMode.prototype.name = 'picker';
SCPPickerMode.prototype.displayName = 'PICKER';

SCPPickerMode.prototype.viewValue = function () {
  var value = this.elt.value || new src_Color_Color([0, 0, 0, 1]);
  var hsba = src_Color_Color.rgbaToHSBA(value.rgba);

  this._setHue(hsba[0] * 360);

  this._setSatBrightness(hsba[1] * 100, hsba[2] * 100);

  this._updateOpacity();

  this._updateNear();
};

SCPPickerMode.prototype._updateSpectrumDot = function () {
  var value = this.elt.value || new src_Color_Color([0, 0, 0, 1]);
  var dotColor = 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()
  });
};

SCPPickerMode.prototype._updateNear = function () {
  var value = this.elt.value || new src_Color_Color([0, 0, 0, 1]);
  var hsba = src_Color_Color.rgbaToHSBA(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 src_Color_Color.fromHSB(hue, sat * (7 - i) / 8, brightness);
  });
  var darkerColors = Array(7).fill(null).map(function (u, i) {
    return src_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 src_Color_Color.fromHSB(nHue, sat, brightness);
  });
  this.$near.data = [whiterColors, darkerColors, hueNearColors];
};

SCPPickerMode.prototype._setHue = function (hue) {
  this._hue = hue;
  var spectrumColor = src_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();
};

SCPPickerMode.prototype._setSatBrightness = function (sat, brightness) {
  this._sat = sat;
  this._brightness = brightness;

  this._updateSpectrumDot();
};

SCPPickerMode.prototype._updateOpacity = function () {
  this.$alphaDot.addStyle('left', 'calc(' + this.elt.footerCtrl.opacity * 100 + '% - 0.5em)');
};

SCPPickerMode.prototype.ev_spectrumDrag = function (event) {
  event.preventDefault();
  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)));
  this.elt.rawValue = src_Color_Color.fromHSBA(this._hue / 360, sat / 100, brightness / 100, this.elt.footerCtrl.opacity);

  this._setSatBrightness(sat, brightness);

  this._updateNear();

  this.elt.footerCtrl.viewValue();
  this.elt.swatchMode.viewValue();
  this.elt.notifyCanBeChanged();
};

SCPPickerMode.prototype.ev_alphaDrag = function (event) {
  event.preventDefault();
  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 = this.elt.value || new src_Color_Color([0, 0, 0, 0]);
  color.rgba[3] = opacity / 100;
  this.elt.rawValue = color;
  this.elt.footerCtrl.viewValue();

  this._updateOpacity(); // this._setOpacityPercent(opacity);


  this.elt.notifyCanBeChanged();
};

SCPPickerMode.prototype.ev_hueDrag = function (event) {
  event.preventDefault();
  var hBound = this.$hue.getBoundingClientRect();
  var hue = (event.clientX - hBound.left) * 360 / hBound.width;
  hue = Math.max(0, Math.min(360, Math.round(hue)));
  this.elt.rawValue = src_Color_Color.fromHSBA(hue / 360, this._sat / 100, this._brightness / 100, this.elt.footerCtrl.opacity);

  this._setHue(hue);

  this.elt.footerCtrl.viewValue();
  this.elt.swatchMode.viewValue();

  this._updateNear();

  this.elt.notifyCanBeChanged();
};

SCPPickerMode.prototype.ev_nearPressCell = function (event) {
  var value = event.value.clone();
  value.rgba[3] = this.elt.footerCtrl.opacity;
  this.elt.rawValue = value;
  this.viewValue();
  this.elt.footerCtrl.viewValue();
  this.elt.pickerMode.viewValue();
};
/**
 *
 * @param {SolidColorPicker} elt
 * @constructor
 */


function SCPFooterController(elt) {
  this.elt = elt;
  this.$selected = ACore_$('.as-solid-color-picker-selected', this.elt);
  this.$opacity = ACore_$('.as-solid-color-picker-color-opacity', this.elt).on('change', this.ev_opacityChange.bind(this)).on('keyup', this.ev_opacityKeyUp.bind(this));
  this.$hex = ACore_$('.as-solid-color-picker-color-hex', this.elt).on('keyup', this.ev_hexKeyUp.bind(this)).on('change', this.ev_hexChange.bind(this));
}

SCPFooterController.prototype.ev_opacityChange = function (event) {
  var color = this.elt.value;
  var opacityTxt = color ? Math.round(color.rgba[3] * 100) : '100';

  if (color && this.$opacity.value !== opacityTxt) {
    this.$opacity.value = opacityTxt;
  }
};

SCPFooterController.prototype.ev_opacityKeyUp = function (event) {
  var opacity = parseFloat(this.$opacity.value);

  if (!isNaN(opacity)) {
    opacity = Math.round(Math.max(0, Math.min(opacity, 100)));
    var color = this.elt.value || new src_Color_Color(0, 0, 0, 1);
    color.rgba[3] = opacity / 100;
    this.elt.rawValue = color;
    this.elt.pickerMode.viewValue();
    this.$selected.value = color;
    this.elt.notifyCanBeChanged();
  }
};

SCPFooterController.prototype.ev_hexKeyUp = function (event) {
  // var prevValue = this.elt.value;
  var value;
  var nullable = this.elt.nullable;
  var hex = this.$hex.value.trim();

  try {
    if (nullable && hex.length === 0) {
      value = null;
    } else {
      value = src_Color_Color.parse('#' + hex);
    }
  } catch (e) {// console.error(e);
  }

  if (!value && !nullable) return;
  if (value) value.rgba[3] = this.opacity;
  this.elt.rawValue = value;
  this.$selected.value = value;
  this.elt.pickerMode.viewValue();
  this.elt.swatchMode.viewValue();
  this.elt.notifyCanBeChanged();
};

SCPFooterController.prototype.ev_hexChange = function (event) {
  var value = this.elt.value;
  if (value) this.$hex.value = value.toHex6();
};

SCPFooterController.prototype.viewValue = function () {
  var value = this.elt.value;
  var hasOpacity = this.elt.hasOpacity;
  this.$selected.value = value;
  this.$hex.value = value ? value.toHex6() : '';

  if (hasOpacity && value) {
    this.$opacity.value = Math.round(value.rgba[3] * 100) + '';
  } else this.$opacity.value = '100';
};

Object.defineProperty(SCPFooterController.prototype, 'opacity', {
  get: function get() {
    if (!this.elt.hasOpacity) return 1;
    var opFromText = parseFloat(this.$opacity.value) / 100;

    if (isRealNumber(opFromText)) {
      opFromText = Math.max(0, Math.min(opFromText, 1));
      return opFromText;
    }

    var value = this.elt.value;
    if (!value) return 1;
    return value.rgba[3];
  }
});
/* harmony default export */ const colorpicker_SolidColorPicker = (SolidColorPicker);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/FontColorButton.js







/**
 * @extends AElement
 * @constructor
 */

function FontColorButton() {
  var _this = this;

  this.$value = ACore_$('.as-font-color-button-value', this);
  this.$primary = ACore_$('.as-ribbon-split-button-primary', this).on('click', function () {
    _this.emit('submit', {
      type: 'submit',
      target: _this
    }, _this);
  });
  this.$extend = ACore_$('.as-ribbon-split-button-extend', this);
  new FCBPickerController(this);
  /**
   * @type {string}
   * @name value
   * @memberof FontColorButton#
   */
}

FontColorButton.tag = 'FontColorButton'.toLowerCase();

FontColorButton.render = function () {
  return ACore_({
    extendEvent: ['submit', 'change'],
    attr: {
      'tabindex': '0'
    },
    "class": ['as-ribbon-split-button'],
    child: {
      "class": 'as-ribbon-split-button-content',
      child: [{
        tag: 'button',
        attr: {
          'tabindex': '-1'
        },
        "class": 'as-ribbon-split-button-primary',
        child: {
          tag: FontColorIcon,
          "class": 'as-font-color-button-value',
          style: {
            width: '18px',
            height: '18px'
          }
        }
      }, {
        tag: 'button',
        attr: {
          'tabindex': '-1'
        },
        "class": 'as-ribbon-split-button-extend',
        child: ['span.as-ribbon-split-button-text', 'span.mdi.mdi-chevron-down']
      }]
    }
  });
};

FontColorButton.property = {};
FontColorButton.property.value = {
  set: function set(value) {
    this.$value.value = value;
  },
  get: function get() {
    return this.$value.value;
  }
};
/* harmony default export */ const colorpicker_FontColorButton = (FontColorButton);
/**
 *
 * @param {FontColorButton} elt
 * @constructor
 */

function FCBPickerController(elt) {
  this.elt = elt;
  this['ev_clickExtend'] = this['ev_clickExtend'].bind(this);
  this['ev_clickOut'] = this['ev_clickOut'].bind(this);
  this['ev_submit'] = this['ev_submit'].bind(this);
  this['ev_change'] = this['ev_change'].bind(this);
  this.elt.$extend.on('click', this.ev_clickExtend);
}

FCBPickerController.prototype.ev_clickExtend = function () {
  this.openPicker();
};

FCBPickerController.prototype.ev_clickOut = function (event) {
  if (hitElement(this.share.$picker, event)) return;
  this.closePicker();
};

FCBPickerController.prototype.ev_submit = function () {
  var prevValue = this.elt.value;
  this.elt.value = this.share.$picker.value;
  this.closePicker();

  if (prevValue !== this.elt.value) {
    this.elt.emit('change', {
      type: 'change',
      target: this.elt
    }, this.elt);
  }

  this.elt.emit('submit', {
    type: 'submit',
    target: this.elt
  }, this.elt);
};

FCBPickerController.prototype.ev_change = function () {
  var prevValue = this.elt.value;
  this.elt.value = this.share.$picker.value;

  if (prevValue !== this.elt.value) {
    this.elt.emit('change', {
      type: 'change',
      target: this.elt
    }, this.elt);
  }
};

FCBPickerController.prototype.share = {
  $picker: null,
  $follower: null,
  holder: null
};

FCBPickerController.prototype.prepare = function () {
  if (this.share.$follower) return;
  this.share.$picker = ACore_({
    tag: colorpicker_SolidColorPicker,
    props: {
      hasOpacity: false
    }
  });
  this.share.$follower = ACore_({
    tag: js_Follower,
    child: this.share.$picker,
    props: {
      anchor: [2, 1, 6, 5, 9, 11]
    }
  });
};

FCBPickerController.prototype.openPicker = function () {
  var _this2 = this;

  this.prepare();
  if (this.share.holder) this.share.holder.closePicker();
  this.share.holder = this;
  this.share.$follower.addStyle('visibility', 'hidden');
  this.share.$follower.addTo(document.body);
  this.share.$follower.followTarget = this.elt.$extend;
  this.share.$follower.sponsorElement = this.elt.$extend;
  this.share.$follower.addStyle('z-index', findMaxZIndex(this.elt.$extend) + 70);
  this.share.$follower.removeStyle('visibility');
  this.elt.$extend.off('click', this.ev_clickExtend);
  this.share.$picker.on('submit', this.ev_submit);
  this.share.$picker.on('change', this.ev_change);
  this.share.$picker.value = this.elt.value;
  setTimeout(function () {
    document.addEventListener('click', _this2.ev_clickOut);
  }, 5);
};

FCBPickerController.prototype.closePicker = function () {
  var _this3 = this;

  if (this.share.holder !== this) return;
  this.share.holder = null;
  document.removeEventListener('click', this.ev_clickOut);
  this.share.$picker.off('submit', this.ev_submit);
  this.share.$picker.off('change', this.ev_change);
  setTimeout(function () {
    _this3.elt.$extend.on('click', _this3.ev_clickExtend);
  }, 5);
  this.share.$follower.followTarget = null;
  this.share.$follower.remove();
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableOfTextInput.js
















/**
 * @typedef TEIDataRow
 * @property {TEIDataCell[]} cells
 */

/**
 * @typedef TEIData
 * @property {TEIDataRow[]} rows
 */

/**
 * @typedef TEIDataCell
 * @property {{color?:string, fontSize?: number, fontWeight?: ("bool"|"normal")}} [style]
 * @property {string} value
 */

/**
 * @extends AElement
 * @constructor
 */

function TableOfTextInput() {
  /**
   *
   * @type {TEITable}
   */
  this.teiTable = new TEITable(this);
  /**
   * @name data
   * @type {TEICell[]}
   */

  HTML5_OOP.drillProperty(this, this.teiTable, ['minCol', 'maxCol', 'data', 'excelRichTextRows']);
}
/**
 *
 * @param name
 * @param value
 * @returns  {this}
 */


TableOfTextInput.prototype.addStyle = function (name, value) {
  if (name === 'display') {
    if (typeof value === "string" && value.indexOf('inline')) {
      this.addClass('as-inline');
    } else {
      this.removeClass('as-inline');
    }

    return this;
  } else return HTML5_AElement.prototype.addStyle.apply(this, arguments);
};

TableOfTextInput.tag = 'TableOfTextInput'.toLowerCase();

TableOfTextInput.render = function () {
  return ACore_({
    "class": 'as-table-of-text-input-wrapper',
    child: [{
      "class": 'as-table-of-text-input-content-ctn',
      child: {
        tag: 'table',
        extendEvent: ['change'],
        "class": 'as-table-of-text-input',
        child: [{
          tag: 'tbody',
          child: []
        }]
      }
    }]
  });
};

/* harmony default export */ const js_TableOfTextInput = (TableOfTextInput);
absol_acomp_ACore.install(TableOfTextInput);
/**
 *
 * @param {TableOfTextInput} wrapper
 * @constructor
 */

function TEITable(wrapper) {
  this._minCol = 3;
  this._maxCol = 3;
  this._minRow = 1;
  this._maxRow = 9;
  this.wrapper = wrapper;
  this.elt = ACore_$('table', wrapper);
  this.$body = ACore_$('tbody', this.elt);
  /**
   *
   * @type {TEIRow[]}
   */

  this.rows = [];
  this.formatTool = new TEIFormatTool(this);
}

TEITable.prototype.defaultData = {
  rows: [{
    cells: [{
      value: ''
    }, {
      value: ''
    }, {
      value: ''
    }]
  }]
};

TEITable.prototype.notifyChange = function (data) {
  this.elt.emit('change', Object.assign({
    type: 'change',
    target: this
  }, data), this.elt);
};

TEITable.prototype.calcCellPos = function () {
  var n = this.rows[0].cells.reduce(function (ac, cell) {
    return ac + cell.colspan;
  }, 0);
  var m = this.rows.length;
  var heights = Array(n).fill(0);
  var row, i, j, k;
  var cell, colspan, rowspan, colIdx;

  for (i = 0; i < m; ++i) {
    row = this.rows[i];
    colIdx = 0;

    for (j = 0; j < row.cells.length; ++j) {
      cell = row.cells[j];

      while (heights[colIdx] > i) {
        colIdx++;
      }

      colspan = cell.colspan;
      rowspan = cell.rowspan;
      cell.td.attr('data-col-idx', colIdx);

      for (k = 0; k < colspan; ++k) {
        heights[colIdx] = i + rowspan;
      }
    }
  }
};

Object.defineProperties(TEITable.prototype, {
  minCol: {
    /**
     * @this TableOfTextInput
     * @param value
     */
    set: function set(value) {
      if (!isNaturalNumber(value)) value = 1;
      value = Math.max(1, Math.floor(value));
      this._minCol = value;
    },
    get: function get() {
      return this._minCol;
    }
  },
  maxCol: {
    /**
     * @this TableOfTextInput
     * @param value
     */
    set: function set(value) {
      if (!isNaturalNumber(value)) value = 20;
      value = Math.min(20, Math.max(1, Math.floor(value)));
      this._maxCol = value;
    },
    get: function get() {
      return Math.max(this._minCol, this._maxCol);
    }
  },
  minRow: {
    /**
     * @this TableOfTextInput
     * @param value
     */
    set: function set(value) {
      if (!isNaturalNumber(value)) value = 1;
      value = Math.max(1, Math.floor(value));
      this._minRow = value;
    },
    get: function get() {
      return this._minRow;
    }
  },
  maxRow: {
    /**
     * @this TableOfTextInput
     * @param value
     */
    set: function set(value) {
      if (!isNaturalNumber(value)) value = 20;
      value = Math.min(20, Math.max(1, Math.floor(value)));
      this._maxRow = value;
    },
    get: function get() {
      return Math.max(this._minRow, this._maxRow);
    }
  },
  data: {
    set: function set(value) {
      var _this = this;

      if (typeof value === "string") {
        value = {
          rows: [{
            cells: [{
              value: value
            }]
          }]
        };
      }

      value = copyJSVariable(value || this.defaultData);
      if (!(value.rows instanceof Array)) value.rows = copyJSVariable(this.defaultData.rows);
      value.rows.forEach(function (row) {
        if (!(row.cells instanceof Array)) {
          row.cells = [];
        }

        if (row.cells.length === 0) {
          row.cells.push({
            value: ''
          });
        }
      });
      this.rows.forEach(function (row) {
        return row.tr.remove();
      });
      this.rows = value.rows.map(function (rowData) {
        return new TEIRow(_this, rowData);
      });
      this.$body.addChild(this.rows.map(function (row) {
        return row.tr;
      }));
      this.calcCellPos();
    },
    get: function get() {
      return {
        rows: this.rows.map(function (row) {
          return row.data;
        })
      };
    }
  },
  excelRichTextRows: {
    get: function get() {
      var cBound = this.elt.getBoundingClientRect();
      var placeHolderElt;
      var renderSpace;

      if (!cBound.width || !cBound.height) {
        if (this.parentElement) {
          placeHolderElt = ACore_({
            style: {
              display: 'none'
            }
          });
          this.selfReplace(placeHolderElt);
        }

        renderSpace = ACore_({
          style: {
            position: 'fixed',
            zIndex: -1000,
            visibility: 'hidden',
            opacity: 0
          }
        }).addTo(document.body);
      }

      var textNodes = getTextNodesIn(this.elt).filter(function (t) {
        return !!t.data;
      });
      var lineHeight = 25.662879943847656;
      cBound = this.elt.getBoundingClientRect();
      var y0 = cBound.top + 4 + 3.2348480224609375;
      var textInfos = textNodes.reduce(function (ac, txt) {
        var cell = cellOf(txt);
        var style = cell.style["export"]();
        var bounds = getTextNodeBounds(txt);
        bounds.forEach(function (bound) {
          var excelData = {
            text: bound.text.replace(/\n+$/, '')
          };
          if (excelData.text.trim().length === 0) return;
          excelData.font = {
            'name': 'Calibri'
          };

          if (style.color) {
            excelData.font.color = {
              argb: 'ff' + src_Color_Color.parse(style.color).toString('hex6').substring(1).toLowerCase()
            };
          }

          if (style.fontWeight === 'bold') {
            excelData.font.bold = true;
          }

          if (style.fontStyle === 'italic') {
            excelData.font.italic = true;
          }

          if (style.fontSize) {
            excelData.font.size = style.fontSize;
          }

          ac.push({
            rowIdx: Math.round((bound.rect.y - y0) / lineHeight),
            bound: bound.rect,
            text: excelData.text,
            excelData: excelData
          });
        });
        return ac;
      }, []);
      textInfos.sort(function (a, b) {
        if (a.rowIdx === b.rowIdx) {
          return a.bound.x - b.bound.x;
        } else {
          return a.bound.y - b.bound.y;
        }
      });
      var richTextRows = textInfos.reduce(function (ac, cr, i) {
        var rowIdx = cr.rowIdx;

        while (ac.richTextRows.length <= rowIdx) {
          ac.x = ac.x0;
          ac.richTextRows.push([]);
        }

        var marginTextL = Math.floor((cr.bound.x - ac.x) / 3.314239501953125);

        if (marginTextL > 0) {
          ac.richTextRows[ac.richTextRows.length - 1].push({
            text: ' '.repeat(marginTextL),
            font: {
              'name': 'Calibri'
            }
          });
        }

        ac.richTextRows[ac.richTextRows.length - 1].push(cr.excelData);
        ac.x = cr.bound.x + cr.bound.width;
        ac.y = cr.bound.y;
        return ac;
      }, {
        richTextRows: [],
        x: cBound.left + 5,
        x0: cBound.left + 5
      }).richTextRows;

      if (placeHolderElt) {
        placeHolderElt.selfReplace(this);
      }

      if (renderSpace) renderSpace.remove();
      return richTextRows;
    }
  }
});
/**
 *
 * @param {TEITable} table
 * @param  data
 * @constructor
 */

function TEIRow(table, data) {
  data = data || {};
  if (!(data.cells instanceof Array)) data.cells = [];
  this.table = table;
  this.tr = ACore_('tr');
  /**
   *
   * @type {TEICell[]}
   */

  this.cells = [];
  this.data = data;
}

Object.defineProperty(TEIRow.prototype, 'data', {
  set: function set(data) {
    var _this2 = this;

    this.cells = data.cells.map(function (cellData) {
      return new TEICell(_this2, cellData);
    });
    this.tr.clearChild().addChild(this.cells.map(function (cell) {
      return cell.td;
    }));
  },
  get: function get() {
    return {
      cells: this.cells.map(function (cell) {
        return cell.data;
      })
    };
  }
});

var cellOf = function cellOf(node) {
  while (node) {
    if (node.teiCell) return node.teiCell;
    node = node.parentElement;
  }

  return null;
};
/**
 *
 * @param {TEIRow} row
 * @param {TEIDataCell} data
 * @constructor
 */


function TEICell(row, data) {
  var _this3 = this;

  this.row = row;
  this.table = row.table;
  this.td = ACore_({
    tag: 'td',
    "class": 'as-table-of-text-input-cell',
    on: {
      click: function click(event) {
        if (event.target === _this3.td) _this3.focus();
      }
    },
    child: {
      tag: js_PreInput,
      attr: {
        spellcheck: 'false'
      },
      props: {
        teiCell: this
      },
      on: {
        focus: function focus() {
          _this3.table.formatTool.onFocus(_this3);
        },
        blur: function blur() {
          _this3.table.formatTool.onBlur(_this3);
        },
        change: function change(event) {
          if (event.originalEvent) _this3.table.elt.emit('change', {
            type: 'change',
            target: _this3.table,
            cell: _this3
          }, _this3.table.elt);
        }
      }
    }
  });
  this.$input = ACore_$('preinput', this.td);
  this.data = data;
  this.style = new AppPattern_Attributes(this);
  Object.assign(this.style, data.style);
  this.style.loadAttributeHandlers(this.styleHandlers);
}

TEICell.prototype.focus = function () {
  this.$input.focus();
  var textNode = getTextNodesIn(this.$input).pop();
  if (!textNode) return;
  var range = document.createRange();
  range.setStart(textNode, textNode.data.length);
  range.setEnd(textNode, textNode.data.length);
  var sel = getSelection();
  sel.removeAllRanges();
  sel.addRange(range);
};

TEICell.prototype.remove = function () {
  this.td.remove();
  var idx = this.table.cells.indexOf(this);
  if (idx >= 0) this.table.cells.splice(idx, 1);
};

TEICell.prototype.styleHandlers = {
  fontWeight: {
    set: function set(value) {
      if (value === 'bold') {
        this.td.addClass('as-bold');
      } else {
        this.td.removeClass('as-bold');
      }
    },
    get: function get() {
      if (this.td.hasClass('as-bold')) return 'bold';
      return 'normal';
    },
    "export": function _export() {
      if (this.td.hasClass('as-bold')) return 'bold';
      return undefined;
    }
  },
  fontStyle: {
    set: function set(value) {
      if (value === 'italic') {
        this.td.addClass('as-italic');
      } else {
        this.td.removeClass('as-italic');
      }
    },
    get: function get() {
      if (this.td.hasClass('as-italic')) return 'italic';
      return 'normal';
    },
    "export": function _export() {
      if (this.td.hasClass('as-italic')) return 'italic';
      return undefined;
    }
  },
  fontSize: {
    set: function set(value) {
      if (typeof value === "string") value = parseInt(value.replace(/[^0-9.]/g, ''), 10);
      if (!isRealNumber(value)) value = 11;
      value = Math.abs(value);
      value = value || 11;
      this.td.addStyle('font-size', value + 'pt');
      return value;
    },
    get: function get(ref) {
      var value = ref.get();
      return value || 11;
    },
    "export": function _export(ref) {
      var value = ref.get();
      if (value === 11) value = undefined;
      return value || undefined;
    }
  },
  color: {
    set: function set(value) {
      try {
        var cValue = src_Color_Color.parse(value);
        value = cValue.toString('hex6');
      } catch (err) {
        value = '#000000';
      }

      this.td.addStyle('color', value);
      return value;
    },
    get: function get(ref) {
      return ref.get() || '#000000';
    },
    "export": function _export(ref) {
      var value = ref.get();
      if (value === '#000000') value = undefined;
      return value || undefined;
    }
  },
  textAlign: {
    set: function set(value) {
      if (!['left', 'right', 'center'].includes(value)) value = 'left';
      this.td.addStyle('text-align', value);
      return value;
    },
    get: function get(ref) {
      var value = ref.get();
      return value || 'left';
    },
    "export": function _export(ref) {
      var value = ref.get();
      if (value === 'left') value = undefined;
      return value;
    }
  }
};
Object.defineProperty(TEICell.prototype, "data", {
  set: function set(value) {
    value = value || {};
    if (typeof value === "string") value = {
      value: value
    };

    if (typeof value.value === "string") {
      this.$input.value = value.value;
    } else {
      this.$input.value = "";
    }
  },
  get: function get() {
    var res = {};
    res.value = this.$input.value;
    res.style = this.style["export"]();
    Object.keys(res.style).forEach(function (key) {
      if (res.style[key] === undefined) delete res.style[key];
    });
    return res;
  }
});
Object.defineProperties(TEICell.prototype, {
  colspan: {
    set: function set(value) {},
    get: function get() {
      var value = this.td.attr('colspan') || '1';
      value = parseInt(value);
      if (isNaturalNumber(value)) return value;
      return 1;
    }
  },
  rowspan: {
    set: function set(value) {},
    get: function get() {
      var value = this.td.attr('rowspan') || '1';
      value = parseInt(value);
      if (isNaturalNumber(value)) return value;
      return 1;
    }
  },
  colpos: {
    get: function get() {}
  },
  rowpos: {
    get: function get() {}
  }
});

function TEIFormatTool(table) {
  var _this4 = this;

  Object.keys(TEIFormatTool.prototype).filter(function (k) {
    return k.startsWith('ev_');
  }).forEach(function (k) {
    return _this4[k] = _this4[k].bind(_this4);
  });
  this.table = table;
  this.table.elt.on('keydown', this.ev_keydown);
  this.$tool = ACore_({
    "class": 'as-table-of-text-input-tool',
    child: [{
      tag: 'numberinput',
      "class": 'as-table-of-text-input-tool-font-size',
      props: {
        value: 14
      },
      attr: {
        title: 'Ctrl+< | Ctrl+>'
      }
    }, {
      tag: 'button',
      attr: {
        title: 'Ctrl+B'
      },
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-bold'
      /*, 'as-checked'*/
      ],
      child: 'span.mdi.mdi-format-bold'
    }, {
      tag: 'button',
      attr: {
        title: 'Ctrl+I'
      },
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-italic'],
      child: 'span.mdi.mdi-format-italic'
    }, {
      tag: colorpicker_FontColorButton
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-text-align'],
      child: 'span.mdi.mdi-format-align-left',
      attr: {
        'data-align': 'left',
        title: 'Ctrl+L'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-text-align'],
      child: 'span.mdi.mdi-format-align-center',
      attr: {
        'data-align': 'center',
        title: 'Ctrl+E'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-text-align'],
      child: 'span.mdi.mdi-format-align-right',
      attr: {
        'data-align': 'right',
        title: 'Ctrl+R'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-column-plus-before',
      attr: {
        'data-command': 'left'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-column-plus-after',
      attr: {
        'data-command': 'right'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-row-plus-before',
      attr: {
        'data-command': 'above'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-row-plus-after',
      attr: {
        'data-command': 'bellow'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command', 'as-variant-danger'],
      attr: {
        'data-command': 'removeCol'
      },
      child: {
        tag: 'span',
        "class": ['mdi', 'mdi-table-column-remove']
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command', 'as-variant-danger'],
      attr: {
        'data-command': 'removeRow'
      },
      child: {
        tag: 'span',
        "class": ['mdi', 'mdi-table-row-remove']
      }
    }]
  });
  this.table.wrapper.addChildBefore(this.$tool, this.table.wrapper.firstChild);
  this.$fontSize = ACore_$('.as-table-of-text-input-tool-font-size', this.$tool).on('change', this.ev_fontSizeChange);
  this.$bold = ACore_$('.as-table-of-text-input-tool-bold', this.$tool).on('click', this.ev_clickBold);
  this.$italic = ACore_$('.as-table-of-text-input-tool-italic', this.$tool).on('click', this.ev_clickItalic);
  this.$fontColor = ACore_$(colorpicker_FontColorButton.tag, this.$tool).on('submit', this.ev_fontColorSubmit);
  this.$alignBtns = $$('.as-table-of-text-input-tool-text-align', this.$tool).reduce(function (ac, btn) {
    var value = btn.attr('data-align');
    btn.on('click', function (ev) {
      _this4.ev_clickAlign(value, ev);
    });
    ac[value] = btn;
    return ac;
  }, {});
  this.$commandBtns = $$('.as-table-of-text-input-tool-command', this.$tool).reduce(function (ac, btn) {
    var value = btn.attr('data-command');
    btn.on('click', function (ev) {
      _this4.commands[value].exec.call(_this4); // this.ev_clickInsert(value, ev);

    });
    ac[value] = btn;
    return ac;
  }, {}); // this.$removeBtn = $('.as-table-of-text-input-tool-remove-col', this.$tool)
  //     .on('click', this.ev_clickRemove);

  this.focusCell = null;
  this.table.elt.on('change', function () {
    return _this4.updateAvailableCommands();
  });
}

TEIFormatTool.prototype.commands = {
  left: {
    /**
     * @this TEIFormatTool
     */
    available: function available() {
      return this.focusCell.row.cells.length < this.table.maxCol;
    },

    /**
     * @this TEIFormatTool
     */
    exec: function exec() {
      var idx = this.focusCell.row.cells.indexOf(this.focusCell);
      this.table.rows.forEach(function (row) {
        var newCell = new TEICell(row, {
          value: ''
        });
        row.tr.addChildBefore(newCell.td, row.cells[idx].td);
        row.cells.splice(idx, 0, newCell);
      });
      this.table.elt.emit('change', {
        type: 'change',
        target: this.table
      }, this.table.elt);
    }
  },
  right: {
    /**
     * @this TEIFormatTool
     */
    exec: function exec() {
      var idx = this.focusCell.row.cells.indexOf(this.focusCell);
      this.table.rows.forEach(function (row) {
        var newCell = new TEICell(row, {
          value: ''
        });
        row.tr.addChildAfter(newCell.td, row.cells[idx].td);
        row.cells.splice(idx + 1, 0, newCell);
      });
      this.table.elt.emit('change', {
        type: 'change',
        target: this.table
      }, this.table.elt);
    }
  },
  above: {
    /**
     * @this TEIFormatTool
     */
    available: function available() {
      return this.table.rows.length < this.table.maxRow;
    },

    /**
     * @this TEIFormatTool
     */
    exec: function exec() {
      if (!this.focusCell) return;
      var colN = this.table.rows[0].cells.length;
      var focusRow = this.focusCell.row;
      var idx = this.table.rows.indexOf(focusRow);
      var newRow = new TEIRow(this.table, {
        cells: Array(colN).fill().map(function () {
          return {
            value: ''
          };
        })
      });
      this.table.rows.splice(idx, 0, newRow);
      this.table.$body.addChildBefore(newRow.tr, focusRow.tr);
      this.table.notifyChange({
        newRow: newRow
      });
    }
  },
  bellow: {
    /**
     * @this TEIFormatTool
     */
    exec: function exec() {
      if (!this.focusCell) return;
      var colN = this.table.rows[0].cells.length;
      var focusRow = this.focusCell.row;
      var idx = this.table.rows.indexOf(focusRow);
      var newRow = new TEIRow(this.table, {
        cells: Array(colN).fill().map(function () {
          return {
            value: ''
          };
        })
      });
      this.table.rows.splice(idx + 1, 0, newRow);
      this.table.$body.addChildAfter(newRow.tr, focusRow.tr);
      this.table.notifyChange({
        newRow: newRow
      });
    }
  },
  removeCol: {
    /**
     * @this TEIFormatTool
     */
    available: function available() {
      return this.table.minCol < this.focusCell.row.cells.length;
    },

    /**
     * @this TEIFormatTool
     */
    exec: function exec() {
      if (!this.focusCell) return;
      var focusRow = this.focusCell.row;
      var idx = focusRow.cells.indexOf(this.focusCell);
      this.table.rows.forEach(function (row) {
        var cell = row.cells[idx];
        cell.td.remove();
        row.cells.splice(idx, 1);
      });
      this.table.elt.emit('change', {
        type: 'change',
        target: this.table
      }, this.table.elt);
      var cellNext = focusRow.cells[idx - 1] || focusRow.cells[idx];
      if (cellNext) cellNext.focus();
    }
  },
  removeRow: {
    /**
     * @this TEIFormatTool
     */
    available: function available() {
      return this.table.minRow < this.table.rows.length;
    },

    /**
     * @this TEIFormatTool
     */
    exec: function exec() {
      if (!this.focusCell) return;
      var focusRow = this.focusCell.row;
      var idx = this.table.rows.indexOf(focusRow);
      var colIdx = focusRow.cells.indexOf(this.focusCell);
      focusRow.tr.remove();
      this.table.rows.splice(idx, 1);
      this.table.elt.emit('change', {
        type: 'change',
        target: this.table
      }, this.table.elt);
      var nextRow = this.table.rows[idx] || this.table.rows[idx - 1];
      var nexCell;

      if (nextRow) {
        nexCell = nextRow.cells[colIdx];
        if (nexCell) nexCell.focus();
      }
    }
  }
};
TEIFormatTool.prototype.commands.right.available = TEIFormatTool.prototype.commands.left.available;
TEIFormatTool.prototype.commands.bellow.available = TEIFormatTool.prototype.commands.above.available;

TEIFormatTool.prototype.onFocus = function (cell) {
  var _this5 = this;

  if (this.focusCell !== cell && this.focusCell) {
    this.focusCell.td.removeClass('as-focus');
  }

  if (!this.focusCell) {
    setTimeout(function () {
      document.addEventListener('click', _this5.ev_clickOut);
    }, 30);
  }

  this.focusCell = cell;
  this.focusCell.td.addClass('as-focus');
  this.$fontSize.value = this.focusCell.style.fontSize;
  if (this.focusCell.style.fontWeight === 'bold') this.$bold.addClass('as-checked');else this.$bold.removeClass('as-checked');
  if (this.focusCell.style.fontStyle === 'italic') this.$italic.addClass('as-checked');else this.$italic.removeClass('as-checked');
  this.$fontColor.value = this.focusCell.style.color;
  var textAlign = this.focusCell.style.textAlign;

  for (var align in this.$alignBtns) {
    if (align === textAlign) {
      this.$alignBtns[align].addClass('as-checked');
    } else {
      this.$alignBtns[align].removeClass('as-checked');
    }
  }

  this.updateAvailableCommands();
};

TEIFormatTool.prototype.updateAvailableCommands = function () {
  var _this6 = this;

  Object.keys(this.$commandBtns).forEach(function (key) {
    var available = _this6.focusCell && _this6.commands[key].available.call(_this6);

    _this6.$commandBtns[key].disabled = !available;
  });
};

TEIFormatTool.prototype.onBlur = function (cell) {};

TEIFormatTool.prototype.ev_clickOut = function (event) {
  if (hitElement(this.table.wrapper, event)) return;

  if (this.focusCell) {
    this.focusCell.td.removeClass('as-focus');
    this.focusCell = null;
  }

  document.removeEventListener('click', this.ev_clickOut);
};

TEIFormatTool.prototype.ev_fontSizeChange = function () {
  if (!this.focusCell) return;
  var prevValue = this.focusCell.style.fontSize;
  var newValue = this.$fontSize.value;

  if (newValue !== prevValue) {
    this.focusCell.style.fontSize = newValue;
    this.table.elt.emit('change', {
      type: 'change',
      target: this.table,
      cell: this
    }, this);
  }
};

TEIFormatTool.prototype.ev_clickBold = function () {
  if (this.$bold.hasClass('as-checked')) {
    this.$bold.removeClass('as-checked');
    this.focusCell.style.fontWeight = 'normal';
  } else {
    this.$bold.addClass('as-checked');
    this.focusCell.style.fontWeight = 'bold';
  }

  this.table.elt.emit('change', {
    type: 'change',
    target: this.table,
    cell: this
  }, this);
};

TEIFormatTool.prototype.ev_clickItalic = function () {
  if (!this.focusCell) return;

  if (this.$italic.hasClass('as-checked')) {
    this.$italic.removeClass('as-checked');
    this.focusCell.style.fontStyle = 'normal';
  } else {
    this.$italic.addClass('as-checked');
    this.focusCell.style.fontStyle = 'italic';
  }

  this.table.elt.emit('change', {
    type: 'change',
    target: this.table,
    cell: this
  }, this);
};

TEIFormatTool.prototype.ev_fontColorSubmit = function () {
  if (!this.focusCell) return;
  var prevColor = this.focusCell.style.color;
  var newColor = this.$fontColor.value;

  if (prevColor !== newColor) {
    this.focusCell.style.color = newColor;
    this.table.elt.emit('change', {
      type: 'change',
      target: this.table,
      cell: this
    }, this);
  }
};

TEIFormatTool.prototype.ev_clickAlign = function (newValue, event) {
  if (!this.focusCell) return;
  var prevValue = this.focusCell.style.textAlign;

  if (prevValue !== newValue) {
    this.$alignBtns[prevValue].removeClass('as-checked');
    this.$alignBtns[newValue].addClass('as-checked');
    this.focusCell.style.textAlign = newValue;
    this.table.elt.emit('change', {
      type: 'change',
      target: this.table,
      cell: this
    }, this);
  }
};

TEIFormatTool.prototype.ev_clickInsert = function (at, event) {
  if (!this.focusCell) return;
  var idx = this.table.cells.indexOf(this.focusCell);
  var bfIdx = at === 'left' ? idx : idx + 1;
  var newCell = new TEICell(this.table, {
    value: ''
  });

  if (bfIdx >= this.table.cells.length) {
    this.table.$row.addChild(newCell.td);
    this.table.cells.push(newCell);
  } else {
    this.table.$row.addChildBefore(newCell.td, this.table.cells[bfIdx].td);
    this.table.cells.splice(bfIdx, 0, newCell);
  }

  this.table.elt.emit('change', {
    type: 'change',
    target: this.table,
    cell: this
  }, this);
};

TEIFormatTool.prototype.ev_clickRemove = function () {
  if (!this.focusCell) return;
  this.focusCell.remove();
  this.table.elt.emit('change', {
    type: 'change',
    target: this.table,
    cell: this.focusCell
  }, this.table);
  this.focusCell = null;
};

TEIFormatTool.prototype.ev_keydown = function (event) {
  var key = keyboardEventToKeyBindingIdent(event);

  switch (key) {
    case 'ctrl-b':
      this.ev_clickBold(event);
      event.preventDefault();
      break;

    case 'ctrl-i':
      this.ev_clickItalic();
      event.preventDefault();
      break;

    case 'ctrl-l':
      this.ev_clickAlign('left', event);
      event.preventDefault();
      break;

    case 'ctrl-e':
      this.ev_clickAlign('center', event);
      event.preventDefault();
      break;

    case 'ctrl-r':
      this.ev_clickAlign('right', event);
      event.preventDefault();
      break;
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MSelectListItem.js


/***
 *
 * @extends {AElement}
 * @constructor
 */

function MSelectListItem() {
  this.$textCtn = ACore_$('.am-selectlist-item-text-ctn', this);
  this.$text = ACore_$('span.am-selectlist-item-text', this);
  this.$textValue = this.$text.childNodes[0];
  this.$descCtn = ACore_$('.am-selectlist-item-desc-ctn', this);
  this.$desc = ACore_$('span.am-selectlist-item-desc', this.$descCtn);
  this.$descValue = this.$desc.childNodes[0];
  this._extendClasses = [];
  this._extendStyle = {};
  this._data = "";
  this._level = 0;
}

MSelectListItem.tag = 'MSelectListItem'.toLowerCase();

MSelectListItem.render = function () {
  return ACore_({
    "class": 'am-selectlist-item',
    child: [{
      "class": 'am-selectlist-item-text-ctn',
      child: {
        tag: 'span',
        "class": 'am-selectlist-item-text',
        child: {
          text: ''
        }
      }
    }, {
      "class": 'am-selectlist-item-desc-ctn',
      child: {
        tag: 'span',
        "class": 'am-selectlist-item-desc',
        child: {
          text: ''
        }
      }
    }]
  });
};

MSelectListItem.property = Object.assign({}, js_SelectListItem.property);
MSelectListItem.property.icon = {
  set: function set(icon) {
    if (this.$icon) {
      this.$icon.remove();
      this.$icon = null;
    }

    this._icon = icon || null;

    if (this._icon) {
      this.$icon = ACore_(this._icon).addClass('am-selectlist-item-icon');
      this.$textCtn.addChildAfter(this.$icon, null);
    }
  },
  get: function get() {
    return this._icon;
  }
};
/* harmony default export */ const selectlistbox_MSelectListItem = (MSelectListItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MSelectList.js



function MSelectList_measureListSize(items) {
  var descWidth = SelectList_measureMaxDescriptionWidth(items);
  var textWidth = measureMaxTextWidth(items);
  var width = descWidth + 20 + textWidth + 12 + 15; //padding, margin

  return {
    width: width,
    descWidth: descWidth,
    textWidth: textWidth
  };
}
var MSelectList_itemPool = [];

function onClickItem(event) {
  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
    });
  }
}
/**
 * @returns {MSelectListItem}
 */


function MSelectList_makeItem() {
  return ACore_({
    tag: selectlistbox_MSelectListItem,
    on: {
      click: onClickItem
    }
  });
}
function MSelectList_requireItem($parent) {
  var item;

  if (MSelectList_itemPool.length > 0) {
    item = MSelectList_itemPool.pop();
  } else {
    item = MSelectList_makeItem();
  }

  item.$parent = $parent;
  return item;
}
function MSelectList_releaseItem(item) {
  item.$parent = null;
  item.attr('class', 'am-selectlist-item');
  item.selected = false;
  MSelectList_itemPool.push(item);
}
/*global absol*/

/***
 * @extends AElement
 * @constructor
 */

function MSelectList() {
  var res = this;
  this.defineEvent(['pressitem', 'cancelasync', 'valuevisibilityasync', 'finishasync', 'sizechangeasync']);
  this.$attachhook = ACore_('attachhook').addTo(this);
  this.sync = new Promise(function (rs) {
    res.$attachhook.once('error', rs);
  });
  this.$items = [];
  this.$itemByValue = {}; //quick find element

  this.$selectedItem = undefined;
  this._itemSession = 0;
  this._finished = true;
  this._resourceReady = true;
}

;
MSelectList.tag = "MSelectList".toLowerCase();

MSelectList.render = function () {
  return ACore_('.am-selectlist');
}; //todo: update this feature to SelectList

/***
 *
 * @param value
 * @return {MSelectListItem|null}
 */


MSelectList.prototype.getItemElementByValue = function (value) {
  return this.$itemByValue[value + ''] || null;
};

MSelectList.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;
    }
  }
};

MSelectList.prototype._requireItems = function (itemCout) {
  var item;

  while (this.$items.length < itemCout) {
    item = MSelectList_requireItem(this);
    this.$items.push(item);
    this.addChild(item);
  }

  while (this.$items.length > itemCout) {
    item = this.$items.pop();
    item.remove();
    MSelectList_releaseItem(item);
  }
};

MSelectList.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.selected = true;
        this.$selectedItem = itemElt;
        foundSelected = true;
      } else {
        itemElt.selected = false;
      }
    }
  }

  return foundSelected;
};

MSelectList.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 = MSelectList_measureListSize(items);
  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);
};

MSelectList.prototype.setItems = function (items) {
  this._finished = false;
  var session = Math.floor(Math.random() * 1000000);
  this._itemSession = session;
  this._items = items || [];
  this.$itemByValue = {};
  this.measuredSize = MSelectList_measureListSize(items);
  var itemCount = items.length;

  this._requireItems(itemCount);

  this._assignItems(0, itemCount);

  this._finished = true;
  return Object.assign({
    session: this._itemSession
  }, this.measuredSize);
};

MSelectList.property = Object.assign({}, js_SelectList.property);
MSelectList.prototype.init = js_SelectList.prototype.init;
MSelectList.eventHandler = {};
/* harmony default export */ const selectlistbox_MSelectList = ((/* unused pure expression or super */ null && (MSelectList)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MListModal.js








var MListModal_VALUE_HIDDEN = -1;
var MListModal_VALUE_NORMAL = 1;
/***
 * @extends AElement
 * @constructor
 */

function MListModal() {
  this._initDomHook();

  this._initControl();

  this._initScroller();

  this._initProperty();
}

MListModal.tag = "MListModal".toLowerCase();

MListModal.render = function () {
  return ACore_({
    extendEvent: ['pressitem', 'pressclose', 'pressout'],
    "class": 'am-list-modal',
    child: [{
      "class": ['am-list-popup-box'],
      child: [{
        "class": 'am-list-popup-header',
        child: [{
          tag: 'searchtextinput'
        }, {
          tag: 'button',
          "class": 'am-list-popup-close-btn',
          child: 'span.mdi.mdi-close'
        }]
      }, {
        "class": 'am-list-popup-list-scroller',
        child: {
          "class": 'am-list-popup-content',
          child: Array(MListModal.prototype.preLoadN).fill('.am-list-popup-list-page.am-selectlist')
        }
      }]
    }]
  });
};

MListModal.prototype.toLoadNextY = 200;
MListModal.prototype.preLoadN = 5;

MListModal.prototype._initDomHook = function () {
  this.estimateSize = {
    width: 0
  };
  this.$attachhook = ACore_('attachhook').addTo(this);
  this.$attachhook._isAttached = false;
  this.$attachhook.requestUpdateSize = this.updateSize.bind(this);
  this.$attachhook.on('attached', function () {
    HTML5_Dom.addToResizeSystem(this);
    this.requestUpdateSize();
    this._isAttached = true;
  });
  this.domSignal = new HTML5_DelaySignal();
  this.domSignal.on('viewListAt', this.viewListAt.bind(this));
  this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this));
  this.searchMaster = new list_ListSearchMaster();
};

MListModal.prototype.cancelWaiting = function () {
  this.$attachhook.cancelWaiting();
};

MListModal.prototype._initControl = function () {
  this._currentOffset = 0;
  this._startItemIdx = 0;
  this.$closeBtn = ACore_$('.am-list-popup-close-btn', this).on('click', this.notifyPressClose.bind(this));
  this.on('click', this.eventHandler.click);
  this.$box = ACore_$('.am-list-popup-box', this);
  this.$searchInput = ACore_$('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify);
};

MListModal.prototype._initScroller = function () {
  this._estimateHeight = 0;
  this._pageOffsets = Array(this.preLoadN + 1).fill(0);
  this._pageYs = Array(this.preLoadN + 1).fill(0);
  this.$listScroller = ACore_$('.am-list-popup-list-scroller', this).on('scroll', this.eventHandler.scroll);
  this.$content = ACore_$('.am-list-popup-content', this);
  this.$listPages = $$('.am-list-popup-list-page', this);
};

MListModal.prototype._initProperty = function () {
  this._items = [];
  this._values = [];
  this._valueDict = {};
  this._itemsByValue = {};
  this._preDisplayItems = [];
  this._displayItems = [];
  this._searchCache = {};
  this._displayValue = MListModal_VALUE_NORMAL;
  this.displayValue = MListModal_VALUE_NORMAL;
  this.items = [];
};

MListModal.prototype.findItemsByValue = function (value) {
  return this._itemsByValue[keyStringOf(value)];
};

MListModal.prototype.updateSize = function () {
  var bound = this.getBoundingClientRect();
  var boxBound = this.$box.getBoundingClientRect();
  var listScrollerBound = this.$listScroller.getBoundingClientRect();
  this.$listScroller.addStyle('max-height', 'calc(' + (bound.height - listScrollerBound.top + boxBound.top) + 'px - var(--modal-margin-bottom) - var(--modal-margin-top))');
};

MListModal.prototype._requireItem = function (pageElt, n) {
  var itemElt;

  while (pageElt.childNodes.length > n) {
    itemElt = pageElt.lastChild;
    itemElt.selfRemove();
    MSelectList_releaseItem(itemElt);
  }

  while (pageElt.childNodes.length < n) {
    itemElt = MSelectList_requireItem(this);
    pageElt.addChild(itemElt);
  }
};

MListModal.prototype._listToDisplay = function (items) {
  return items;
};
/***
 *
 * @param {Array<{value:String|Number}>} items
 * @return {Array<{value:String|Number}>}
 */


MListModal.prototype._filterValue = function (items) {
  if (this._displayValue === MListModal_VALUE_NORMAL) return items;
  var dict = this._valueDict;
  return items.filter(function (item) {
    return !dict[item.value + ''];
  });
};

MListModal.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 + '';
  }
};

MListModal.prototype._alignPage = function () {
  var pageElt;
  var pageBound;

  for (var i = 0; i < this.$listPages.length; ++i) {
    pageElt = this.$listPages[i];
    pageBound = pageElt.getBoundingClientRect();
    if (i > 0) this.$listPages[i].addStyle('top', this._pageYs[i] + 'px');
    this._pageYs[i + 1] = this._pageYs[i] + pageBound.height;
  }

  this.$content.addStyle('height', this._pageYs[this.preLoadN] + 'px');
};

MListModal.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;
      }
    });
  });
  if (this._displayValue === MListModal_VALUE_HIDDEN) this._alignPage();
};

MListModal.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 = HTML5_Dom.getScreenSize();
  var maxItem = Math.ceil(screenSize.height / (fontSize * 2.25));
  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];

    if (pageIndex === 0) {
      this._pageYs[pageIndex] = sIdx / this._displayItems.length * contentBound.height;
    }

    pageElt.addStyle('top', this._pageYs[pageIndex] + 'px');

    this._requireItem(pageElt, nItem);

    this._assignItems(pageElt, sIdx);

    pageBound = pageElt.getBoundingClientRect();
    this._pageYs[pageIndex + 1] = this._pageYs[pageIndex] + pageBound.height;
  }

  if (this._pageOffsets[this.preLoadN] === this._displayItems.length) {
    this.$content.addStyle('height', this._pageYs[this.preLoadN] + 'px');
  } else {
    this.$content.addStyle('height', this._estimateHeight + 'px');
  }

  this._updateSelectedItem();
};

MListModal.prototype.viewListAtFirstSelected = function () {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('viewListAtFirstSelected');
    return;
  }

  if (this._displayValue == MListModal_VALUE_HIDDEN) {
    return false;
  } else if (this._values.length > 0) {
    var value = this._values[0];
    var itemHolders = this._itemHolderByValue[value + ''];

    if (itemHolders) {
      this.domSignal.once('scrollIntoSelected', function () {
        var holder = itemHolders[0];
        this.viewListAt(holder.idx);
        var itemElt = ACore_$('.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;
};

MListModal.prototype.searchItemByText = js_SelectListBox.prototype.searchItemByText;
MListModal.prototype.prepareSearch = js_SelectListBox.prototype.prepareSearch;

MListModal.prototype.resetSearchState = function () {
  this.$searchInput.value = '';
  this._preDisplayItems = this._listToDisplay(this._items);
  this._displayItems = this._filterValue(this._preDisplayItems);

  this._updateItemIndex();

  this.domSignal.emit('viewListAt', 0);
  this.$listScroller.scrollTop = 0;
};

MListModal.prototype.notifyPressOut = function () {
  this.emit('pressout', {
    target: this,
    type: 'pressout'
  }, this);
};

MListModal.prototype.notifyPressClose = function () {
  this.emit('pressclose', {
    target: this,
    type: 'pressclose'
  }, this);
};

MListModal.prototype._findFirstPageIdx = function () {
  for (var i = 0; i < this.preLoadN; ++i) {
    if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) {
      return i;
    }
  }

  return -1;
};

MListModal.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;
};

MListModal.prototype._updateItemIndex = function () {
  this._itemHolderByValue = this._displayItems.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;
  }, {});
};

MListModal.property = {};
/***
 *
 * @type {MListModal}
 */

MListModal.property.items = {
  get: function get() {
    return this._items;
  },
  set: function set(items) {
    var _this = this;

    items = items || [];
    if (!Array.isArray(items)) items = []; //no

    items = copySelectionItemArray(items);
    this._items = items;
    this._preDisplayItems = this._listToDisplay(this._items);
    this._displayItems = this._filterValue(this._preDisplayItems);
    this._itemsByValue = items.reduce(function reducer(ac, cr) {
      var key = keyStringOf(cr.value);
      if (!ac[key]) ac[key] = [];else console.error("Duplicate value", cr);
      ac[key].push(cr);
      if (cr.items && cr.items.reduce) cr.items.reduce(reducer, ac);
      return ac;
    }, {});

    this._updateItemIndex();
    /*****************/


    this.idx2key = [];

    var makeSearchItem = function makeSearchItem(it) {
      var res = {
        value: _this.idx2key.length
      };
      var valueKey;
      res.text = it.text + '';
      if (it.desc) res.text += it.desc;
      valueKey = keyStringOf(it.value);
      it.valueKey = valueKey;

      _this.idx2key.push(valueKey);

      if (it.items && it.items.length > 0 && it.items.map) {
        res.items = it.items.map(makeSearchItem);
      }

      return res;
    };

    this.searchingItems = this._items.map(makeSearchItem);
    this.key2idx = this.idx2key.reduce(function (ac, cr, i) {
      ac[cr] = i;
      return ac;
    }, {});
    this.searchMaster.transfer(this.searchingItems);
    /*****************/

    this._searchCache = {};
    var estimateSize = MSelectList_measureListSize(this._preDisplayItems);

    if (estimateSize.descWidth > 0) {
      this.$listScroller.addStyle('--desc-width', 100 * (estimateSize.descWidth + 15) / estimateSize.width + '%');
    } else {
      this.$listScroller.removeStyle('--desc-width');
    }

    var estimateHeight = this._displayItems.length * 30 * Math.ceil(estimateSize.width * 1.2 / Math.min(HTML5_Dom.getScreenSize().width - 80, 500));
    this._estimateHeight = estimateHeight;
    this.$content.addStyle('height', estimateHeight + 'px');
    this.estimateSize = estimateSize;
    this.domSignal.emit('viewListAt', 0);
  }
};
MListModal.property.values = {
  set: function set(values) {
    values = values || [];
    values = values.slice();
    this._values = values;
    this._valueDict = values.reduce(function (ac, cr) {
      ac[cr + ''] = true;
      ac[keyStringOf(cr)] = cr;
      return ac;
    }, {});
    this._displayItems = this._filterValue(this._preDisplayItems);

    this._updateItemIndex(); //todo


    if (this._pageOffsets[this.preLoadN] > this._pageOffsets[0]) this._updateSelectedItem();
  },
  get: function get() {
    return this._values;
  }
};
MListModal.property.displayValue = {
  set: function set(value) {
    this._displayValue = value;
    this._displayItems = this._filterValue(this._preDisplayItems);

    this._updateItemIndex();

    if (value === MListModal_VALUE_HIDDEN) {
      this.addClass('am-value-hidden');
    } else {
      this.removeClass('am-value-hidden');
    }
  },
  get: function get() {
    return this._displayValue;
  }
};
MListModal.property.enableSearch = {
  set: function set(value) {
    if (value) this.$box.addClass('am-enable-search');
  },
  get: function get() {
    return this.$box.removeClass('am-enable-search');
  }
};
/***
 *
 * @type {MListModal}
 */

MListModal.eventHandler = {};
/***
 *
 * @param {MouseEvent} event
 */

MListModal.eventHandler.click = function (event) {
  if (event.target === this) this.notifyPressOut();
};

MListModal.eventHandler.searchModify = function () {
  var _this2 = this;

  var text = this.$searchInput.value;
  var searchSession = Math.random() + '';
  this._seachSession = searchSession;
  this.searchItemByText(text).then(function (searchedItems) {
    if (_this2._seachSession !== searchSession) return;
    _this2._preDisplayItems = _this2._listToDisplay(searchedItems);
    _this2._displayItems = _this2._filterValue(_this2._preDisplayItems);

    _this2._updateItemIndex();

    _this2.viewListAt(0);

    _this2.$listScroller.scrollTop = 0;
  });
};

MListModal.eventHandler.scroll = function () {
  var scrollerBound = this.$listScroller.getBoundingClientRect();

  var topIdx = this._findFirstPageIdx();

  var fontSize = this.$listScroller.getFontSize() || 14;
  var screenSize = HTML5_Dom.getScreenSize();
  var maxItem = Math.ceil(screenSize.height / (fontSize * 2.25));
  var pageBound;
  var topBound = this.$listPages[topIdx].getBoundingClientRect();

  if (this._pageOffsets[topIdx] > 0) {
    if (topBound.top + this.toLoadNextY > scrollerBound.top) {
      this._pageOffsets.unshift(this._pageOffsets.pop());

      this._pageYs.unshift(this._pageYs.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]);

      pageBound = this.$listPages[topIdx].getBoundingClientRect();
      this._pageYs[topIdx] = this._pageYs[topIdx + 1] - pageBound.height;
      this.$listPages[topIdx].addStyle('top', this._pageYs[topIdx] + 'px');

      this._updateSelectedItem();

      if (this._pageOffsets[topIdx] === 0) {
        this.$listPages[0].addStyle('top', '0');
        this._pageYs[0] = 0;

        this._alignPage();

        this.$listScroller.scrollTop = 0;
      }
    }
  } else {
    if (topBound.top > scrollerBound.top) {
      this.$listScroller.scrollTop += topBound.top - scrollerBound.top;
    }
  }

  var botIdx = this._findLastPageIdx();

  var botBound;
  botBound = this.$listPages[botIdx].getBoundingClientRect();

  if (this._pageOffsets[botIdx + 1] < this._displayItems.length) {
    if (botBound.bottom - this.toLoadNextY < scrollerBound.bottom) {
      this._pageOffsets.push(this._pageOffsets.shift());

      this._pageYs.push(this._pageYs.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._pageYs[botIdx] + 'px');

      this._requireItem(this.$listPages[botIdx], this._pageOffsets[botIdx + 1] - this._pageOffsets[botIdx]);

      this._assignItems(this.$listPages[botIdx], this._pageOffsets[botIdx]);

      pageBound = this.$listPages[botIdx].getBoundingClientRect();
      this._pageYs[botIdx + 1] = this._pageYs[botIdx] + pageBound.height;

      this._updateSelectedItem();

      if (this._pageOffsets[botIdx + 1] < this._displayItems.length) {
        this.$content.addStyle('height', this._estimateHeight + 'px');
      } else {
        this.$content.addStyle('height', this._pageYs[botIdx + 1] + 'px');
      }
    }
  }
};

/* harmony default export */ const selectlistbox_MListModal = (MListModal);
absol_acomp_ACore.install('mlistmodal', MListModal);
HTML5_Dom.ShareInstance.install('mlistmodal', MListModal);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectmenu/MSelectMenu.js





/***
 * @extends AElement
 * @constructor
 */

function MSelectMenu() {
  var _this = this;

  this._value = undefined;
  this._isFocus = false;
  this._itemsByValue = {};
  this.$holderItem = ACore_$('.am-selectmenu-holder-item', this);
  /***
   * @type {MListModal}
   */

  this.$selectlist = ACore_({
    tag: selectlistbox_MListModal
  });
  this.$selectlist.cancelWaiting();

  var checkView = function checkView() {
    if (_this.isDescendantOf(document.body)) {
      setTimeout(checkView, 10000);
    } else {
      if (_this.$selectlist.searchMaster) _this.$selectlist.searchMaster.destroy();
    }
  };

  setTimeout(checkView, 30000);
  this.$selectlist.on('pressitem', this.eventHandler.pressItem, true).on('pressout', this.eventHandler.pressOut).on('pressclose', this.eventHandler.pressOut);
  this.on('click', this.eventHandler.click, true);
  this.$attachhook = ACore_$('attachhook', this).on('error', this.eventHandler.attached);
  /**
   * @name value
   * @memberof MSelectMenu#
   */

  /**
   * @name items
   * @memberof MSelectMenu#
   */
}

MSelectMenu.tag = 'mselectmenu';

MSelectMenu.render = function () {
  return ACore_({
    "class": ['absol-selectmenu', 'am-selectmenu', 'as-strict-value'],
    extendEvent: ['change', 'minwidthchange'],
    attr: {
      tabindex: '1'
    },
    child: ['.am-selectmenu-holder-item', {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }, 'attachhook']
  });
};

MSelectMenu.prototype.findItemsByValue = function (value) {
  return this.$selectlist.findItemsByValue(value);
};

MSelectMenu.prototype.updateItem = function () {
  this.$holderItem.clearChild();
  var selected = this.findItemsByValue(this.value);

  if (selected) {
    var elt = ACore_({
      tag: selectlistbox_MSelectListItem,
      props: {
        data: selected[0]
      }
    }).addTo(this.$holderItem);
  }
};

MSelectMenu.prototype.notifyChange = function (data) {
  this.emit('change', Object.assign({}, data, {
    type: 'change',
    target: this
  }), this);
};

MSelectMenu.prototype._dictByValue = js_SelectMenu.prototype._dictByValue;

MSelectMenu.prototype.getRecommendWith = function () {
  var res = 12 + this.$selectlist.estimateSize.textWidth + 30;
  if (this.$selectlist.estimateSize.descWidth) res += this.$selectlist.estimateSize.descWidth + 20;
  return res;
};

MSelectMenu.prototype.init = js_SelectMenu.prototype.init;
MSelectMenu.property = {};
MSelectMenu.property.items = {
  set: function set(value) {
    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);
    this.$selectlist.items = value;

    if (!this._itemsByValue[this.value] && value.length > 0 && false) {} else this.updateItem();

    if (this.style.width === 'auto' || !this.style.width) {
      this.addStyle('--recommend-width', this.getRecommendWith() / 14 + 'em');
    }
  },
  get: function get() {
    return this._items || [];
  }
};
MSelectMenu.property.value = {
  set: function set(value) {
    this._value = value;
    this.$selectlist.values = [value];
    this.updateItem();
  },
  get: function get() {
    if (!this.strictValue) return this._value;
    var selected = this.findItemsByValue(this._value);

    if (selected) {
      return selected[0].value;
    } else {
      if (this._items && this._items.length > 0) {
        return this._items[0].value;
      }
    }

    return this._value;
  }
};
MSelectMenu.property.strictValue = {
  set: function set(value) {
    if (value) {
      this.addClass('as-strict-value');
    } else {
      this.removeClass('as-strict-value');
    }
  },
  get: function get() {
    return this.hasClass('as-strict-value');
  }
};
MSelectMenu.property.enableSearch = {
  set: function set(value) {
    this.$selectlist.enableSearch = !!value;
  },
  get: function get() {
    return this.$selectlist.enableSearch;
  }
};
MSelectMenu.property.isFocus = {
  set: function set(value) {
    var thisSM = this;
    value = !!value;
    if (value === this._isFocus) return;
    if (this.readOnly || this.disabled) return;
    this._isFocus = value;

    if (value) {
      this.$selectlist.addTo(document.body);

      if (this.$selectlist.$attachhook) {
        this.$selectlist.$attachhook.emit('attached');
      }

      thisSM.$selectlist.viewListAt(0);
      thisSM.$selectlist.viewListAtFirstSelected();
    } else {
      this.$selectlist.selfRemove();
      setTimeout(function () {
        thisSM.$selectlist.resetSearchState();
      }, 100);
    }
  },
  get: function get() {
    return this._isFocus;
  }
};
MSelectMenu.property.selectedIndex = js_SelectMenu.property.selectedIndex;
MSelectMenu.property.disabled = js_SelectMenu.property.disabled;
MSelectMenu.property.hidden = js_SelectMenu.property.hidden;
/**
 * @type {MSelectMenu}
 */

MSelectMenu.eventHandler = {};

MSelectMenu.eventHandler.attached = function () {
  if (this.style.width === 'auto' || !this.style.width) {
    this.addStyle('--recommend-width', this.getRecommendWith() / 14 + 'em');
  }
};

MSelectMenu.eventHandler.click = function (event) {
  this.isFocus = !this.isFocus;
};

MSelectMenu.eventHandler.pressOut = function (event) {
  this.isFocus = false;
};

MSelectMenu.eventHandler.pressItem = function (event) {
  var newValue = event.value;

  if (newValue !== this._value) {
    var lastValue = this._value;
    this._value = newValue;
    this.$selectlist.values = [newValue];
    this.updateItem();
    var changeEvent = Object.assign({}, event, {
      lastValue: lastValue
    });
    setTimeout(function () {
      this.notifyChange(changeEvent);
    }.bind(this), 1);
  }

  setTimeout(function () {
    this.isFocus = false;
  }.bind(this), 100);
};

absol_acomp_ACore.install(MSelectMenu);
/* harmony default export */ const selectmenu_MSelectMenu = (MSelectMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreemenu/MSelectTreeMenu.js






/***
 * @extends MListModal
 * @constructor
 */

function MTreeModal() {
  selectlistbox_MListModal.call(this);
}
MTreeModal.tag = 'MTreeModal'.toLowerCase();

MTreeModal.render = function () {
  return selectlistbox_MListModal.render().addClass('am-tree-modal');
};

Object.assign(MTreeModal.prototype, selectlistbox_MListModal.prototype);

MTreeModal.prototype._listToDisplay = function (items) {
  return treeListToList(items);
};

MTreeModal.property = Object.assign({}, selectlistbox_MListModal.property);
MTreeModal.eventHandler = Object.assign({}, selectlistbox_MListModal.eventHandler);
/**
 * @extends {AElement}
 * @constructor
 */

function MSelectTreeMenu() {
  this._isFocus = false;
  this._itemsByValue = {};
  this.$holderItem = ACore_$('.am-selectmenu-holder-item', this);
  /***
   * @type {MTreeModal}
   */

  this.$selectlist = ACore_({
    tag: MTreeModal
  });
  this.$selectlist.cancelWaiting();
  this.$selectlist.on('pressitem', this.eventHandler.pressItem, true).on('pressout', this.eventHandler.pressOut).on('pressclose', this.eventHandler.pressOut);
  this.on('click', this.eventHandler.click, true);
  this.$attachhook = ACore_$('attachhook', this).on('error', this.eventHandler.attached);
  this.addStyle('--as-width-limit', calcWidthLimit() + 'px');
}

MSelectTreeMenu.tag = 'MSelectTreeMenu'.toLowerCase();

MSelectTreeMenu.render = function () {
  return selectmenu_MSelectMenu.render().addClass('am-select-tree-menu');
};

Object.assign(MSelectTreeMenu.prototype, selectmenu_MSelectMenu.prototype);
MSelectTreeMenu.property = Object.assign({}, selectmenu_MSelectMenu.property);
MSelectTreeMenu.eventHandler = Object.assign({}, selectmenu_MSelectMenu.eventHandler);

MSelectTreeMenu.prototype._dictByValue = function (items) {
  return items.reduce(function visitor(ac, cr) {
    if (cr.items && cr.items.reduce) {
      cr.items.reduce(visitor, ac);
    }

    var value = cr.value + '';
    ac[value] = cr;
    return ac;
  }, {});
};

absol_acomp_ACore.install(MSelectTreeMenu);
/* harmony default export */ const selecttreemenu_MSelectTreeMenu = (MSelectTreeMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/mobile/MHeaderBar.js



/**
 * @exatends AElement
 * @constructor
 */

function MHeaderBar() {
  this._title = null;
  this._titleDesc = null;
  this._actionIcon = null;
  this._commands = [];
  this._quickmenuHolder = null;
  this._quickmenu = null;
  this.$right = ACore_$('.am-header-bar-right', this);
  this.$leftBtn = null;
  this.$titleCtn = null;
  this.$title = null;
  this.$titleDesc = null;
  this.$commands = [];
}

MHeaderBar.tag = 'MHeaderBar'.toLowerCase();

MHeaderBar.render = function () {
  return ACore_({
    extendEvent: ['action', 'command'],
    "class": 'am-header-bar',
    child: [{
      "class": 'am-header-bar-right'
    }]
  });
};

MHeaderBar.prototype.notifyAction = function () {
  this.emit('action', {
    type: 'action',
    target: this
  }, this);
};

MHeaderBar.prototype.notifyCommand = function (commandItem) {
  this.emit('command', {
    type: 'command',
    target: this,
    commandName: commandItem.name,
    commandItem: commandItem
  }, this);
};

MHeaderBar.prototype.showTitle = function (flag) {
  if (!this.$titleCtn && flag) {
    this.$titleCtn = ACore_({
      "class": 'am-header-bar-title-ctn',
      child: [{
        "class": 'am-header-bar-no-size-wrapper',
        child: {
          "class": 'am-header-bar-title-wrapper',
          child: [{
            "class": 'am-header-bar-title'
          }, {
            "class": 'am-header-bar-title-desc'
          }]
        }
      }]
    });
    this.$title = ACore_$('.am-header-bar-title', this.$titleCtn);
    this.$titleDesc = ACore_$('.am-header-bar-title-desc', this.$titleCtn);
  }

  if (flag) {
    this.insertBefore(this.$titleCtn, this.$right);
  } else {
    if (this.$titleCtn) this.$titleCtn.remove();
  }
};

MHeaderBar.prototype.showActionBtn = function (flag) {
  if (!this.$leftBtn && flag) {
    this.$leftBtn = ACore_({
      tag: 'button',
      "class": 'am-header-bar-left-btn',
      child: 'span.mdi.mdi-chevron-left',
      on: {
        click: this.notifyAction.bind(this)
      }
    });
  }

  if (flag) {
    this.insertBefore(this.$leftBtn, this.firstChild);
  } else {
    if (this.$leftBtn) this.$leftBtn.remove();
  }
};

MHeaderBar.prototype.showQuickMenu = function (flag) {
  if (!this.$quickmenuBtn && flag) {
    this.$quickmenuBtn = ACore_({
      tag: 'button',
      "class": ['am-header-bar-action', 'am-header-bar-quickmenu-btn'],
      child: {
        "class": 'am-header-bar-quickmenu-btn-circle',
        child: ['span.mdi.mdi-dots-horizontal-circle-outline', 'span.mdi.mdi-dots-horizontal-circle']
      }
    });
  }

  if (flag) {
    this.$right.addChild(this.$quickmenuBtn);
  } else {
    if (this.$quickmenuBtn) this.$quickmenuBtn.remove();
  }
};

MHeaderBar.prototype._makeCommandBtn = function (item) {
  return ACore_({
    tag: 'button',
    "class": 'am-header-bar-command',
    child: item.icon || [],
    on: {
      click: this.notifyCommand.bind(this, item)
    }
  });
};

MHeaderBar.property = {};
/**
 * @type {MHeaderBar}
 */

MHeaderBar.property.quickmenu = {
  set: function set(value) {
    if (this._quickmenuHolder) {
      this._quickmenuHolder.remove();

      this._quickmenu = null;
    }

    if (value) {
      this.showQuickMenu(true);
      var button = this.$quickmenuBtn;
      var onClose = value.onClose;
      var onOpen = value.onOpen;

      value.onOpen = function () {
        button.addClass('am-status-active');
        onOpen && onOpen.apply(this, arguments);
      };

      value.onClose = function () {
        button.removeClass('am-status-active');
        onClose && onClose.apply(this, arguments);
      };

      if (!value.getAnchor) {
        value.getAnchor = function () {
          return [2];
        };
      }

      if (!value.getMenuProps && value.props) {
        value.getMenuProps = function () {
          var res = Object.assign({}, value.props);

          if (typeof res.items === "function") {
            res.items = res.items();
          }

          return res;
        };
      }

      this._quickmenuHolder = js_QuickMenu.toggleWhenClick(this.$quickmenuBtn, value);
    } else {
      this.showQuickMenu(false);
      value = null;
    }

    this._quickmenu = value;
  },
  get: function get() {
    return this._quickmenu;
  }
};
/**
 * @type {MHeaderBar}
 */

MHeaderBar.property.title = {
  set: function set(value) {
    if (value) {
      this.showTitle(true);

      if (typeof value === 'string') {
        this.$title.innerHTML = value;
      } else {
        this.$title.clearChild().addChild(ACore_(value));
      }
    } else {
      this.showTitle(false);
      value = null;
    }

    this._title = value;
  },
  get: function get() {
    return this._title;
  }
};
/**
 * @type {MHeaderBar}
 */

MHeaderBar.property.titleDesc = {
  set: function set(value) {
    if (value) {
      value = value + '';
      this.showTitle(true);
      this.$titleDesc.clearChild().addChild(ACore_({
        text: value
      }));
    } else {
      this.showTitle(false);
      if (this.$titleDesc) this.$titleDesc.clearChild();
      value = null;
    }

    this._titleDesc = value;
  },
  get: function get() {
    return this._titleDesc;
  }
};
/**
 * @type {MHeaderBar}
 */

MHeaderBar.property.actionIcon = {
  set: function set(value) {
    if (value) {
      this.showActionBtn(true);
      this.$leftBtn.clearChild().addChild(ACore_(value));
    } else {
      this.showActionBtn(false);
      value = null;
    }

    this._actionIcon = value;
  },
  get: function get() {
    return this._actionIcon;
  }
};
/**
 * @type {MHeaderBar}
 */

MHeaderBar.property.commands = {
  set: function set(value) {
    this.$commands.forEach(function (e) {
      e.selftRemove();
    });
    this.$commands = [];
    var commandBtn;

    if (value) {
      var firstChild = this.$right.firstChild;

      if (firstChild) {
        for (var i = 0; i < value.length; ++i) {
          commandBtn = this._makeCommandBtn(value[i]);
          this.$right.addChildBefore(commandBtn, firstChild);
        }
      } else {
        for (var i = 0; i < value.length; ++i) {
          commandBtn = this._makeCommandBtn(value[i]);
          this.$right.addChild(commandBtn);
        }
      }
    } else {
      this._commands = [];
    }

    this._commands = value;
  },
  get: function get() {
    return this._commands;
  }
};
absol_acomp_ACore.install(MHeaderBar);
/* harmony default export */ const mobile_MHeaderBar = (MHeaderBar);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/mobile/MExplore.js



var makeTextToNode = function makeTextToNode(data, pElt) {
  var node;

  if (typeof data === "string") {
    node = ACore_({
      text: data
    });
  } else if (data instanceof Array) {
    data.forEach(function (it) {
      return makeTextToNode(it, pElt);
    });
  }

  if (node) pElt.addChild(node);
};

var makeIconToNode = function makeIconToNode(data, pElt) {
  var node;
  if (data) node = ACore_(data);
  if (node) pElt.addChild(node);
};

function MExploreSectionBreak() {
  this._name = '';
  this.$name = ACore_$('.am-explore-section-break-name', this);
}
MExploreSectionBreak.tag = 'MExploreSectionBreak'.toLowerCase();

MExploreSectionBreak.render = function () {
  return ACore_({
    "class": 'am-explore-section-break',
    child: [{
      "class": 'am-explore-section-break-name'
    }, '.am-explore-section-break-line']
  });
};

MExploreSectionBreak.property = {};
MExploreSectionBreak.property.name = {
  set: function set(value) {
    if (value === null || value === undefined) value = '';
    this._name = value;
    this.$name.clearChild();
    makeTextToNode(value, this.$name);
  },
  get: function get() {
    return this._name;
  }
};
function MExploreItemBlock() {
  this.$name = ACore_$('.am-explore-item-block-name', this);
  this._name = '';
  this._icon = null;
  this.$icon = ACore_$('.am-explore-item-block-icon', this);
  this.$name = ACore_$('.am-explore-item-block-name', this);
  /**
   * @name name
   * @type {string}
   * @memberof MExploreItemBlock#
   */

  /**
   * @name icon
   * @memberof MExploreItemBlock#
   */
}
MExploreItemBlock.tag = 'MExploreItemBlock'.toLowerCase();

MExploreItemBlock.render = function () {
  return ACore_({
    "class": 'am-explore-item-block',
    child: [{
      "class": 'am-explore-item-block-icon'
    }, {
      "class": 'am-explore-item-block-name'
    }]
  });
};

MExploreItemBlock.property = {};
MExploreItemBlock.property.icon = {
  set: function set(value) {
    value = value || null;
    makeIconToNode(value, this.$icon);
  },
  get: function get() {
    return this._icon;
  }
};
MExploreItemBlock.property.name = {
  set: function set(value) {
    if (value === null || value === undefined) value = '';
    makeTextToNode(value, this.$name);
  },
  get: function get() {
    return this._name;
  }
};
function MExploreItemList() {}
MExploreItemList.tag = 'MExploreItemList'.toLowerCase();

MExploreItemList.render = function () {};
/**
 * @extends AElement
 * @constructor
 */


function MExploreGroup() {
  this.$br = ACore_$(MExploreSectionBreak.tag, this);
  this._items = [];
  this.$items = [];
  /**
   * @name items
   * @type {[]}
   * @memberof MExploreGroup#
   */
}
MExploreGroup.tag = 'MExploreGroup'.toLowerCase();

MExploreGroup.render = function () {
  return ACore_({
    "class": 'am-explore-group',
    extendEvent: ['press'],
    child: [{
      tag: MExploreSectionBreak
    }]
  });
};

MExploreGroup.property = {};
MExploreGroup.property.name = {
  set: function set(value) {
    this.$br.name = value;
  },
  get: function get() {
    return this.$br.name;
  }
};
MExploreGroup.property.items = {
  set: function set(items) {
    var _this = this;

    if (!items || !items.slice || !items.map) items = [];
    items = items.slice();
    this._items = items;

    while (this.$items.length) {
      this.$items.pop().selfRemove();
    }

    this.$items = items.map(function (it) {
      var elt = ACore_({
        tag: MExploreItemBlock,
        props: {
          data: it,
          name: it.name,
          icon: it.icon
        },
        on: {
          click: function click(event) {
            _this.emit('press', {
              type: 'press',
              target: elt,
              itemData: it,
              originalEvent: event,
              itemElt: elt
            }, _this);
          }
        }
      });

      return elt;
    });
    this.addChild(this.$items);
  },
  get: function get() {
    return this._items;
  }
};
function MSpringboardMenu() {
  this.$groups = [];
}
MSpringboardMenu.tag = 'MSpringboardMenu'.toLowerCase();

MSpringboardMenu.render = function () {
  return ACore_({
    "class": 'am-springboard-menu',
    extendEvent: ['press']
  });
};

MSpringboardMenu.property = {};
MSpringboardMenu.property.groups = {
  set: function set(groups) {
    var _this2 = this;

    if (!(groups instanceof Array)) groups = [];
    this.$groups.forEach(function (elt) {
      return elt.selfRemove();
    });
    this.$groups = groups.map(function (group) {
      var elt = ACore_({
        tag: MExploreGroup,
        props: {
          data: group,
          name: group.name,
          items: group.items || []
        },
        on: {
          press: function press(event) {
            _this2.emit('press', Object.assign({
              groupElt: elt,
              groupData: group
            }, event), _this2);
          }
        }
      });

      return elt;
    });
    this.addChild(this.$groups);
  },
  get: function get() {
    return this.$groups.map(function (gr) {
      return gr.data;
    });
  }
};
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/colorpickerbutton.css
var colorpickerbutton = __webpack_require__(1693);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/ColorPicker.js





function ColorPicker() {
  var res = ACore_(['<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 = ACore_$('.f-mode', res);
  res.$sep0 = ACore_$('.separator0', res);
  res.$sep1 = ACore_$('.separator1', res);
  res.$sep2 = ACore_$('.separator2', res);
  res.$num0 = ACore_('editabletext.num0');
  res.$num1 = ACore_('editabletext.num1');
  res.$num2 = ACore_('editabletext.num2');
  res.$num3 = ACore_('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);
  ACore_$(".absol-editabe-text.num0", res).selfReplace(res.$num0);
  ACore_$(".absol-editabe-text.num1", res).selfReplace(res.$num1);
  ACore_$(".absol-editabe-text.num2", res).selfReplace(res.$num2);
  ACore_$(".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 = ACore_$('.absol-color-picker-color', res);
  res.$colorVal = ACore_$('.absol-color-picker-val', res);
  res.$draggerVal = ACore_$('.absol-color-dragger', res.$colorVal);
  res.eventHandler = HTML5_OOP.bindFunctions(res, ColorPicker.eventHandler);
  res.$colorVal.on('pointerdown', res.eventHandler.colorPointerDown, true);
  res.$hue = ACore_$('.absol-color-picker-hue', res);
  res.$draggerHue = ACore_$('.absol-color-dragger', res.$hue);
  res.$hue.on('pointerdown', res.eventHandler.huePointerDown);
  res.$alpha = ACore_$('.absol-color-picker-alpha', res);
  res.$alpha.on('pointerdown', res.eventHandler.alphaPointerDown);
  res.$draggerAlpha = ACore_$('.absol-color-dragger', res.$alpha);
  res.$textContainer = ACore_$('.absol-color-picker-text-container', res);
  res.$mode = ACore_$('.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 = ACore_$('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 = src_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 src_Color_Color.fromHSBA(this.hue, this.saturation, this.brightness, this.alpha);
  }
};
ColorPicker.property.RGBA = {
  set: function set(value) {
    var hsba = src_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 = src_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 = src_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 = src_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 = src_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 = src_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 : src_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];
};

absol_acomp_ACore.install('ColorPicker'.toLowerCase(), ColorPicker);
/* harmony default export */ const colorpicker_ColorPicker = ((/* unused pure expression or super */ null && (ColorPicker)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/ColorPickerButton.js










var ColorPickerButton_isMobile = Detector_BrowserDetector.isMobile;
/***
 * @extends AElement
 * @constructor
 */

function ColorPickerButton() {
  if (!ColorPickerButton.css) {
    ColorPickerButton.css = new HTML5_DynamicCSS().setProperty('.as-color-cell.as-color-picker-button-inner.as-null .as-color-cell-value', 'background-image', "url(\"data:image/svg+xml;base64,".concat(base64EncodeUnicode(red_cross.replace(/\$width/g, '33').replace(/\$height/g, '18')), "\")")).commit();
  }

  this.mode = 'OBJECT';
  this.$innerValue = ACore_$('.as-color-picker-button-inner', this);
  this.prepare();
  this.on('click', this.eventHandler.click);
  /***
   * @name value
   * @type {string|Color}
   * @memberOf ColorPickerButton#
   */

  /***
   * @name hasOpacity
   * @type {boolean}
   * @memberOf ColorPickerButton#
   */

  /***
   * @name nullable
   * @type {boolean}
   * @memberOf ColorPickerButton#
   */
}

ColorPickerButton.tag = 'ColorPickerButton'.toLowerCase();
ColorPickerButton.prototype.supportedModes = ['OBJECT', 'RGBA', 'RGB', 'HEX8', 'HEX6', 'HEX4', 'HEX3'];
ColorPickerButton.prototype.hasOpacityModes = ['OBJECT', 'RGBA', 'HEX8', 'HEX4'];
ColorPickerButton.eventHandler = {};

ColorPickerButton.eventHandler.click = function (event) {
  this.togglePicker();
};

ColorPickerButton.eventHandler.changeColor = function (event) {
  this._value = event.value;
  this.$innerValue.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)) return;
  this.closePicker();
};

ColorPickerButton.eventHandler.submit = function (event) {
  this.closePicker();
};

ColorPickerButton.prototype.togglePicker = function () {
  if (this.hasClass('as-color-picker-selecting')) {
    this.closePicker();
  } else {
    this.openPicker();
  }
};

ColorPickerButton.prototype.openPicker = function () {
  if (this.hasClass('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);

  if (ColorPickerButton.$ColorPicker.$attachhook) {
    //prevent stuck setTimeOut
    ColorPickerButton.$ColorPicker.$attachhook.emit('attached');
  }

  this.$follower.followTarget = this;
  this.$follower.sponsorElement = this;
  setTimeout(function () {
    document.addEventListener('click', this.eventHandler.clickBody);
  }.bind(this), 100);
  this._lastValue = this.value;
  this.$ColorPicker.nullable = this.nullable;
  this.$ColorPicker.hasOpacity = this.hasOpacity;
  ColorPickerButton.$ColorPicker.value = this.value;
  setTimeout(function () {
    thisBt.$follower.removeStyle('visibility');
  }, 1); //10p
};

ColorPickerButton.prototype.closePicker = function () {
  if (!this.hasClass('as-color-picker-selecting')) return;
  this.removeClass('as-color-picker-selecting');

  if (ColorPickerButton.lastOpen === this) {
    ColorPickerButton.lastOpen = null;
    this.$follower.selfRemove();
  }

  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 = ACore_('modal').on('click', function (event) {
        if (event.tagert === this) {
          if (ColorPickerButton.lastOpen) ColorPickerButton.lastOpen.closePicker();
        }
      });
    } else {
      ColorPickerButton.$follower = ACore_('follower.as-color-picker-button-follower');
      ColorPickerButton.$follower.cancelWaiting();
    }

    ColorPickerButton.$ColorPicker = ACore_({
      tag: 'solidcolorpicker'
    }).addTo(ColorPickerButton.$follower);

    if (ColorPickerButton.$ColorPicker.$attachhook) {
      //prevent stuck setTimeOut
      ColorPickerButton.$ColorPicker.$attachhook.cancelWaiting();
    }

    ColorPickerButton.lastOpen = null;
  }

  this.$follower = ColorPickerButton.$follower;
  this.$ColorPicker = ColorPickerButton.$ColorPicker;
};

ColorPickerButton.render = function () {
  return ACore_({
    tag: 'button',
    extendEvent: ['change', 'stopchange'],
    "class": 'as-color-picker-button',
    child: [{
      tag: ColorCell,
      "class": "as-color-picker-button-inner"
    }]
  });
};

ColorPickerButton.property = {};
ColorPickerButton.property.value = {
  set: function set(value) {
    this._value = value;
    this.$innerValue.value = value || null;
  },
  get: function get() {
    var nullable = this.nullable;
    var value = this._value;
    if (!this._value && nullable) return value; //null, ""

    if (!this._value && !nullable) {
      value = new src_Color_Color([0, 0, 0, 1]);
    }

    if (this.mode.match(/HEX4|HEX6|HEX8|RGB|RGBA/) && value && value.toHex3) {
      value = this._value.toString(this.mode);
    }

    return value;
  }
};
ColorPickerButton.property.mode = {
  set: function set(value) {
    value = value || 'OBJECT';
    value = value.toUpperCase();
    if (this.supportedModes.indexOf(value) < 0) value = 'OBJECT';
    this.attr('data-mode', value);
    this._mode = value;
  },
  get: function get() {
    return this._mode;
  }
};
ColorPickerButton.property.hasOpacity = {
  get: function get() {
    return this.hasOpacityModes.indexOf(this._mode) >= 0;
  }
};
ColorPickerButton.property.nullable = {
  set: function set(value) {
    if (value) {
      this.addClass('as-nullable');
    } else {
      this.removeClass('as-null-nullable');
    }
  },
  get: function get() {
    return this.hasClass('as-nullable');
  }
};
absol_acomp_ACore.install(ColorPickerButton);
/* harmony default export */ const colorpicker_ColorPickerButton = (ColorPickerButton);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SelectColorSchemeMenu.js







var DEFAULT_CHART_COLOR_SCHEMES = [['#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252'], //gray scale
['#a50026', '#f46d43', '#fee08b', '#d9ef8b', '#66bd63', '#006837'], ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f'], ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02'], ['#a6cee3', '#b2df8a', '#fb9a99', '#fdbf6f', '#cab2d6', '#ffff99'], ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae'], ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33'], ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f'], ['#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02'], ['#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3'], ['#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5'], ['#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45'], ['#7f3b08', '#e08214', '#fee0b6', '#d8daeb', '#8073ac', '#2d004b'], ['#543005', '#bf812d', '#f6e8c3', '#c7eae5', '#35978f', '#003c30'], ['#40004b', '#9970ab', '#e7d4e8', '#d9f0d3', '#5aae61', '#00441b'], ['#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443'], ['#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45'], ['#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0'], ['#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e'], ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a']];
var DEFAULT_CHART_COLOR_SCHEMES_OBJS = DEFAULT_CHART_COLOR_SCHEMES.map(function (scm) {
  return scm.map(function (c) {
    return src_Color_Color.parse(c);
  });
});
src_Color_Color.DEFAULT_CHART_COLOR_SCHEMES = DEFAULT_CHART_COLOR_SCHEMES;
var ColorSchemeGenerators = {};

var scaleArray = function scaleArray(arr, newN) {
  return Array(newN).fill(0).map(function (u, i) {
    var k = i * (arr.length - 1) / (newN - 1);
    var l = Math.floor(k);
    var h = Math.ceil(k);
    if (l === h) return arr[l];
    return map(k, l, h, arr[l], arr[h]);
  });
};

var generatorColorScheme = function generatorColorScheme(id, n) {
  var hsl6 = DEFAULT_CHART_COLOR_SCHEMES_OBJS[id].map(function (c) {
    return c.toHSLA();
  });
  var h6 = hsl6.map(function (c) {
    return c[0];
  });
  var s6 = hsl6.map(function (c) {
    return c[1];
  });
  var l, h, s;

  if (id >= 1 && id <= 7 || id === 12 || id === 13) {
    if (n > 6) {
      s = s6.concat(Array(n - 6).fill(0).map(function (u, i) {
        return 0.6 + 3 * i * 0.3 % 0.35;
      }));
    }
  }

  if (id === 1) {
    h6[0] -= 1;
  } else if (id === 2) {
    if (n > 6) {
      s = s6.concat(Array(n - 6).fill(0).map(function (u, i) {
        return 0.5 + 3 * i * 0.3 % 0.45;
      }));
    }
  } else if (id === 18 && n !== 6) {
    h6[0] = 1;
    h6[1] = 1;
  }

  s = s || scaleArray(s6, n);
  l = l || scaleArray(hsl6.map(function (c) {
    return c[2];
  }), n);
  h = h || scaleArray(h6, n).map(function (h) {
    return h < 0 ? h + 1 : h;
  });
  return Array(n).fill(0).map(function (u, i) {
    return Color.fromHSL(h[i], s[i], l[i]);
  });
}; // DEFAULT_CHART_COLOR_SCHEMES = Array(20).fill(0).map((u, id) => colorSchemeGenerator(id, 20).map(c => c.toString('hex6')))
// console.log(DEFAULT_CHART_COLOR_SCHEMES)

/**
 * @extends AElement
 * @constructor
 */

function SelectColorSchemeMenu() {
  this.dropdown = new SCSMDropdown(this);
  this.comboboxCtrl = new SCSMComboBoxController(this);
  HTML5_OOP.drillProperty(this, this.dropdown, ['value', 'items', 'selectedItem']);
  this.dropdown.items = DEFAULT_CHART_COLOR_SCHEMES.map(function (it, i) {
    return {
      colors: it,
      value: i
    };
  });
}

SelectColorSchemeMenu.tag = 'SelectColorSchemeMenu'.toLowerCase();

SelectColorSchemeMenu.render = function () {
  return ACore_({
    "class": ['as-select-color-scheme-menu', 'absol-selectmenu'],
    extendEvent: ['change'],
    child: ['.as-select-color-scheme-menu-selected-item', {
      tag: 'button',
      "class": 'absol-selectmenu-btn',
      child: ['dropdown-ico']
    }]
  });
};

/* harmony default export */ const colorpicker_SelectColorSchemeMenu = (SelectColorSchemeMenu);
/**
 *
 * @param {SelectColorSchemeMenu} elt
 * @constructor
 */

function SCSMDropdown(elt) {
  this.elt = elt;
  this._items = [];
  this.itemDict = {};
  this.$itemDict = {};
  this.$follower = ACore_({
    tag: js_Follower,
    "class": ['as-select-color-scheme-menu-dropdown', 'as-dropdown-box-common-style'],
    child: {}
  });
  this.$follower.cancelWaiting();
}

SCSMDropdown.prototype.updateItems = function () {
  var _this = this;

  var items = this._items;
  var maxColorLength = items.reduce(function (ac, cr) {
    return Math.max(ac, cr.colors.length);
  }, 0);
  var itRow = Math.max(1, Math.floor(Math.sqrt(maxColorLength)));

  while (itRow > 1 && maxColorLength % itRow) {
    itRow--;
  }

  var itCol = maxColorLength / itRow;
  var gridRow = Math.max(1, Math.ceil(Math.sqrt(items.length)));

  while (gridRow < items.length && items.length % gridRow) {
    gridRow++;
  }

  var gridCol = Math.ceil(items.length / gridRow);
  this.$follower.clearChild();
  this.$selected = null;
  this.$itemDict = {};
  items.forEach(function (item, i) {
    if (i % gridCol === 0) {
      _this.$follower.addChild(ACore_('.as-scsm-item-list-row'));
    }

    var itemElt = ACore_({
      "class": ['as-scsm-item']
    });

    var wrapper = ACore_({
      "class": 'as-scsm-item-wrapper',
      child: itemElt,
      on: {
        click: function click(event) {
          var cValue = _this.value;

          if (cValue !== item.value) {
            _this.value = item.value;

            _this.elt.emit('change', {
              type: 'change',
              target: _this.elt
            }, _this.elt);
          }
        }
      }
    });

    _this.$itemDict[keyStringOf(item.value)] = itemElt;

    _this.$follower.lastChild.addChild(wrapper);

    item.colors.forEach(function (color, j) {
      if (j % itCol === 0) {
        itemElt.addChild(ACore_('.as-scsm-item-row'));
      }

      itemElt.lastChild.addChild(ACore_({
        "class": 'as-scsm-item-cell',
        style: {
          backgroundColor: color
        }
      }));
    });
  });
};

SCSMDropdown.prototype.updateSelected = function () {
  var value = this.value;
  if (this.$selected) this.$selected.removeClass('as-selected');
  this.$selected = this.$itemDict[keyStringOf(value)];
  if (this.$selected) this.$selected.addClass('as-selected');
  this.elt.comboboxCtrl.update();
};

Object.defineProperty(SCSMDropdown.prototype, 'items', {
  set: function set(items) {
    if (!(items instanceof Array)) items = [];
    this._items = items;
    this.itemDict = items.reduce(function (ac, cr) {
      ac[keyStringOf(cr.value)] = cr;
      return ac;
    }, {});
    this.updateItems();
    this.updateSelected();
  },
  get: function get() {
    return this._items;
  }
});
Object.defineProperty(SCSMDropdown.prototype, 'value', {
  set: function set(value) {
    this._value = value;
    this.updateSelected();
  },
  get: function get() {
    if (this.itemDict[keyStringOf(this._value)] || this._items.length === 0) return this._value;
    return this._items[0].value;
  }
});
Object.defineProperty(SCSMDropdown.prototype, 'selectedItem', {
  get: function get() {
    return this.itemDict[keyStringOf(this.value)];
  }
});
/**
 *
 * @param {SelectColorSchemeMenu} elt
 * @constructor
 */

function SCSMComboBoxController(elt) {
  this.elt = elt;
  this.$selected = ACore_$('.as-select-color-scheme-menu-selected-item', this.elt);
  this.ev_click = this.ev_click.bind(this);
  this.ev_clickOut = this.ev_clickOut.bind(this);
  this.elt.on('click', this.ev_click);
}

SCSMComboBoxController.prototype.ev_click = function (event) {
  this.isFocus = true;
};

SCSMComboBoxController.prototype.ev_clickOut = function (event) {
  this.isFocus = false;
};

SCSMComboBoxController.prototype.update = function () {
  var selectedItem = this.elt.dropdown.selectedItem;
  this.$selected.clearChild();
  if (!selectedItem) return;
  this.$selected.addChild(selectedItem.colors.map(function (color) {
    return ACore_({
      "class": 'as-scsm-item-cell',
      style: {
        backgroundColor: color
      }
    });
  }));
};

Object.defineProperty(SCSMComboBoxController.prototype, 'isFocus', {
  set: function set(value) {
    var _this2 = this;

    if (!!value === this.elt.hasClass('as-focus')) return;

    if (value) {
      this.elt.addClass('as-focus');
    } else {
      this.elt.removeClass('as-focus');
    }

    if (value) {
      this.elt.off('click', this.ev_click);
      setTimeout(function () {
        document.addEventListener('click', _this2.ev_clickOut);
      }, 10);
      this.elt.dropdown.$follower.addTo(document.body);
      this.elt.dropdown.$follower.followTarget = this.elt;
    } else {
      this.elt.on('click', this.ev_click);
      document.removeEventListener('click', this.ev_clickOut);
      this.elt.dropdown.$follower.selfRemove();
      this.elt.dropdown.$follower.followTarget = null;
    }
  },
  get: function get() {
    return this.elt.hasClass('as-focus');
  }
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProgressCircle.js


var ProgressCircle_ = absol_acomp_ACore._;
var ProgressCircle_$ = absol_acomp_ACore.$;

function ProgressCircle() {
  this._text = 'Loading\n$value';
  this._value = 0;
  this._variant = null;
  this._viewValue = 0;
  this.$pie = ProgressCircle_$('.as-progress-circle-pie', this);
  this.$inner = ProgressCircle_$('.as-progress-circle-inner', this);
  this.$end = ProgressCircle_$('.as-progress-circle-end', this);
  this.$text = ProgressCircle_$('.as-progress-circle-text', this);
  this._animated = true;
}

ProgressCircle.tag = 'ProgressCircle'.toLowerCase();

ProgressCircle.render = function () {
  return ProgressCircle_({
    "class": 'as-progress-circle',
    child: ['.as-progress-circle-start', '.as-progress-circle-pie', '.as-progress-circle-end', {
      "class": 'as-progress-circle-inner',
      child: {
        "class": 'as-progress-circle-text',
        child: {
          text: ''
        }
      }
    }] // child: {
    //     class: 'as-progress-bar-value'
    // }

  });
};

ProgressCircle.property = {};

ProgressCircle.prototype._updateValue = function () {
  var _this = this;

  if (Math.abs(this._value - this._viewValue) < 0.05 || !this._animated) this._viewValue = this._value;else {
    if (this._value > this._viewValue) this._viewValue += 0.05;else this._viewValue -= 0.05;
  }
  var value = this._viewValue;
  var angle = Math.PI * (-0.5 + value * 2);
  var cosAngle = Math.cos(angle);
  var sinAngle = Math.sin(angle);
  var pl = 'polygon(50% 0%, 100% 0%, ';
  if (value >= 0.25) pl += '100% 100%, ';
  if (value >= 0.5) pl += '0% 100%, ';
  if (value >= 0.75) pl += '0% 0%, ';
  pl += "".concat(50 + 50 * cosAngle, "% ").concat(50 + 50 * sinAngle, "%");
  pl += ', 50% 50%)';
  this.$pie.addStyle('clipPath', pl);
  this.$end.addStyle({
    left: "calc(".concat(50 + 50 * cosAngle, "% - ").concat((cosAngle + 1) * 0.8 / 2, "em)"),
    top: "calc(".concat(50 + 50 * sinAngle, "% - ").concat((sinAngle + 1) * 0.8 / 2, "em)")
  });

  if (this._value !== this._viewValue) {
    requestAnimationFrame(function () {
      return _this._updateValue();
    });
  }
};

ProgressCircle.prototype._updateText = function () {
  var value = this._value;
  var text = this._text;
  text = text.replace('$value', Math.round(value * 100) + '%');
  this.$text.firstChild.data = text;
};
/**
 * @type {ProgressCircle}
 */


ProgressCircle.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;
  }
};
ProgressCircle.property.value = {
  /**
   * @this ProgressCircle
   * @param value
   */
  set: function set(value) {
    value = Math.max(0, Math.min(1, value || 0));
    this._value = value;

    this._updateValue();

    this._updateText();
  },
  get: function get() {
    return this._value;
  }
};
ProgressCircle.property.text = {
  set: function set(value) {
    value = value || '';
    if (typeof value !== "string") value = '';
    this._text = value;

    this._updateText();
  },
  get: function get() {
    return this._text;
  }
};
ProgressCircle.property.animated = {
  set: function set(value) {
    value = !!value;
    this._animated = value;

    if (value) {
      this.addClass('as-animated');
    } else {
      this.removeClass('as-animated');
    }
  },
  get: function get() {
    return this._animated;
  }
};
absol_acomp_ACore.install(ProgressCircle);
/* harmony default export */ const js_ProgressCircle = (ProgressCircle);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/expressioninput.css
var expressioninput = __webpack_require__(7959);
;// CONCATENATED MODULE: ./node_modules/absol/src/Pharse/DPTokenizer.js
function DPTokenizer(opt) {
  opt = opt || {};
  if (opt.elementRegexes) this.elementRegexes = opt.elementRegexes;

  this._combineTokenRegex();
}

DPTokenizer.prototype.elementRegexes = [['string', /("(?:[^"\\]|\\.)*?")|('(?:[^'\\]|\\.)*?')/], ['number', /(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)/], ['word', /[_a-zA-Z][_a-zA-Z0-9]*/], ['skip', /([\s\r\n]+)|(\/\/[^\n]*)|(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)/], ['dsymbol', /\+\+|--|==|!=|<=|>=|\|\||&&/], ['tsymbol', /\.\.\./], ['symbol', /[^\s_a-zA-Z0-9]/]];

DPTokenizer.prototype._combineTokenRegex = function () {
  var tokenRegexSource = this.elementRegexes.map(function (cr) {
    return '(' + cr[1].source + ')';
  }).join('|');
  this.tokenRegex = new RegExp(tokenRegexSource, 'g');
  this.groupIndexOfTypes = this.elementRegexes.slice(0, this.elementRegexes.length - 1).reduce(function (ac, cr) {
    var subGroupLength = new RegExp(cr[1].source + '|.').exec('a').length;
    ac.push(ac[ac.length - 1] + subGroupLength);
    return ac;
  }, [1]);
  this.types = this.elementRegexes.reduce(function (ac, cr) {
    ac[cr[0]] = cr;
    return ac;
  }, {});
};

DPTokenizer.prototype.tokenize = function (source) {
  var regex = new RegExp(this.tokenRegex.source, 'g');
  var elementRegexes = this.elementRegexes;
  var groupIndexOfTypes = this.groupIndexOfTypes;
  var res = [];
  var matched = regex.exec(source);
  var type, i;

  while (matched) {
    type = null;

    for (i = 0; i < groupIndexOfTypes.length; ++i) {
      if (matched[groupIndexOfTypes[i]]) {
        type = elementRegexes[i][0];
      }
    }

    res.push({
      type: type,
      content: matched[0],
      start: matched.index,
      end: matched.index + matched[0].length
    });
    matched = regex.exec(source);
  }

  return res;
};

/* harmony default export */ const Pharse_DPTokenizer = (DPTokenizer);
;// 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/Pharse/DPParseInstance.js


var TARGET = 0;
var RULE = 1;
var PASSED = 2;
var LENGTH = 3;
var TRACK = 4;
/***
 * @param {string} target
 * @param {Rule|null} rule
 * @param {number} passed
 * @param {number} length
 * @param {[]} track
 *
 * @returns {*[]}
 */

function mkItem(target, rule, passed, length, track) {
  return [target, rule, passed, length, track];
}

function indexingItem(item) {
  return item[TARGET] + '*' + item[PASSED] + '*' + item[LENGTH];
}

function arrayKey(item) {
  return item[TARGET] + '*' + item[PASSED];
}
/****
 *
 * @param {DPParser} parser
 * @param {string || []} source
 * @param {string} target
 * @constructor
 */


function DPParseInstance(parser, source, target) {
  this.target = target;
  this.parser = parser;
  this.targets = parser.targets;
  this.rules = parser.rules;
  this.tokenTypes = parser.tokenizer.types;
  this.error = null;
  this.source = source;
  var start = Date.now();

  if (typeof source === "string") {
    this.tokens = parser.tokenizer.tokenize(source).filter(function (tk) {
      return tk.type !== 'skip';
    });
  } else if (source instanceof Array) {
    this.tokens = source;
  } else {
    throw new Error("Invalid source, source must be string or array of token");
  }

  this.tokenIdx = 0;
  this.priQueue = new DataStructure_Heap(this._cmpFunction);
  this.maxSize = 0;
  this.expectedArr = [];
  this.parsedNode = null;
  this.ast = null;
  start = Date.now();

  this._dp();

  this._trackBack();

  if (this.parsedNode) {
    this._calcAST();
  } else {
    this._findError();
  }
}

DPParseInstance.prototype._dp = function () {
  while (this.tokenIdx < this.tokens.length) {
    this._nextToken();
  }
};

DPParseInstance.prototype._cmpFunction = function (a, b) {
  return b[LENGTH] - a[LENGTH];
};

DPParseInstance.prototype._nextToken = function () {
  var idx = this.tokenIdx++;
  var token = this.tokens[idx];
  this.priQueue.push(mkItem('.' + token.type, null, 1, 1, [null, token]));
  this.priQueue.push(mkItem('_' + token.content, null, 1, 1, [null, token]));
  var expected = {};
  var pushed = {};
  var itemIndex;
  var longestChecked = {};
  this.expectedArr.push(expected);
  var cur, next;
  var i, j, rule;
  var prevExpectedList, prevRule;
  var prevExpectedItem; //nếu cùng 1 rule, cùng điểm bắt dầu, cùng passed thì dài hơn lấy

  while (this.priQueue.size() > 0) {
    this.maxSize = Math.max(this.maxSize, this.priQueue.size());
    cur = this.priQueue.pop();

    for (i = 0; i < this.rules.length; ++i) {
      rule = this.rules[i];

      if (rule.elements[0] === cur[TARGET]) {
        if (rule.elements.length === 1) {
          next = mkItem(rule.target, rule, cur[PASSED], cur[LENGTH], [null, cur]);
          itemIndex = indexingItem(next);

          if (!pushed[itemIndex]) {
            pushed[itemIndex] = true;
            this.priQueue.push(next);
          }

          expected['^'] = expected['^'] || [];
          expected['^'].push(next);
        } else {
          next = mkItem(rule.target, rule, 1, cur[LENGTH], [null, cur]);
          expected[rule.elements[1]] = expected[rule.elements[1]] || [];
          expected[rule.elements[1]].push(next);
        }
      }
    }

    prevExpectedList = this.expectedArr[idx - cur[LENGTH]] && this.expectedArr[idx - cur[LENGTH]][cur[TARGET]];

    if (prevExpectedList) {
      for (j = 0; j < prevExpectedList.length; ++j) {
        prevExpectedItem = prevExpectedList[j];
        prevRule = prevExpectedItem[RULE];
        next = mkItem(prevRule.target, prevRule, prevExpectedItem[PASSED] + 1, prevExpectedItem[LENGTH] + cur[LENGTH], [prevExpectedItem, cur]);

        if (prevExpectedItem[PASSED] + 1 === prevRule.elements.length) {
          itemIndex = indexingItem(next);

          if (next[RULE] && next[RULE].longestOnly) {
            if (longestChecked[next[RULE].ident] && longestChecked[next[RULE].ident] >= next[LENGTH]) {
              continue;
            }

            longestChecked[next[RULE].ident] = next[LENGTH];
          }

          if (!pushed[itemIndex]) {
            pushed[itemIndex] = true;
            this.priQueue.push(next);
          }

          expected['^'] = expected['^'] || [];
          expected['^'].push(next); //[rule index, passed, length]
        } else {
          expected[prevRule.elements[prevExpectedItem[PASSED] + 1]] = expected[prevRule.elements[prevExpectedItem[PASSED] + 1]] || [];
          expected[prevRule.elements[prevExpectedItem[PASSED] + 1]].push(next);
        }
      }
    }
  }
};

DPParseInstance.prototype._trackBack = function () {
  var expectedAr = this.expectedArr;

  function visit(target, start, length) {
    var node = {
      type: target,
      start: start,
      end: start + length
    };
    var matchedItem = null;
    var expected = expectedAr[start + length - 1];
    if (!expected) return null;
    var itemList = expected['^'];
    if (!itemList) return null;
    var item;

    if (itemList) {
      for (var j = 0; j < itemList.length; ++j) {
        item = itemList[j];

        if (item[TARGET] === target) {
          if (item[LENGTH] === length) {
            matchedItem = item;
          }
        }
      }
    }

    if (!matchedItem) {
      return null;
    }

    node.rule = matchedItem[RULE];
    var childItem = [];
    var cTrack = matchedItem[TRACK];
    var right, left;

    while (cTrack) {
      left = cTrack[0];
      right = cTrack[1];
      childItem.unshift(right);
      cTrack = left && left[TRACK];
    }

    var ac = childItem.reduce(function (ac, item) {
      if (typeof item[TRACK][1].type === "string") {
        ac.child.push(item[TRACK][1]);
        ac.start += 1;
      } else {
        ac.child.push(visit(item[TARGET], ac.start, item[LENGTH]));
        ac.start += item[LENGTH];
      }

      return ac;
    }, {
      start: start,
      child: []
    });
    node.children = ac.child;
    node.end = ac.start;
    return node;
  }

  this.parsedNode = visit(this.target, 0, this.expectedArr.length);
};

DPParseInstance.prototype._findError = function () {
  function cmp(a, b) {
    return b.i - a.i;
  }

  var queue = new DataStructure_Heap(cmp);
  var doneArr = Array(this.expectedArr.length).fill(null).map(function () {
    return {};
  });
  this.expectedArr.forEach(function (ex, i) {
    for (var k in ex) {
      ex[k].forEach(function (it) {
        var target = it[TARGET];
        var done = doneArr[i - it[LENGTH] + 1];
        done[target] = done[target] || [];
        done[target].push(it);
      });
    }
  });
  var d = {};
  queue.push({
    t: this.target,
    i: 0
  });
  d[this.target + '/' + 0] = true;
  var cr, next;
  var nextIdent;
  var item;
  var hasNewExpected;

  while (queue.size() > 0) {
    cr = queue.pop();

    if (cr.i >= doneArr.length) {
      if (!this.error || this.error.tokenIdx < cr.i || this.error.type !== "expected") {
        this.error = {
          tokenIdx: cr.i,
          type: 'expected',
          expectedToken: []
        };
      }

      if (cr.t[0] === '_' || cr.t[0] === '.') {
        this.error.expectedToken.push(cr.t);
      }

      continue;
    }

    hasNewExpected = false;

    if (doneArr[cr.i][cr.t]) {
      doneArr[cr.i][cr.t].forEach(function (item) {
        if (item[PASSED] < item[RULE].elements.length) {
          next = {
            i: cr.i + item[LENGTH],
            t: item[RULE].elements[item[PASSED]]
          };
          nextIdent = next.t + '/' + next.i;
          hasNewExpected = true;

          if (!d[nextIdent]) {
            d[nextIdent] = true;
            queue.push(next);
          }
        }
      });
    }

    this.rules.forEach(function (rule) {
      if (rule.target === cr.t) {
        next = {
          i: cr.i,
          t: rule.elements[0]
        };
        nextIdent = next.t + '/' + next.i;

        if (!d[nextIdent]) {
          d[nextIdent] = true;
          queue.push(next);
        }
      }
    });

    if (!hasNewExpected) {
      if (!this.error || this.error.tokenIdx < cr.i) {
        this.error = {
          tokenIdx: cr.i,
          type: 'unexpected'
        };
      }
    }
  }

  if (this.error.type === 'expected') {
    this.error.message = 'Expected: ' + this.error.expectedToken.map(function (t) {
      if (t[0] === '.') return t.substring(1);
      if (t[0] === '_') return JSON.stringify(t.substring(1));
    }).join(', ');
  } else if (this.error.type === 'unexpected') {
    this.error.message = 'Unexpected token ' + (this.tokens[this.error.tokenIdx].content || JSON.stringify(this.tokens[this.error.tokenIdx]));
  }
};

DPParseInstance.prototype._calcAST = function () {
  this.ast = this.parsedNode.rule.toAST(this.parsedNode);
};

function parsedNodeToAST(parsedNode) {
  return parsedNode.rule.toAST(parsedNode);
}
function parsedNodeToASTChain(parsedNode) {
  return parsedNode.rule.toASTChain(parsedNode);
}
/* harmony default export */ const Pharse_DPParseInstance = (DPParseInstance);
;// CONCATENATED MODULE: ./node_modules/absol/src/Pharse/DPParser.js


/***
 * @typedef Rule
 * @property {string} target
 * @property {string[]} elements
 */

/***
 *
 * @param {{rules?:Array, elementRegexes?:Array}}opt
 * @constructor
 */

function DPParser(opt) {
  opt = opt || {};

  if (opt.rules) {
    this.rules = opt.rules;
  }

  this.targets = {};
  this.tokenizer = new Pharse_DPTokenizer(opt);
  this.computeTarget();
}
/****
 * @type {Rule[]}
 */


DPParser.prototype.rules = [];

DPParser.prototype.computeTarget = function () {
  this.rules.reduce(function (ac, rule) {
    var target = ac[rule.target];

    if (!target) {
      target = {
        rules: []
      };
      ac[rule.target] = target;
    }

    target.rules.push(rule);
    return ac;
  }, this.targets);
};
/***
 *
 * @param {string|[]}source
 * @param target
 * @returns {DPParseInstance}
 */


DPParser.prototype.parse = function (source, target) {
  return new Pharse_DPParseInstance(this, source, target);
};

/* harmony default export */ const Pharse_DPParser = (DPParser);
;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCGrammar.js

/*********************************
 * EXPRESSION
 */

var operatorOrder = {
  'NOT': 4,
  '!': 4,
  '*': 5,
  '/': 5,
  'MOD': 5,
  '%': 5,
  '+': 6,
  '-': 6,
  '<': 9,
  '>': 9,
  '<=': 9,
  '>=': 9,
  '==': 9,
  '!=': 9,
  'AND': 14,
  '&&': 14,
  'OR': 15,
  '||': 15,
  'XOR': 15
};
var elementRegexes = [['string', /("(?:[^"\\]|\\.)*?")|('(?:[^'\\]|\\.)*?')/], ['number', /(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)/], ['word', /[_a-zA-Z][_a-zA-Z0-9]*/], ['skip', /([\s\r\n]+)|(\/\/[^\n]*)|(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)/], ['dsymbol', /\+\+|--|==|!=|<=|>=|\|\||&&/], ['tsymbol', /\.\.\./], ['symbol', /[^\s_a-zA-Z0-9]/]];
var rules = [];
rules.push({
  target: 'null',
  elements: ['_null'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'NullLiteral'
    };
  }
});
rules.push({
  target: 'ident',
  elements: ['.word'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'Identifier',
      name: parsedNode.children[0].content
    };
  }
});
rules.push({
  target: 'args_list',
  elements: ['exp'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  },
  toASTChain: function toASTChain(parsedNode) {
    return [parsedNodeToAST(parsedNode)];
  }
});
rules.push({
  target: 'args_list',
  elements: ['args_list', '_,', 'exp'],
  longestOnly: true,
  ident: 'args_list_rec',
  toASTChain: function toASTChain(parsedNode) {
    return parsedNodeToASTChain(parsedNode.children[0]).concat(parsedNodeToAST(parsedNode.children[2]));
  }
});
rules.push({
  target: 'function_callee',
  elements: ['ident'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'function_callee',
  elements: ['mem_exp'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'function_call',
  elements: ['function_callee', '_(', 'args_list', '_)'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'CallExpression',
      arguments: parsedNode.children[2].rule.toASTChain(parsedNode.children[2]),
      callee: parsedNodeToAST(parsedNode.children[0])
    };
  }
});
rules.push({
  target: 'function_call',
  elements: ['function_callee', '_(', '_)'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'CallExpression',
      arguments: [],
      callee: parsedNodeToAST(parsedNode.children[0])
    };
  }
});
rules.push({
  target: 'new_expression',
  elements: ['_new', 'function_call'],
  toAST: function toAST(parsedNode) {
    var callAst = parsedNodeToAST(parsedNode.children[1]);
    return {
      type: 'NewExpression',
      arguments: callAst.arguments,
      callee: callAst.callee
    };
  }
});
rules.push({
  target: 'exp',
  elements: ['new_expression'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'exp',
  elements: ['null'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'exp',
  elements: ['ident'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'number',
  elements: ['.number'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'NumericLiteral',
      value: parseFloat(parsedNode.children[0].content)
    };
  }
});
rules.push({
  target: 'string',
  elements: ['.string'],
  toAST: function toAST(parsedNode) {
    var content = parsedNode.children[0].content;
    if (content[0] === "'") content = '"' + content.substring(1, content.length - 1).replace(/["]/g, '\\"') + '"';
    return {
      type: 'StringLiteral',
      value: JSON.parse(content)
    };
  }
});
rules.push({
  target: 'boolean',
  elements: ['_true'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'BooleanLiteral',
      value: true
    };
  }
});
rules.push({
  target: 'boolean',
  elements: ['_false'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'BooleanLiteral',
      value: false
    };
  }
});
rules.push({
  target: 'exp',
  elements: ['number'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'exp',
  elements: ['string'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'exp',
  elements: ['boolean'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
['+', '-', '*', '/', '%', '&&', '||', 'XOR', '==', '!=', '<', '>', '>=', '<='].forEach(function (op) {
  rules.push({
    target: 'bin_op',
    elements: ['_' + op],
    toAST: function toAST(parsedNode) {
      return {
        type: "BinaryOperator",
        content: op
      };
    }
  });
});
rules.push({
  target: 'exp',
  elements: ['exp', 'bin_op', 'exp'],
  // longestOnly: true,//* error when parse return (...)...
  ident: 'bin_op_rec',
  toASTChain: function toASTChain(parseNode) {
    var res = [];

    if (parseNode.children[0].rule === this) {
      res = res.concat(this.toASTChain(parseNode.children[0]));
    } else {
      res.push(parsedNodeToAST(parseNode.children[0]));
    }

    res.push(parseNode.children[1].children[0]);

    if (parseNode.children[2].rule === this) {
      res = res.concat(this.toASTChain(parseNode.children[2]));
    } else {
      res.push(parsedNodeToAST(parseNode.children[2]));
    }

    return res;
  },
  toAST: function toAST(parsedNode) {
    var chain = this.toASTChain(parsedNode);
    var stack = [];
    var item;
    var newNode;

    while (chain.length > 0) {
      item = chain.shift();

      if (item.content in operatorOrder) {
        while (stack.length >= 3 && operatorOrder[stack[stack.length - 2].content] <= operatorOrder[item.content]) {
          newNode = {
            type: 'BinaryExpression'
          };
          newNode.right = stack.pop();
          newNode.operator = stack.pop();
          newNode.left = stack.pop();
          stack.push(newNode);
        }
      }

      stack.push(item);
    }

    while (stack.length >= 3) {
      newNode = {
        type: 'BinaryExpression'
      };
      newNode.right = stack.pop();
      newNode.operator = stack.pop();
      newNode.left = stack.pop();
      stack.push(newNode);
    }

    return stack.pop();
  }
});
rules.push({
  target: 'exp',
  elements: ['function_call'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'bracket_group',
  elements: ['_(', 'exp', '_)'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[1]);
  }
});
rules.push({
  target: 'exp',
  elements: ['bracket_group'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
}); // rules.push({
//     target: 'exp',
//     elements: ['_(', 'exp', '_)'],
//     toAST: function (parsedNode) {
//         return parsedNodeToAST(parsedNode.children[1]);
//     }
// });

['+', '-', '!'].forEach(function (op) {
  ['number', 'bracket_group', 'ident', 'function_call', 'mem_exp', 'unary_exp'].forEach(function (arg) {
    rules.push({
      target: 'unary_exp',
      elements: ['_' + op, arg],
      toAST: function toAST(parsedNode) {
        return {
          type: 'UnaryExpression',
          argument: parsedNodeToAST(parsedNode.children[1]),
          operator: {
            type: 'UnaryOperator',
            content: op
          }
        };
      }
    });
  });
});
rules.push({
  target: 'exp',
  elements: ['unary_exp'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['ident', '_.', 'ident'],
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: false,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['ident', '_[', 'exp', '_]'],
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: true,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['new_expression', '_.', 'ident'],
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: false,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['new_expression', '_[', 'exp', '_]'],
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: true,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['mem_exp', '_.', 'ident'],
  longestOnly: true,
  ident: 'mem_exp_ident_rev',
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: false,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['mem_exp', '_[', 'exp', '_]'],
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: true,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['bracket_group', '_.', 'ident'],
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: false,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'mem_exp',
  elements: ['bracket_group', '_[', 'exp', '_]'],
  toAST: function toAST(parsedNode) {
    return {
      type: "MemberExpression",
      computed: true,
      object: parsedNodeToAST(parsedNode.children[0]),
      property: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'exp',
  elements: ['mem_exp'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'object_exp',
  elements: ['_{', '_}'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ObjectExpression',
      properties: []
    };
  }
});
rules.push({
  target: 'object_exp',
  elements: ['_{', 'object_property_list', '_}'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ObjectExpression',
      properties: parsedNodeToASTChain(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'exp',
  elements: ['object_exp'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'object_property',
  elements: ['ident', '_:', 'exp'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ObjectProperty',
      key: parsedNodeToAST(parsedNode.children[0]),
      value: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'object_property',
  elements: ['string', '_:', 'exp'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ObjectProperty',
      key: parsedNodeToAST(parsedNode.children[0]),
      value: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'object_property_list',
  elements: ['object_property'],
  toASTChain: function toASTChain(parsedNode) {
    return [parsedNodeToAST(parsedNode.children[0])];
  }
});
rules.push({
  target: 'object_property_list',
  elements: ['object_property_list', '_,', 'object_property'],
  longestOnly: true,
  ident: 'object_property_list_rec',
  toASTChain: function toASTChain(parsedNode) {
    return parsedNodeToASTChain(parsedNode.children[0]).concat([parsedNodeToAST(parsedNode.children[2])]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'exp',
  elements: ['array_exp'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'array_exp',
  elements: ['_[', '_]'],
  toAST: function toAST(parsedNode) {
    return {
      type: "ArrayExpression",
      elements: []
    };
  }
});
rules.push({
  target: 'array_exp',
  elements: ['_[', 'array_item_list', '_]'],
  toAST: function toAST(parsedNode) {
    return {
      type: "ArrayExpression",
      elements: parsedNodeToASTChain(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'array_item_list',
  elements: ['exp'],
  toASTChain: function toASTChain(parsedNode) {
    return [parsedNodeToAST(parsedNode.children[0])];
  }
});
rules.push({
  target: 'array_item_list',
  elements: ['array_item_list', '_,', 'exp'],
  longestOnly: true,
  ident: 'array_item_list_rec',
  toASTChain: function toASTChain(parsedNode) {
    return parsedNodeToASTChain(parsedNode.children[0]).concat([parsedNodeToAST(parsedNode.children[2])]);
  }
});
/**********************************************************************************************************************/

/**************FOR QUICK PARSING***********************/

rules.push({
  target: 'exp',
  elements: ['.constance'],
  toAST: function toAST(parsedNode) {
    return parsedNode.children[0];
  },
  toASTChain: function toASTChain(parsedNode) {
    return [parsedNode.children[0]];
  }
});
/***********************************************************************************************************************/

rules.push({
  target: 'generic_type',
  elements: ['ident'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'GenericType',
      id: parsedNodeToAST(parsedNode.children[0])
    };
  }
});
rules.push({
  target: 'linked_type',
  elements: ['_linktype', 'exp'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'LinkedType',
      address: parsedNodeToAST(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'var_type',
  elements: ['generic_type'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'var_type',
  elements: ['linked_type'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
/*
rules.push({
    target: 'var_type',
    elements: ['ident', '<', 'var_type', '>']
});

rules.push({
    target: 'var_type',
    elements: ['ident', '<', '.string', '>']
});
*/

rules.push({
  target: 'type_annotation',
  elements: ['_:', 'var_type'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'TypeAnnotation',
      typeAnnotation: parsedNodeToAST(parsedNode.children[1])
    };
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'variable_declaration',
  elements: ['_var', 'ident', 'type_annotation', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'VariableDeclaration',
      id: parsedNodeToAST(parsedNode.children[1]),
      typeAnnotation: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'variable_declaration',
  elements: ['_var', 'ident', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'VariableDeclaration',
      id: parsedNodeToAST(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'variable_declaration',
  elements: ['_var', 'ident', '_=', 'exp', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'VariableDeclaration',
      id: parsedNodeToAST(parsedNode.children[1]),
      init: parsedNodeToAST(parsedNode.children[3])
    };
  }
});
rules.push({
  target: 'variable_declaration',
  elements: ['_var', 'ident', 'type_annotation', '_=', 'exp', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'VariableDeclaration',
      id: parsedNodeToAST(parsedNode.children[1]),
      typeAnnotation: parsedNodeToAST(parsedNode.children[2]),
      init: parsedNodeToAST(parsedNode.children[4])
    };
  }
}); //todo

rules.push({
  target: 'expression_statement',
  elements: ['function_call', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ExpressionStatement',
      expression: parsedNodeToAST(parsedNode.children[0])
    };
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'assign_statement',
  elements: ['ident', '_=', 'exp', '_;'],
  toAST: function toAST(parseNode) {
    return {
      type: 'AssignStatement',
      left: parsedNodeToAST(parseNode.children[0]),
      right: parsedNodeToAST(parseNode.children[2])
    };
  }
});
rules.push({
  target: 'assign_statement',
  elements: ['mem_exp', '_=', 'exp', '_;'],
  toAST: function toAST(parseNode) {
    return {
      type: 'AssignStatement',
      left: parsedNodeToAST(parseNode.children[0]),
      right: parsedNodeToAST(parseNode.children[2])
    };
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'if_statement_1',
  elements: ['_if', '_(', 'exp', '_)', 'statement'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'IfStatement',
      test: parsedNodeToAST(parsedNode.children[2]),
      consequent: parsedNodeToAST(parsedNode.children[4])
    };
  }
});
rules.push({
  target: 'if_statement_2',
  elements: ['if_statement_1', '_else', 'statement'],
  toAST: function toAST(parsedNode) {
    var ast = parsedNodeToAST(parsedNode.children[0]);
    ast.alternate = parsedNodeToAST(parsedNode.children[2]);
    return ast;
  }
});
rules.push({
  target: 'statement',
  elements: ['if_statement_1'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement',
  elements: ['if_statement_2'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'for_count_statement',
  elements: ['_for', 'ident', '_from', 'exp', '_to', 'exp', 'block_statement'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ForCountStatement',
      "for": parsedNodeToAST(parsedNode.children[1]),
      from: parsedNodeToAST(parsedNode.children[3]),
      to: parsedNodeToAST(parsedNode.children[5]),
      body: parsedNodeToAST(parsedNode.children[6])
    };
  }
});
rules.push({
  target: 'for_of_statement',
  elements: ['_for', 'ident', '_of', 'exp', 'block_statement'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ForOfStatement',
      "for": parsedNodeToAST(parsedNode.children[1]),
      of: parsedNodeToAST(parsedNode.children[3]),
      body: parsedNodeToAST(parsedNode.children[4])
    };
  }
});
rules.push({
  target: 'for_in_statement',
  elements: ['_for', 'ident', '_in', 'exp', 'block_statement'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'ForInStatement',
      "for": parsedNodeToAST(parsedNode.children[1]),
      "in": parsedNodeToAST(parsedNode.children[3]),
      body: parsedNodeToAST(parsedNode.children[4])
    };
  }
});
rules.push({
  target: 'iterable_range',
  elements: ['iterable_range_limit', '_...', 'iterable_range_limit']
});
rules.push({
  target: 'iterable_range_limit',
  elements: ['.number']
});
rules.push({
  target: 'iterable_range_limit',
  elements: ['ident']
});
/**********************************************************************************************************************/

rules.push({
  target: 'while_statement',
  elements: ['_while', 'bracket_group', 'statement'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'WhileStatement',
      test: parsedNodeToAST(parsedNode.children[1]),
      body: parsedNodeToAST(parsedNode.children[2])
    };
  }
});
rules.push({
  target: 'statement',
  elements: ['while_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'do_while_statement',
  elements: ['_do', 'statement', '_while', 'bracket_group', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'DoWhileStatement',
      test: parsedNodeToAST(parsedNode.children[3]),
      body: parsedNodeToAST(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'statement',
  elements: ['do_while_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'break_statement',
  elements: ['_break', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'BreakStatement'
    };
  }
});
rules.push({
  target: 'statement',
  elements: ['break_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'block_statement',
  elements: ['_{', '_}'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'BlockStatement',
      body: []
    };
  }
});
rules.push({
  target: 'block_statement',
  elements: ['_{', 'statement_arr', '_}'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'BlockStatement',
      body: parsedNodeToASTChain(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'statement',
  elements: ['variable_declaration'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement',
  elements: ['block_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement',
  elements: ['expression_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement',
  elements: ['for_count_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement',
  elements: ['for_in_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement',
  elements: ['for_of_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement',
  elements: ['assign_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'statement_arr',
  elements: ['statement'],
  toASTChain: function toASTChain(parsedNode) {
    return [parsedNodeToAST(parsedNode.children[0])];
  }
});
rules.push({
  target: 'statement_arr',
  elements: ['statement_arr', 'statement'],
  longestOnly: true,
  toASTChain: function toASTChain(parsedNode) {
    return parsedNodeToASTChain(parsedNode.children[0]).concat([parsedNodeToAST(parsedNode.children[1])]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'function_arguments_declaration',
  elements: ['_(', '_)'],
  toASTChain: function toASTChain(parsedNode) {
    return [];
  }
});
rules.push({
  target: 'function_arguments_declaration',
  elements: ['_(', 'argument_declaration_list', '_)'],
  toASTChain: function toASTChain(parsedNode) {
    return parsedNodeToASTChain(parsedNode.children[1]);
  }
});
rules.push({
  target: 'argument_declaration',
  elements: ['ident', 'type_annotation'],
  toAST: function toAST(parsedNode) {
    return {
      type: "ArgumentDeclaration",
      id: parsedNodeToAST(parsedNode.children[0]),
      typeAnnotation: parsedNodeToAST(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'argument_declaration',
  elements: ['ident'],
  toAST: function toAST(parsedNode) {
    return {
      type: "ArgumentDeclaration",
      id: parsedNodeToAST(parsedNode.children[0])
    };
  }
});
rules.push({
  target: 'argument_declaration_list',
  elements: ['argument_declaration'],
  toASTChain: function toASTChain(parsedNode) {
    return [parsedNodeToAST(parsedNode.children[0])];
  }
});
rules.push({
  target: 'argument_declaration_list',
  elements: ['argument_declaration_list', '_,', 'argument_declaration'],
  toASTChain: function toASTChain(parsedNode) {
    return parsedNodeToASTChain(parsedNode.children[0]).concat([parsedNodeToAST(parsedNode.children[2])]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'return_statement',
  elements: ['_return', 'exp', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: "ReturnStatement",
      argument: parsedNodeToAST(parsedNode.children[1])
    };
  }
});
rules.push({
  target: 'return_statement',
  elements: ['_return', '_;'],
  toAST: function toAST(parsedNode) {
    return {
      type: "ReturnStatement"
    };
  }
});
rules.push({
  target: 'statement',
  elements: ['return_statement'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
/**********************************************************************************************************************/

rules.push({
  target: 'function_declare',
  elements: ['_function', 'ident', 'function_arguments_declaration', 'type_annotation', 'block_statement'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'FunctionDeclaration',
      id: parsedNodeToAST(parsedNode.children[1]),
      params: parsedNodeToASTChain(parsedNode.children[2]),
      returnType: parsedNodeToAST(parsedNode.children[3]),
      body: parsedNodeToAST(parsedNode.children[4])
    };
  }
});
rules.push({
  target: 'function_declare',
  elements: ['_function', 'ident', 'function_arguments_declaration', 'block_statement'],
  toAST: function toAST(parsedNode) {
    return {
      type: 'FunctionDeclaration',
      id: parsedNodeToAST(parsedNode.children[1]),
      params: parsedNodeToASTChain(parsedNode.children[2]),
      body: parsedNodeToAST(parsedNode.children[3])
    };
  }
});
rules.push({
  target: 'statement',
  elements: ['function_declare'],
  toAST: function toAST(parsedNode) {
    return parsedNodeToAST(parsedNode.children[0]);
  }
});
rules.push({
  target: 'program',
  elements: ['statement_arr'],
  toAST: function toAST(parsedNode) {
    return {
      type: "Program",
      body: parsedNodeToASTChain(parsedNode.children[0])
    };
  }
});
/* harmony default export */ const SCGrammar = ({
  elementRegexes: elementRegexes,
  rules: rules,
  operatorOrder: operatorOrder
});
;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCParser.js


/***
 * @type {DPParser}
 */

var SCParser = new Pharse_DPParser(SCGrammar);
/* harmony default export */ const SCLang_SCParser = (SCParser);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ExpressionInput.js

 // import '../../../css/ExpressionInput.css';




/***
 * @extends AElement
 * @constructor
 */

function ExpressionInput() {
  this._stopChangeTO = -1;
  this.on('stopchange', this.highlightError.bind(this));
  this.$content = ACore_$('.as-expression-input-content', this).on('keydown', this.eventHandler.keydown).on('cut', this.eventHandler.cut).on('blur', this.eventHandler.blur).on('focus', this.eventHandler.focus).on('paste', this.eventHandler.paste);
  this.$domSignal = ACore_('attachhook').addTo(this);
  this.domSignal = new HTML5_DomSignal(this.$domSignal);
  this.domSignal.on('redrawTokens', this.redrawTokens.bind(this));
  this.lastSelectedPosition = null;
  /****
   * @name value
   * @type {string}
   * @memberOf ExpressionInput#
   */
}

ExpressionInput.tag = 'ExpressionInput'.toLowerCase();

ExpressionInput.render = function () {
  return ACore_({
    extendEvent: ['stopchange'],
    "class": ['as-expression-input'],
    child: [{
      "class": 'as-expression-input-icon-ctn',
      child: ['span.mdi.mdi-equal', 'span.mdi.mdi-alert-circle']
    }, {
      "class": 'as-expression-input-content',
      attr: {
        contenteditable: "true",
        spellcheck: 'false'
      }
    }]
  });
};

ExpressionInput.prototype.tokenize = function (source) {
  return [];
};

ExpressionInput.prototype.getSelectPosition = js_PreInput.prototype.getSelectPosition;
ExpressionInput.prototype.getPosition = js_PreInput.prototype.getPosition;
ExpressionInput.prototype.stringOf = js_PreInput.prototype.stringOf;

ExpressionInput.prototype.tokenOf = function (elt) {};

ExpressionInput.prototype.delayNotifyStopChange = function () {
  if (this._stopChangeTO > 0) {
    clearTimeout(this._stopChangeTO);
  }

  this._stopChangeTO = setTimeout(function () {
    this._stopChangeTO = -1;
    this.emit('stopchange', {}, this);
  }.bind(this), 200);
};

ExpressionInput.prototype.makeTokenElt = function (token) {
  return ACore_({
    tag: 'span',
    "class": ['as-token'],
    attr: {
      'data-type': token.type
    },
    child: {
      text: token.content
    }
  });
};

ExpressionInput.prototype.tokenOf = function (elt) {
  if (!elt.classList.contains('as-token')) return null;
  var res = {};
  res.type = elt.getAttribute('data-type');
  res.content = elt.firstChild && elt.firstChild.data;
  if (res.type && res.content) return res;
  return null;
};

ExpressionInput.prototype.highlightError = function () {
  var value = this.value.trim();
  var it = SCLang_SCParser.parse(value, 'exp');
  var i,
      notSkipCount = 0;
  var tokenErrorIdx = -1;

  if (value && it.error) {
    this.addClass('as-error');
    this.attr('title', it.error.message);
    tokenErrorIdx = it.error.tokenIdx;
  } else {
    this.removeClass('as-error');
  }

  for (i = 0; i < this.$content.childNodes.length; ++i) {
    if (this.$content.childNodes[i].classList.contains('as-token') && this.$content.childNodes[i].getAttribute('data-type') !== 'skip') {
      if (notSkipCount === tokenErrorIdx) {
        this.$content.childNodes[i].classList.add('as-unexpected-token');
      } else {
        this.$content.childNodes[i].classList.remove('as-unexpected-token');
      }

      notSkipCount++;
    }
  }
};

ExpressionInput.prototype.clearErrorHighlight = function () {
  for (var i = 0; i < this.$content.childNodes.length; ++i) {
    if (this.$content.childNodes[i].classList.contains('as-token') && this.$content.childNodes[i].getAttribute('data-type') !== 'skip') {
      this.$content.childNodes[i].classList.remove('as-unexpected-token');
    }
  }
};

ExpressionInput.prototype.setSelectedPosition = function (pos) {
  //when tokenized
  var start;
  var end;

  if (typeof pos === "number") {
    start = pos;
    end = pos;
  } else {
    start = pos.start;
    end = pos.end;
  }

  var curOffset = 0;
  var elt;
  var childNodes = this.$content.childNodes;
  var content;
  var i;
  var sel = window.getSelection();
  var range = document.createRange();
  var d1 = true,
      d2 = true;

  for (i = 0; i < childNodes.length && d1 && d2; ++i) {
    elt = childNodes[i];
    content = elt.firstChild && elt.firstChild.data || '';

    if (d1 && curOffset <= start && (curOffset + content.length > start || i + 1 === childNodes.length)) {
      range.setStart(elt.firstChild || elt, start - curOffset);
      d1 = false;
    }

    if (d2 && curOffset <= end && (curOffset + content.length > end || i + 1 === childNodes.length)) {
      range.setEnd(elt.firstChild || elt, end - curOffset);
      d2 = false;
    }

    curOffset += content.length;
  }

  sel.removeAllRanges();
  sel.addRange(range);
  this.lastSelectedPosition = {
    start: start,
    end: end,
    direction: 'forward'
  };
};

ExpressionInput.prototype.insertText = function (text) {
  var lastPos = this.lastSelectedPosition;
  var value;

  if (this.lastSelectedPosition) {
    value = this.value;
    this.value = value.substring(0, lastPos.start) + text + value.substring(lastPos.end);
    this.lastSelectedPosition = Object.assign({
      direction: 'forward',
      start: lastPos.start + text.length,
      end: lastPos.start + text.length
    });

    if (document.activeElement === this.$content) {
      this.setSelectedPosition(this.lastSelectedPosition);
    }
  } else this.appendText(text);

  this.delayNotifyStopChange();
};

ExpressionInput.prototype.appendText = function (text) {
  var newValue = this.value + text;
  this.value = newValue;

  if (document.activeElement === this.$content) {
    this.setSelectedPosition(newValue.length);
  }

  this.delayNotifyStopChange();
};

ExpressionInput.prototype.redrawTokens = function () {
  var selectedPos = this.getSelectPosition();
  var value = this.value;
  var tokens = SCLang_SCParser.tokenizer.tokenize(value);
  var tokenEltChain = Array.prototype.slice.call(this.$content.childNodes);

  while (tokenEltChain[tokenEltChain.length - 1] && tokenEltChain[tokenEltChain.length - 1].tagName === 'BR') {
    tokenEltChain.pop();
  }

  var leftPassed = 0;

  while (leftPassed < tokenEltChain.length && leftPassed < tokens.length) {
    if (!tokenEltChain[leftPassed].firstChild || !tokenEltChain[leftPassed].classList.contains('as-token') || tokens[leftPassed].content !== tokenEltChain[leftPassed].firstChild.data) break;

    if (!tokenEltChain[leftPassed].token || tokenEltChain[leftPassed].getAttribute('data-type') !== tokens[leftPassed].type) {
      tokenEltChain[leftPassed].setAttribute('data-type', tokens[leftPassed].type);
    }

    leftPassed++;
  }

  var rightPassed = 0;

  while (rightPassed < tokenEltChain.length && rightPassed < tokens.length) {
    if (!tokenEltChain[tokenEltChain.length - 1 - rightPassed].firstChild || !tokenEltChain[tokenEltChain.length - 1 - rightPassed].classList.contains('as-token') || tokens[tokens.length - 1 - rightPassed].content !== tokenEltChain[tokenEltChain.length - 1 - rightPassed].firstChild.data) break;

    if (tokenEltChain[tokenEltChain.length - 1 - rightPassed].getAttribute('data-type') !== tokens[tokens.length - 1 - rightPassed].type) {
      tokenEltChain[tokenEltChain.length - 1 - rightPassed].setAttribute('data-type', tokens[tokens.length - 1 - rightPassed].type);
    }

    rightPassed++;
  }

  var beforeToken;

  if (leftPassed + rightPassed < Math.max(tokenEltChain.length, tokens.length)) {
    beforeToken = tokenEltChain[tokenEltChain.length - rightPassed];
    tokenEltChain.splice(leftPassed, tokenEltChain.length - leftPassed - rightPassed).forEach(function (elt) {
      elt.remove();
    });
    tokens.slice(leftPassed, tokens.length - rightPassed).forEach(function (token) {
      var tokenElt = this.makeTokenElt(token);

      if (beforeToken) {
        this.$content.addChildBefore(tokenElt, beforeToken);
      } else {
        this.$content.addChild(tokenElt);
      }
    }.bind(this));
  }

  if (selectedPos) this.setSelectedPosition(selectedPos);
};

ExpressionInput.property = {};
ExpressionInput.property.value = {
  get: function get() {
    return this.stringOf(this.$content);
  },
  set: function set(value) {
    var tokens = SCLang_SCParser.tokenizer.tokenize(value || '');
    this.$content.clearChild().addChild(tokens.map(function (token) {
      return this.makeTokenElt(token);
    }.bind(this)));
    this.lastSelectedPosition = null;
  }
};
/***
 * @memberOf ExpressionInput#
 * @type {{}}
 */

ExpressionInput.eventHandler = {};
/***
 *
 * @param {KeyboardEvent} event
 */

ExpressionInput.eventHandler.keydown = function (event) {
  if (event.key === 'Enter') {
    event.preventDefault();
  } else if (event.ctrlKey && event.key === 'X' || !event.ctrlKey && event.key.length === 1 || event.key === 'Delete' || event.key === 'Backspace') {
    this.domSignal.emit('redrawTokens');
  }

  this.delayNotifyStopChange();
};
/***
 *
 * @param {MouseEvent} event
 */


ExpressionInput.eventHandler.mousedown = function (event) {};

ExpressionInput.eventHandler.paste = function (event) {
  var paste = (event.clipboardData || window.clipboardData).getData('text');
  paste = paste.replace(/[\r\n]+/g, ' ');
  event.preventDefault();
  var pos = this.getSelectPosition();
  if (!pos || !paste) return;
  var value = this.value;
  var newValue = value.substring(0, pos.start) + paste + value.substring(pos.end);
  this.value = newValue;
  this.setSelectedPosition(pos.start + paste.length);
  this.highlightError();
};

ExpressionInput.eventHandler.cut = function (event) {
  this.domSignal.emit('redrawTokens');
  this.delayNotifyStopChange();
};
/***
 * @this ExpressionInput
 */


ExpressionInput.eventHandler.blur = function () {
  this.highlightError();
};
/***
 * @this ExpressionInput
 */


ExpressionInput.eventHandler.focus = function () {
  this.clearErrorHighlight();
  setTimeout(function () {
    this.lastSelectedPosition = this.getSelectPosition();
  }.bind(this), 100);
};

absol_acomp_ACore.install(ExpressionInput);
/* harmony default export */ const js_ExpressionInput = (ExpressionInput);
/*import '../css/expressioninput.css';
import EditableElement, { _, $ } from "./EditableElement";
import SCGrammar from "absol/src/SCLang/SCGrammar";
import DPParser from "absol/src/Pharse/DPParser";
import { parsedNodeToAST, parsedNodeToASTChain } from "absol/src/Pharse/DPParseInstance";


function EIIdentifier() {

}

EIIdentifier.tag = 'EIIdentifier'.toLowerCase();
EIIdentifier.render = function () {
    return _({
        class: ['asei-identifier', 'asei-elt'],
        child: { text: 'Math' }
    });
};


function EINumber() {

}


EINumber.tag = 'EINumber'.toLowerCase();
EINumber.render = function () {
    return _({
        class: ['asei-number', 'asei-elt'],
        child: { text: '1234' }
    });
};


function EIArgumentList() {

}

EIArgumentList.tag = 'EIArgumentList'.toLowerCase();
EIArgumentList.render = function () {
    return _({
        class: ['asei-argument-list', 'asei-elt'],
        child: []
    });
};


function EIBinaryChain() {

}


EIBinaryChain.tag = 'EIBinaryChain'.toLowerCase();
EIBinaryChain.render = function () {
    return _({
        class: ['asei-binary-chain', 'asei-elt'],
        child: []
    });
};


function EICallExpression() {

}


EICallExpression.tag = 'EICallExpression'.toLowerCase();
EICallExpression.render = function () {
    return _({
        class: ['asei-call-expression', 'asei-elt'],
        child: []
    });
};


function EIGroup() {

}


EIGroup.tag = 'EICallExpression'.toLowerCase();
EIGroup.render = function () {
    return _({
        class: ['asei-group', 'asei-elt'],
        child: []
    });
};


/**
 *
 * @constructor
 *
function ExpressionInput() {
    this._value = '';
    this.$content = $('.as-expression-input-content', this);

}

ExpressionInput.tag = 'ExpressionInput'.toLowerCase();

ExpressionInput.render = function () {
    return _({
        class: 'as-expression-input',
        child: [
            {
                attr: { contenteditable: true },
                class: 'as-expression-input-content',
                child: [
                    { tag: EIIdentifier }
                ]
            }
        ]
    });
};


ExpressionInput.property = {};

ExpressionInput.property.value = {
    set: function (value) {
        if (typeof value !== "string") value = '';
        this._value = value;
        var res = EIParser.parse(value, 'exp');
        console.log(res);
    },
    get: function () {

    }
};


ExpressionInput.property.ast = {
    get: function () {

    }
};

export default ExpressionInput;

/**
 *
 * @param {ExpressionInput} elt
 * @constructor
 *
function EITokenizer(elt) {
    this.elt = elt;
}

EITokenizer.prototype.getText = function () {

};




var rules = [];

rules.push({
    target: 'e_exp',
    elements: ['__'],
    toAST: function (parsedNode) {
        return {
            type: 'EmptyExpression',
        }
    }
});

rules.push({
    target: 'ident',
    elements: ['.word'],
    toAST: function (parsedNode) {
        return {
            type: 'Identifier',
            name: parsedNode.children[0].content
        }
    }
});

rules.push({
    target: 'args_list',
    elements: ['exp'],
    toAST: function (parsedNode) {
        return parsedNodeToAST(parsedNode.children[0]);
    },
    toASTChain: function (parsedNode) {
        return [parsedNodeToAST(parsedNode)];
    }
});


rules.push({
    target: 'args_list',
    elements: ['args_list', '_,', 'exp'],
    longestOnly: true,
    ident: 'args_list_rec',
    toASTChain: function (parsedNode) {
        return parsedNodeToASTChain(parsedNode.children[0]).concat(parsedNodeToAST(parsedNode.children[2]));
    }
});


rules.push({
    target: 'function_callee',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return parsedNodeToAST(parsedNode.children[0]);
    }
});


rules.push({
    target: 'function_call',
    elements: ['function_callee', '_(', 'args_list', '_)'],
    toAST: function (parsedNode) {
        return {
            type: 'CallExpression',
            arguments: parsedNode.children[2].rule.toASTChain(parsedNode.children[2]),
            callee: parsedNodeToAST(parsedNode.children[0])
        }
    }
});

rules.push({
    target: 'function_call',
    elements: ['function_callee', '_(', '_)'],
    toAST: function (parsedNode) {
        return {
            type: 'CallExpression',
            arguments: [],
            callee: parsedNodeToAST(parsedNode.children[0])
        };
    }
});

rules.push({
    target: 'exp',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return parsedNodeToAST(parsedNode.children[0]);
    }
});


rules.push({
    target: 'exp',
    elements: ['function_call'],
    toAST: function (parsedNode) {
        return parsedNodeToAST(parsedNode.children[0]);
    }
});


var EIGrammar = {
    elementRegexes: SCGrammar.elementRegexes,
    operatorOrder: SCGrammar.operatorOrder,
    rules: rules
};

var EIParser = new DPParser(EIGrammar);

*/
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/IdentTextInput.js


/***
 * @augments HTMLInputElement
 * @augments AElement
 * @constructor
 */

function IdentTextInput() {
  this.history = new ITIHistory(this);
  this.textCtrl = new ITITextController(this); // this.on('keydown', this.eventHandler.identTextKeyDown)
  //     .on('paste', this.applyData ? this.eventHandler.identTextPaste : this.eventHandler.identTextPaste1);
}

IdentTextInput.tag = 'IdentTextInput'.toLowerCase();

IdentTextInput.render = function () {
  return ACore_('input.as-text-input[type="text"]');
};

IdentTextInput.prototype._filterHistory = function () {
  if (!this.history) return;
  var temp = this.history.filter(function (t) {
    return !t.text.match(/(^[^a-zA-Z_$])|([^a-zA-Z$_0-9]+)/);
  });
  this.history.splice(0, this.history.length);
  this.history.push.apply(this.history, temp);
};

IdentTextInput.prototype._setNewText = function (text, caretPos) {
  this._filterHistory();

  if (typeof caretPos !== "number") caretPos = text.length;
  caretPos = Math.max(0, Math.min(text.length, caretPos >> 0));

  if (this.applyData) {
    this.applyData(text, {
      start: caretPos,
      end: caretPos,
      direction: 'forward'
    });
  } else {
    this.value = text;
    setCaretPosition(this, caretPos);
  }
}; //
// IdentTextInput.eventHandler.identTextKeyDown = function (event) {
//
// };
//
//
// IdentTextInput.eventHandler.identTextPaste = function (event) {
//     var prevValue = this.value;
//     var startPos = this.getSelectionStart();
//     var endPos = this.getSelectionEnd();
//     setTimeout(function () {
//         var newValue = this.value;
//         var newEndPos = endPos + newValue.length - prevValue.length;
//         var pastedText = newValue.substr(startPos, newEndPos - startPos).replace(/(^[^a-zA-Z_$])|([^a-zA-Z$_0-9]+)/g, '');
//         var newValue1 = newValue.substr(0, startPos) + pastedText + newValue.substr(newEndPos);
//         if (!newValue1 !== newValue) {
//             this._setNewText(newValue1, startPos + pastedText.length);
//         }
//     }.bind(this), 0);
// };
//
// IdentTextInput.eventHandler.identTextPaste1 = function (event) {
//     var clipboardData = event.clipboardData || window.clipboardData;
//     var pastedText = clipboardData.getData('text/plain');
//     var pastedText1 = pastedText.replace(/(^[^a-zA-Z_$])|([^a-zA-Z$_0-9]+)/g, '');
//     if (pastedText !== pastedText1) {
//         document.execCommand("insertText", false, pastedText1);
//         event.preventDefault();
//     }
// };


absol_acomp_ACore.install(IdentTextInput);
/* harmony default export */ const js_IdentTextInput = (IdentTextInput);
/**
 *
 * @param {IdentTextInput} elt
 * @constructor
 */

function ITIHistory(elt) {
  this.elt = elt;
}
/**
 *
 * @param {IdentTextInput} elt
 * @constructor
 */


function ITITextController(elt) {
  var _this = this;

  this.elt = elt;
  Object.keys(this.constructor.prototype).forEach(function (key) {
    if (key.startsWith('ev_')) _this[key] = _this[key].bind(_this);
  });
  this.elt.on('keydown', this.ev_keydown);
}

ITITextController.prototype.getSelectionStart = function () {
  var start = 0;
  if (this.elt.selectionStart || this.elt.selectionStart === 0) start = this.elt.selectionStart;
  return start;
};

ITITextController.prototype.getSelectionEnd = function () {
  var end = 0;
  if (this.elt.selectionEnd || this.elt.selectionEnd === 0) end = this.elt.selectionEnd;
  return end;
};

ITITextController.prototype.ev_keydown = function (event) {
  var selectedPositionStart;
  var key = event.key;

  if (key === ' ') {
    event.preventDefault();
  } else if (key === 'Enter') {
    event.preventDefault();
    this.elt.blur();
  } else if (key === "Escape") {
    // this.value = this._prevValue || '';
    this.elt.blur();
  } else if (!event.ctrlKey && !event.altKey && key.length === 1) {
    if (key.match(/[a-zA-Z$_0-9]/)) {
      selectedPositionStart = this.getSelectionStart();

      if (selectedPositionStart === 0 && key.match(/[0-9]/)) {
        event.preventDefault();
      }
    } else {
      event.preventDefault();
    }
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EfficientTable.js













var execAsync = function execAsync(commands, whileFunc) {
  return commands.reduce(function (ac, act) {
    if (whileFunc && !whileFunc()) return;

    if (ac && ac.then) {
      if (typeof act === "function") {
        return ac.then(act);
      } else {
        return ac.then(function () {
          return act;
        });
      }
    }

    if (typeof act === 'function') return act(ac);else return act;
  }, null);
};

var getMaxRowCount = function getMaxRowCount() {
  var screenSize = getScreenSize();
  return Math.ceil(Math.max(2048, screenSize.height) / 40.0) * 3;
};

var waitAll = function waitAll(variables, thenCb) {
  var hasPromise = variables.findIndex(function (v) {
    return v && typeof v.then === "function";
  });
  if (hasPromise >= 0) return Promise.all(variables).then(thenCb);else return thenCb(variables);
};

var waitValue = function waitValue(value, thenCb) {
  if (value && typeof value.then === "function") {
    return value.then(thenCb);
  } else return thenCb(value);
};
/**
 * @extends AElement
 * @constructor
 */


function EfficientTable() {
  this.layoutCtrl = new ETLayoutController(this);
  this._adapter = null;
  this.table = null;
  this.extendStyle = this.extendStyle || {};
  this.$attachhook = ACore_('attachhook').addTo(this).on('attached', function () {});
  this.$attachhook.requestUpdateSize = this.layoutCtrl.requestUpdateSize.bind(this);
  /**
   * @name adapter
   * @type {ETAdapter}
   * @memberof EfficientTable#
   */
}

EfficientTable.tag = 'EfficientTable'.toLowerCase();

EfficientTable.render = function (data, domDesc) {
  var width = domDesc.style && domDesc.style.width;
  var classList = ['as-efficient-table-wrapper'];

  if (width === 'match_parent') {
    classList.push('as-width-match-parent');
  }

  var id = domDesc.id || domDesc.attr && domDesc.attr.id || 'no-id-' + randomIdent(10);
  return ACore_({
    id: id,
    extendEvent: ['colresize'],
    "class": classList,
    props: {
      extendStyle: domDesc.style
    },
    child: [{
      "class": 'as-dynamic-table-fixed-y-ctn'
    }]
  });
};

EfficientTable.prototype.addStyle = function (name, value) {
  if (name === 'width') {
    this.extendStyle[name] = value;
  } else {
    HTML5_AElement.prototype.addStyle.apply(this, arguments);
  }

  return this;
};
/**
 *
 * @param {string|number|function}arg
 */


EfficientTable.prototype.findRow = function (arg) {
  if (this.table) {
    return this.table.body.findRow(arg);
  }

  return null;
};

EfficientTable.prototype.requestUpdateSize = function () {
  this.layoutCtrl.requestUpdateSize();
};

EfficientTable.prototype.notifyDataSheetChange = function () {
  if (this.adapter) this.adapter.notifyDataSheetChange();
};

EfficientTable.prototype.notifyRowModifiedAt = function (idx) {
  if (this.adapter) this.adapter.notifyRowModifiedAt(idx);
};

EfficientTable.prototype.notifyRowRemoveAt = function (idx) {
  if (this.adapter) this.adapter.notifyRowRemoveAt(idx);
};

EfficientTable.prototype.notifyAddRowAt = function (idx) {
  if (this.adapter) this.adapter.notifyAddRowAt(idx);
};

EfficientTable.prototype.revokeResource = function () {};

EfficientTable.property = {};
EfficientTable.property.adapter = {
  set: function set(value) {
    this._adapter = new ETAdapter(this, value);
    this.table = new ETTable(this, this._adapter.data);
    this.addChild(this.table.elt);

    this._adapter.notifyDataSheetChange();
  },
  get: function get() {
    return this._adapter;
  }
};
/* harmony default export */ const js_EfficientTable = (EfficientTable); // ETAdapter.prototype.

/**
 *
 * @param {EfficientTable} elt
 * @constructor
 */

function ETLayoutController(elt) {
  var _this = this;

  this.elt = elt;
  /***
   *
   * @type {SearchTextInput|null}
   */

  this.$searchInput = null;
  /***
   *
   * @type {AElement}
   */

  this.$table = ACore_$('.as-dynamic-table', elt);
  /***
   *
   * @type {AElement}
   */

  this.$thead = ACore_$('.as-dynamic-table>thead', this.$table);
  /***
   *
   * @type {AElement}
   */

  this.$tbody = ACore_$('.as-dynamic-table>tbody', this.$table);
  this.$filterInputs = [];
  this.$attachhook = ACore_('attachhook').addTo(elt);
  this.domSignal = new HTML5_DomSignal(ACore_('attachhook').addTo(elt)); //controller

  this.$fixedYCtn = ACore_$('.as-dynamic-table-fixed-y-ctn', elt);
  this.extendStyle = {}; // this.$attachhook.requestUpdateSize = this.fixedContentCtrl.updateSize.bind(this.fixedContentCtrl);

  this.$attachhook.requestUpdateSize = this.requestUpdateSize.bind(this);
  this.$attachhook.on('attached', function () {
    HTML5_ResizeSystem.add(_this.$attachhook);

    _this.onAttached();

    _this.onAttached(); // manager.add(this);


    setTimeout(function () {
      _this.requestUpdateSize();
    }, 10);
  });
  this.ev_scroll = this.ev_scroll.bind(this);
  this.$BindedScrollers = [];
  this.stopScrollTO = -1;
}

ETLayoutController.prototype.onAttached = function () {
  this.bindScroller();
};

ETLayoutController.prototype.requestUpdateSize = function () {
  this.elt.table.body.updateYOffset(true);
  var beforeRect = this.elt.table.body.size;
  this.viewSize();
  this.viewByScroll();
  this.elt.table.body.calcSize();
  var newRect = this.elt.table.body.size;

  if (newRect.width !== beforeRect.width || newRect.height !== beforeRect.height) {
    HTML5_ResizeSystem.updateUp(this.elt.parentElement);
  }
};

ETLayoutController.prototype.viewSize = function () {
  this.elt.table.calcSize();
  var size = this.elt.table.size;

  if (size.trueValue) {
    this.elt.addClass('as-true-size');
  }

  this.elt.addStyle('height', size.height + 'px');
};

ETLayoutController.prototype.bindScroller = function () {
  var p = this.elt.parentElement;

  while (p) {
    p.addEventListener('scroll', this.ev_scroll);
    this.$BindedScrollers.push(p);
    p = p.parentElement;
  }

  document.addEventListener('scroll', this.ev_scroll);
  this.$BindedScrollers.push(document);
};

ETLayoutController.prototype.unBindScroller = function () {
  while (this.$BindedScrollers.length) {
    this.$BindedScrollers.pop().removeEventListener('scroll', this.ev_scroll);
  }
};

ETLayoutController.prototype.viewByScroll = function () {
  var _this2 = this;

  if (!this.elt.table) return;
  if (this.elt.table.size.trueValue) return;
  var bound = this.elt.getBoundingClientRect();
  var outbound = traceOutBoundingClientRect(this.elt); //todo: small than scroller

  var head = this.elt.table.head;
  var hs = 0;

  if (bound.top >= outbound.top) {
    hs = 0;
    this.elt.table.elt.addStyle('top', 0);
    return;
  } else if (bound.bottom < outbound.bottom) {
    hs = 1;
  } else {
    hs = (outbound.top - (bound.top + head.size.height)) / (bound.height - head.size.height - outbound.height);
  }

  var rowLNIdx = this.elt.adapter.length * hs;
  var y = outbound.top + head.size.height + hs * (outbound.height - head.size.height);
  var rowIdx = Math.floor(rowLNIdx);
  if (hs === 1) rowIdx = this.elt.adapter.length - 1;
  var body = this.elt.table.body;
  var currentOffset = body.rowOffset;
  this.elt.table.body.requestVisible(rowIdx);
  this.elt.table.body.waitLoaded(function () {
    if (currentOffset !== body.rowOffset) return;

    _this2.elt.table.body.updateYOffset();

    var row = body.rows[rowIdx - body.rowOffset];
    if (!row) return; //out of date, don't update

    var rowLNY = row.offsetY + row.offsetHeight * hs;
    var dy = y - bound.top - rowLNY;

    _this2.elt.table.elt.addStyle('top', dy + 'px');
  });
};

ETLayoutController.prototype.ev_scroll = function () {
  var _this3 = this;

  this.viewByScroll();
  clearTimeout(this.stopScrollTO);
  this.stopScrollTO = setTimeout(function () {
    _this3.viewByScroll();
  }, 100);
};
/**
 *
 * @param elt
 * @param adapterData
 * @constructor
 */


function ETAdapter(elt, adapterData) {
  this.elt = elt;
  this.data = adapterData.data;
  this.raw = adapterData;
  this.asyncSession = Math.random();
  this.sync = null;
}

ETAdapter.prototype.notifyDataSheetChange = function () {
  var _this4 = this;

  var asyncSession = Math.random();
  this.asyncSession = asyncSession;
  var cmdArr = [function () {
    return _this4.getLength();
  }, function () {
    var body = _this4.elt.table.body;
    var head = _this4.elt.table.head;
    body.drawFrom(0);

    var makeSize = function makeSize() {
      body.waitLoaded(function () {
        body.updateYOffset(true);

        _this4.elt.layoutCtrl.requestUpdateSize();
      });
    };

    if (_this4.elt.isDescendantOf(document.body)) {
      makeSize();
    } else {
      _this4.elt.$attachhook.once('attached', makeSize);
    }
  }];
  execAsync(cmdArr, function () {
    return _this4.asyncSession === asyncSession;
  });
};

ETAdapter.prototype.notifyRowModifiedAt = function (idx) {
  var _this5 = this;

  this.sync = execAsync([this.sync, function () {
    _this5.elt.table.body.modifiedRowAt(idx);

    if (_this5.elt.isDescendantOf(document.body)) {
      _this5.elt.table.body.waitLoaded(function () {
        _this5.elt.layoutCtrl.requestUpdateSize();
      });
    }
  }]);
};

ETAdapter.prototype.notifyRowRemoveAt = function (idx) {
  var _this6 = this;

  this.sync = execAsync([this.sync, function () {
    return _this6.getLength();
  }, function () {
    _this6.elt.table.body.removeRowAt(idx);

    if (_this6.elt.isDescendantOf(document.body)) {
      _this6.elt.table.body.waitLoaded(function () {
        _this6.elt.layoutCtrl.requestUpdateSize();
      });
    }
  }]);
};

ETAdapter.prototype.notifyAddRowAt = function (idx) {
  var _this7 = this;

  this.sync = execAsync([this.sync, function () {
    return _this7.getLength();
  }, function () {
    _this7.elt.table.body.addRowAt(idx);

    if (_this7.elt.isDescendantOf(document.body)) {
      _this7.elt.table.body.waitLoaded(function () {
        _this7.elt.layoutCtrl.viewSize();
      });
    }
  }]);
};

ETAdapter.prototype.getLength = function () {
  var _this8 = this;

  return execAsync([function () {
    var body = _this8.raw.data.body;
    var length;

    if (typeof body.length === "number") {
      length = body.rows.length;
    } else if (body.length && body.length.then) {
      length = body.length;
    } else if (typeof body.getLength === "function") {
      try {
        length = _this8.raw.data.body.getLength(_this8);
      } catch (e) {
        safeThrow_safeThrow(e);
      }
    } else if (body.rows) length = body.rows.length;

    return length;
  }, function (l) {
    _this8.length = l;
    return l;
  }]);
};

ETAdapter.prototype.getRowAt = function (idx) {
  var data;
  var body = this.raw.data.body;

  if (typeof body.getRowAt === "function") {
    try {
      data = body.getRowAt(idx, this);
    } catch (e) {
      safeThrow_safeThrow(e);
    }
  } else if (body.rows) data = body.rows[idx];

  return data;
};

ETAdapter.prototype.renderHeadCell = function (elt, data, controller) {
  if (data.child) {
    if (data.child.map) {
      elt.addChild(data.child.map(function (it) {
        return ACore_(it);
      }));
    } else {
      elt.addChild(ACore_(data.child));
    }
  }

  if (data.render) {
    data.render.call(null, elt, data, controller);
  }
};

ETAdapter.prototype.renderBodyCell = function (elt, data, idx, controller) {
  var body = this.raw.data.body;
  var template = body.rowTemplate;
  var cellTpl = template.cells[idx];

  if (cellTpl.child) {
    if (cellTpl.child.map) {
      elt.addChild(cellTpl.child.map(function (it) {
        return ACore_(it);
      }));
    } else {
      elt.addChild(ACore_(cellTpl.child));
    }
  }

  if (cellTpl.render) {
    cellTpl.render.call(null, elt, data, controller);
  }

  if (cellTpl.style) elt.addStyle(cellTpl.style);
};

ETAdapter.prototype.getRowLength = function () {
  var body = this.raw.data.body;
  var template = body.rowTemplate;
  return template.cells.length;
};
/**
 *
 * @param {EfficientTable} wrapper
 * @param data
 * @constructor
 */


function ETTable(wrapper, data) {
  this.wrapper = wrapper;
  this.adapter = this.wrapper.adapter;
  this.data = data;
  this.head = new ETHead(this, this.data.head);
  this.body = new ETBody(this, this.data.body);
  this.elt = ACore_({
    tag: 'table',
    "class": 'as-dynamic-table',
    child: [this.head.elt, this.body.elt]
  });
  this.handleStyle();
  this.size = new Math_Rectangle(0, 0, 0, 0);
  this.size.trueValue = false;
}

ETTable.prototype.handleStyle = function () {
  var style = this.wrapper.extendStyle;
  var value;

  if (style.width) {
    value = parseMeasureValue(style.width);

    if (value) {
      if (value.unit === '%') {
        this.wrapper.style.setProperty('width', value);
        this.elt.addStyle('width', '100%');
      }
    }
  }
};

ETTable.prototype.calcSize = function () {
  this.head.calcSize();
  this.body.calcSize();
  this.size = this.head.size.clone();
  this.size.height += this.body.size.height;
  this.size.trueValue = this.body.size.trueValue;
};
/**
 *
 * @param {ETTable} table
 * @param data
 * @constructor
 */


function ETHead(table, data) {
  var _this9 = this;

  this.table = table;
  this.data = data || {};
  if (!this.data.rows) this.data.rows = [];
  this.rows = this.data.rows.map(function (rowData) {
    return new ETHeadRow(_this9, rowData);
  });
  this.elt = ACore_({
    tag: 'thead',
    "class": 'as-dt-header',
    child: this.rows.map(function (it) {
      return it.elt;
    })
  });
  this.size = new Math_Rectangle(0, 0, 0, 0);
}

ETHead.prototype.calcSize = function () {
  var bound = this.elt.getBoundingClientRect();
  this.size = Math_Rectangle.fromClientRect(bound);
};
/**
 *
 * @param {ETHead} head
 * @param data
 * @constructor
 */


function ETHeadRow(head, data) {
  var _this10 = this;

  this.head = head;
  this.data = data || {};
  if (!this.data.cells) this.data.cells = [];
  this.cells = this.data.cells.map(function (cellData) {
    return new ETHeadCell(_this10, cellData);
  });
  this.elt = ACore_({
    tag: 'tr',
    "class": 'as-dt-header-row',
    child: this.cells.map(function (it) {
      return it.elt;
    })
  });
} // (ETHeadRow)


function ETHeadCell(row, data) {
  this.row = row;
  this.data = data || {};
  this.elt = ACore_({
    tag: 'th',
    "class": 'as-dt-header-cell'
  });

  if (data.attr && isNaturalNumber(data.attr.colspan)) {
    this.elt.attr('colspan', data.attr.colspan);
  }

  if (data.attr && isNaturalNumber(data.attr.rowspan)) {
    this.elt.attr('colspan', data.attr.rowspan);
  }

  if (data.style) this.elt.addStyle(data.style);
  this.row.head.table.adapter.renderHeadCell(this.elt, this.data, this);
}
/**
 *
 * @param {ETTable} table
 * @param data
 * @constructor
 */


function ETBody(table, data) {
  this.data = data;
  this.table = table;
  this.elt = ACore_({
    tag: 'tbody',
    "class": 'as-dt-body'
  });
  this.rowOffset = 0;
  this.rows = [];
  /**
   *
   * @type {Rectangle|{trueValue:boolean}}
   */

  this.size = new Math_Rectangle(0, 0, 0, 0);
  this.size.trueValue = false;
  this.needUpdateYOffset = false;
  this.sync = null;
}

ETBody.prototype.removeRowAt = function (idx) {
  var localIdx = idx - this.rowOffset;
  var row = this.rows[localIdx];
  if (!row) return false;
  row.elt.selfRemove();
  this.rows.splice(localIdx, 1);
  row.revokeResource();

  for (var i = 0; i < this.rows.length; ++i) {
    this.rows[i].updateIdx(i + this.rowOffset);
  }

  this.drawFrom(this.rowOffset);
};

ETBody.prototype.modifiedRowAt = function (idx) {
  var localIdx = idx - this.rowOffset;
  var row = this.rows[localIdx];
  if (!row) return false;
  var newRow = new ETBodyRow(this, this.table.wrapper.adapter.getRowAt(idx));
  newRow.updateIdx(idx);
  this.rows[localIdx] = newRow;
  row.elt.selfReplace(newRow.elt);
  this.needUpdateYOffset = true;
};

ETBody.prototype.addRowAt = function (idx) {
  var localIdx = idx - this.rowOffset;
  var row = this.rows[localIdx];
  if (!row) return false;
  var newRow = new ETBodyRow(this, this.table.wrapper.adapter.getRowAt(idx));
  this.rows.splice(localIdx, 0, newRow);
  row.elt.parentElement.addChildBefore(newRow.elt, row.elt);

  for (var i = 0; i < this.rows.length; ++i) {
    this.rows[i].updateIdx(i + this.rowOffset);
  }

  this.needUpdateYOffset = true;
};

ETBody.prototype.requestVisible = function (idx) {
  var maxRow = getMaxRowCount();
  var length = this.table.wrapper.adapter.length;
  var pageIdx;
  var pageN = Math.ceil(Math.max(length / (maxRow / 3)));
  idx = Math.max(0, idx);
  idx = Math.min(length - 1, idx);
  pageIdx = Math.floor(idx / (maxRow / 3));
  pageIdx = Math.min(pageN - 3, pageIdx - 1);
  pageIdx = Math.max(0, pageIdx);
  this.drawFrom(pageIdx * Math.floor(maxRow / 3));
};

ETBody.prototype.drawFrom = function (idx) {
  var adapter = this.table.wrapper.adapter;
  var maxRowCount = getMaxRowCount();
  idx = Math.max(0, idx);
  var endIdx = Math.min(idx + maxRowCount, adapter.length);
  idx = Math.min(endIdx - 1, idx);
  var row;

  while (this.rowOffset + this.rows.length > idx + maxRowCount && this.rows.length) {
    row = this.rows.pop();
    row.elt.remove();
  }

  while (this.rowOffset < idx && this.rows.length) {
    row = this.rows.shift();
    this.rowOffset++;
    row.elt.remove();
    row.revokeResource();
    this.needUpdateYOffset = true;
  }

  if (this.rows.length === 0) this.rowOffset = Math.min(adapter.length, idx + 1);
  var newRows = [];
  var newRow;

  while (this.rowOffset > idx && this.rowOffset > 0) {
    this.rowOffset--;
    newRow = new ETBodyRow(this, adapter.getRowAt(this.rowOffset));
    newRows.push(newRow);
    newRow.updateIdx(this.rowOffset);
    this.rows.unshift(newRow);
    this.elt.addChildBefore(newRow.elt, this.elt.firstChild);
    this.needUpdateYOffset = true;
  }

  while (this.rowOffset + this.rows.length < endIdx) {
    newRow = new ETBodyRow(this, adapter.getRowAt(this.rowOffset + this.rows.length));
    newRow.updateIdx(this.rowOffset + this.rows.length);
    newRows.push(newRow);
    this.rows.push(newRow);
    this.elt.addChild(newRow.elt);
    this.needUpdateYOffset = true;
  }
};
/**
 *
 * @param {boolean} force
 */


ETBody.prototype.updateYOffset = function (force) {
  if (!this.needUpdateYOffset && !force) return;
  this.needUpdateYOffset = false;
  var tableBound = this.table.elt.getBoundingClientRect();
  this.rows.forEach(function (row) {
    row.calcSize();
    var rowBound = row.size;
    row.offsetY = rowBound.y - tableBound.top;
    row.offsetHeight = rowBound.height;
  });
};

ETBody.prototype.calcSize = function () {
  var adapter = this.table.wrapper.adapter;
  var bound = this.elt.getBoundingClientRect();

  if (this.rows.length === adapter.length) {
    this.size = Math_Rectangle.fromClientRect(bound);
    this.size.trueValue = true;
  } else {
    this.size = Math_Rectangle.fromClientRect(bound);
    this.size.height = bound.height / this.rows.length * adapter.length;
    this.size.trueValue = false;
  }
};

ETBody.prototype.waitLoaded = function (cb) {
  waitAll(this.rows.map(function (row) {
    return row.data;
  }), cb);
};

function ETBodyRow(body, data) {
  var _this11 = this;

  this.elt = ACore_({
    tag: 'tr',
    "class": 'as-dt-body-row'
  });
  this.offsetY = 0;
  this.data = data;
  this.body = body;
  this.idx = 0;
  this.$idx = undefined;
  waitValue(this.data, function (data) {
    _this11.data = data;
    var adapter = body.table.wrapper.adapter;
    var length = adapter.getRowLength();
    _this11.cells = Array(length).fill(null).map(function (u, i) {
      return new ETBodyCell(_this11, i);
    });

    _this11.elt.addChild(_this11.cells.map(function (cell) {
      return cell.elt;
    }));

    _this11.$idx = ACore_$('.as-dt-row-index', _this11.elt) || null;
    if (_this11.$idx) _this11.$idx.attr('data-idx', _this11.idx + 1);
  });
  this.size = new Math_Rectangle(0, 0, 0, 0); // this.cells = data.cells.map(cell => new ETBodyCell(this, cell));

  /**
   * @name adapter
   * @type {ETAdapter}
   * @memberof ETBodyRow#
   */
}

ETBodyRow.prototype.updateIdx = function (value) {
  this.idx = value;
  if (!this.cells) return;
  if (this.$idx === undefined) this.$idx = ACore_$('.as-dt-row-index', this.elt) || null;
  if (this.$idx) this.$idx.attr('data-idx', this.idx + 1);
};

ETBodyRow.prototype.calcSize = function () {
  this.size = Math_Rectangle.fromClientRect(this.elt.getBoundingClientRect());
};

ETBodyRow.prototype.notifyRemove = function () {
  if (this.adapter) this.adapter.notifyRowRemoveAt(this.idx);
};

ETBodyRow.prototype.notifyModified = function () {
  if (this.adapter) this.adapter.notifyRowModifiedAt(this.idx);
};

ETBodyRow.prototype.revokeResource = function () {
  // return;
  this.revokeResource = noop;
  revokeResource(this.elt);
  delete this.elt;
  this.body = null;
  this.notifyRemove = noop;
};

Object.defineProperty(ETBodyRow.prototype, 'adapter', {
  /**
   *
   * @returns {ETAdapter}
   */
  get: function get() {
    return this.body && this.body.table.wrapper && this.body.table.wrapper.adapter;
  }
});

function ETBodyCell(row, idx) {
  this.elt = ACore_({
    tag: 'td',
    "class": 'as-dt-body-cell'
  });
  this.row = row;
  var adapter = this.row.body.table.wrapper.adapter;
  adapter.renderBodyCell(this.elt, row.data, idx, this);
}
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/compactdatagrid.css
var compactdatagrid = __webpack_require__(7346);
// EXTERNAL MODULE: ./node_modules/process/browser.js
var browser = __webpack_require__(554);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CompactDataGridEditor.js
function CompactDataGridEditor_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { CompactDataGridEditor_typeof = function _typeof(obj) { return typeof obj; }; } else { CompactDataGridEditor_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return CompactDataGridEditor_typeof(obj); }













var EV_SELECTED_CELL_CHANGE = 'SELECTED_CELL_CHANGE'.toLowerCase();
var EV_CELL_DATA_CHANGE = 'change';
/**
 * loc: [row, col, rowHeight, colHeight]
 * @param {AElement} cell
 * @returns {number[]}
 */

var locOfCell = function locOfCell(cell) {
  return (cell.getAttribute('data-loc') || 'Nan,NaN').split(',').concat([cell.getAttribute('rowspan') || '1', cell.getAttribute('colspan') || '1']).map(function (it) {
    return parseInt(it, 10);
  });
};

var locOfCells = function locOfCells(cells) {
  return cells.reduce(function (ac, cell) {
    var cellLoc = locOfCell(cell);
    if (!ac) return cellLoc;
    return mergeLoc(ac, cellLoc);
  }, null);
};

function mergeLoc(loc1, loc2) {
  var rowLow = Math.min(loc1[0], loc2[0]);
  var colLow = Math.min(loc1[1], loc2[1]);
  var rowHigh = Math.max(loc1[0] + loc1[2] - 1, loc2[0] + loc2[2] - 1);
  var colHigh = Math.max(loc1[1] + loc1[3] - 1, loc2[1] + loc2[3] - 1);
  var res = [rowLow, colLow, rowHigh - rowLow + 1, colHigh - colLow + 1];
  if (arguments[2]) res = mergeLoc(res, arguments[2]);
  return res;
}

;

var locInLoc = function locInLoc(loc, ctn) {
  var mlc = mergeLoc(loc, ctn);
  return locEqual(mlc, ctn);
};

var locEqual = function locEqual(loc1, loc2) {
  return loc1[0] === loc2[0] && loc1[1] === loc2[1] && loc1[2] === loc2[2] && loc1[3] === loc2[3];
};

var locCollapse = function locCollapse(loc1, loc2) {
  if (loc1[0] + loc1[2] <= loc2[0]) return false;
  if (loc2[0] + loc2[2] <= loc1[0]) return false;
  if (loc1[1] + loc1[3] <= loc2[1]) return false;
  if (loc2[1] + loc2[3] <= loc1[1]) return false;
  return true;
};

var varNameOf = function varNameOf(o) {
  var res;
  if (!o) res = undefined;else if (typeof o === "string") res = o;else if (o.attr) res = o.attr('data-name');else if (typeof o.name === "string") res = o.name;
  return res || undefined;
};

var varTitleOf = function varTitleOf(o) {
  var res = undefined;
  if (!o) res = undefined;else if (o.attr) {
    res = o.attr('data-title');
    if (typeof res !== "string") res = undefined;
  } else if (typeof o.title === "string") res = o.title;
  return res;
};

var normalizeVariableData = function normalizeVariableData(data) {
  if (typeof data === "string") {
    data = data.trim();
    if (data.length === 0) return null;
    return {
      name: data,
      title: data
    };
  } else if (CompactDataGridEditor_typeof(data) === "object" && data) {
    data = Object.assign({}, data);
    if (typeof data.name !== "string" || data.name.trim().length === 0) return null;
    data.name = data.name.trim();
    if (typeof data.title !== "string" || data.title.trim().length === 0) data.title = data.name;
    return data;
  }

  return null;
};

var normalizeUsedVariable = function normalizeUsedVariable(data) {
  if (typeof data === "string") {
    data = data.trim();
    if (data.length === 0) return null;
    return {
      name: data
    };
  } else if (CompactDataGridEditor_typeof(data) === "object" && data) {
    data = Object.assign({}, data);
    if (typeof data.name !== "string" || data.name.trim().length === 0) return null;
    data.name = data.name.trim();
    if ('title' in data && typeof data.title !== "string") delete data.title;
    return data;
  }

  return null;
};

var variableDataOfElt = function variableDataOfElt(elt) {
  if (!elt.attr) return null;
  if (!elt.attr('data-default-title')) return null;
  var res = {};
  res.name = elt.attr('data-name');
  if (typeof res.name !== "string" || !res.name) return null;
  var title = elt.attr && elt.attr('data-title');
  if (typeof title === "string") res.title = title;
  return res;
};
/**
 * @extends AElement
 * @constructor
 */


function CompactDataGridEditor() {
  var _this = this;

  /**
   *
   * @type {CDGContext}
   */
  var context = {
    elt: this,
    grid: null,
    formatTool: null,
    varMng: null,
    selectCtrl: null,
    lcEmitter: new HTML5_EventEmitter()
  };
  context.grid = new CDGrid(context);
  context.selectCtrl = new CDSelectController(context);
  context.formatTool = new CDGFormatTool(context);
  context.varMng = new CDGVariableManager(context);
  HTML5_OOP.drillProperty(this, context.grid, 'data');
  HTML5_OOP.drillProperty(this, context.varMng, 'variables');
  context.lcEmitter.on(EV_CELL_DATA_CHANGE, function () {
    _this.emit('change', {
      type: 'change',
      target: _this
    }, _this);
  });
}
/**
 * @typedef CDGContext
 * @property {CompactDataGridEditor} elt
 * @property {CDGrid} grid
 * @property {CDGVariableManager} varMng
 * @property {CDGFormatTool} formatTool
 * @property {CDSelectController} selectCtrl
 * @property {EventEmitter} lcEmitter
 *
 */


CompactDataGridEditor.tag = 'CompactDataGridEditor'.toLowerCase();

CompactDataGridEditor.render = function () {
  return ACore_({
    attr: {
      tabindex: 1
    },
    extendEvent: ['change'],
    "class": 'as-compact-data-grid-editor',
    child: [{
      tag: 'table',
      "class": 'as-cdg-table',
      child: {
        tag: 'tbody',
        child: []
      }
    }]
  });
};

CompactDataGridEditor.prototype.revokeResource = function () {
  revokeResource(this.grid);
  revokeResource(this.varMng);
  this.grid = undefined;
  this.varMng = undefined;
};

absol_acomp_ACore.install(CompactDataGridEditor);
/* harmony default export */ const js_CompactDataGridEditor = (CompactDataGridEditor);
/**
 *
 * @param  context
 * @constructor
 */

function CDGrid(context) {
  this.context = context;
  /**
   * @type {CompactDataGridEditor}
   */

  this.elt = context.elt;
  this.$body = ACore_$('tbody', this.elt);
}

CDGrid.prototype.makeCell = function (data) {
  var _this2 = this;

  var variables = data.variables || [];
  var attr = {};

  if (isNaturalNumber(data.rowSpan) && data.rowSpan > 1) {
    attr.rowspan = data.rowSpan;
  } else if (isNaturalNumber(data.rowspan) && data.rowspan > 1) {
    attr.rowspan = data.rowspan;
  }

  if (isNaturalNumber(data.colSpan) && data.colSpan > 1) {
    attr.colspan = data.colSpan;
  } else if (isNaturalNumber(data.colspan) && data.colspan > 1) {
    attr.colspan = data.colspan;
  }

  return ACore_({
    tag: 'td',
    attr: attr,
    "class": 'as-ca-cell',
    child: variables.map(function (it) {
      it = normalizeUsedVariable(it);
      var name = it.name;
      return _this2.context.varMng.pickVariable(name);
    })
  });
};

CDGrid.prototype.makeRow = function (data) {
  var _this3 = this;

  var cells = data.cells || [];
  return ACore_({
    tag: 'tr',
    "class": 'as-ca-row',
    child: cells.map(function (it) {
      return _this3.makeCell(it);
    })
  });
};

CDGrid.prototype.updateCellLoc = function () {
  var row, cell;
  var body = this.$body;
  var height = Array(100).fill(0);
  var jj, loc;

  for (var i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];
    jj = 0;

    for (var j = 0; j < row.childNodes.length; ++j) {
      cell = row.childNodes[j];
      loc = locOfCell(cell);

      while (height[jj] > i) {
        jj++;
      }

      cell.attr('data-loc', i + ',' + jj);

      for (var k = 0; k < loc[3]; ++k) {
        height[jj + k] = i + loc[2];
      }

      jj += loc[3];
    }
  }

  var nCol = height.indexOf(0);
  height = [];
  this.$body.attr('data-width', nCol);
  return nCol;
};

CDGrid.prototype.getSize = function () {
  return {
    width: parseInt(this.$body.attr('data-width'), 10),
    height: this.$body.childNodes.length
  };
};

CDGrid.prototype.fixRowLength = function (rowLength) {
  rowLength = rowLength || 1;
  var row, cell;
  var body = this.$body;
  var height = Array(100).fill(0);
  var jj, colspan, rowspan;

  for (var i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];
    jj = 0;

    for (var j = 0; j < row.childNodes.length; ++j) {
      cell = row.childNodes[j];
      colspan = parseInt(cell.attr('colspan'), 10) || 1;
      rowspan = parseInt(cell.attr('rowspan'), 10) || 1;

      while (height[jj] > i) {
        jj++;
      }

      for (var k = 0; k < colspan; ++k) {
        height[jj + k] = i + rowspan;
      }

      jj += colspan;
    }

    for (j = jj; j < rowLength; ++j) {
      row.addChild(this.makeCell({}).attr('data-loc', i + ',' + j));
      height[j] = i + 1;
    }
  }

  height = [];
};

CDGrid.prototype.getCellsFromLoc = function (loc) {
  var row, cell, cellLoc;
  var res = [];
  var body = this.$body;

  for (var i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];

    for (var j = 0; j < row.childNodes.length; ++j) {
      cell = row.childNodes[j];
      cellLoc = locOfCell(cell);
      if (locCollapse(cellLoc, loc)) res.push(cell);
    }
  }

  var newLoc = locOfCells(res);
  if (!locEqual(newLoc, loc)) res = this.getCellsFromLoc(newLoc);
  return res;
};

CDGrid.prototype.addRowAt = function (newRowIdx) {
  var height = Array(50).fill(0);
  var row, cell, jj;
  var body = this.$body;
  var loc;
  if (body.firstChild && body.firstChild.lastChild) loc = locOfCell(body.firstChild.lastChild);else loc = [0, 0, 1, 1];
  var rowLength = loc[1] + loc[3];

  for (var i = 0; i < body.childNodes.length; ++i) {
    if (i === newRowIdx) {
      row = this.makeRow({
        cell: []
      });
      body.addChildBefore(row, body.childNodes[i]);
      jj = 0;

      while (jj < rowLength) {
        while (height[jj] > newRowIdx) {
          jj++;
        }

        row.addChild(this.makeCell({}));
        height[jj] = i + 1;
        jj++;
      }

      ++i;
    }

    row = body.childNodes[i];
    jj = 0;

    for (var j = 0; j < row.childNodes.length; ++j) {
      while (height[jj] > i + 1) {
        jj++;
      }

      cell = row.childNodes[j];
      loc = locOfCell(cell);

      if (i <= newRowIdx && i + loc[2] > newRowIdx) {
        loc[2]++;
        cell.attr('rowspan', loc[2]);
      }

      for (var k = 0; k < loc[3]; ++k) {
        height[jj + k] = i + loc[2];
      }

      jj += loc[3];
    }
  }

  if (newRowIdx === body.childNodes.length) {
    row = this.makeRow({
      cell: []
    });
    body.addChild(row);
    jj = 0;

    while (jj < rowLength) {
      while (height[jj] > newRowIdx) {
        jj++;
      }

      row.addChild(this.makeCell({}));
      jj++;
    }
  }

  this.updateCellLoc();
};

CDGrid.prototype.addColAt = function (newColIdx) {
  var height = Array(50).fill(0);
  var row, cell, jj;
  var body = this.$body;
  var colspan, rowspan;

  for (var i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];
    jj = 0;

    for (var j = 0; j < row.childNodes.length; ++j) {
      while (height[jj] > i) {
        jj++;
      }

      cell = row.childNodes[j];
      colspan = parseInt(cell.getAttribute('colspan'), 10) || 1;
      rowspan = parseInt(cell.getAttribute('rowspan'), 10) || 1;

      if (jj === newColIdx) {
        row.addChildBefore(this.makeCell({}), cell);
        height[jj] = i + 1;
        j++;
        jj++;
      } else if (jj <= newColIdx && jj + colspan > newColIdx) {
        colspan++;
        cell.attr('colspan', colspan);
      }

      height[jj] = i + rowspan;
      jj += colspan;
    }

    if (jj === newColIdx) {
      row.addChild(this.makeCell({}));
      height[jj] = i + 1;
    }
  }

  this.updateCellLoc();
};
/**
 *
 * @param rowIdx
 * @param {number=} rowHeight
 */


CDGrid.prototype.removeRowAt = function (rowIdx, rowHeight) {
  if (!isNaturalNumber(rowHeight)) rowHeight = 1;
  rowHeight = rowHeight || 1;
  var body = this.$body;
  var row, cell;
  var loc;
  var rmLoc = [rowIdx, 0, rowHeight, 100];
  var needSplitLocs = [];
  var needSplitCells = [];
  var childSplitCells = [];
  var i, j;

  for (i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];

    for (j = 0; j < row.childNodes.length; ++j) {
      cell = row.childNodes[j];
      loc = locOfCell(cell);

      if ((loc[2] > 1 || loc[3] > 1) && locCollapse(rmLoc, loc) && !locInLoc(loc, rmLoc)) {
        needSplitLocs.push(loc);
        needSplitCells.push(cell);
        childSplitCells.push(Array.prototype.slice.call(cell.childNodes));
      }
    }
  }

  for (i = 0; i < needSplitCells.length; ++i) {
    this.splitCell(needSplitCells[i]);
    loc = needSplitLocs[i];

    if (loc[0] < rowIdx) {
      if (loc[0] + loc[2] <= rowIdx + rowHeight) {
        loc[2] = rowIdx - loc[0];
      } else {
        loc[2] -= rowHeight;
      }
    } else {
      loc[2] -= rowIdx + rowHeight - loc[0];
    }
  }

  for (i = rowIdx + rowHeight - 1; i >= rowIdx; --i) {
    body.childNodes[i].remove();
  }

  this.updateCellLoc();
  var cells;

  for (i = 0; i < needSplitLocs.length; ++i) {
    loc = needSplitLocs[i];
    cells = this.getCellsFromLoc(loc);
    cells[0].addChild(childSplitCells[i]);
    this.mergeCells(cells);
  }

  this.updateCellLoc();
};
/**
 *
 * @param colIdx
 * @param {number=} colWidth
 */


CDGrid.prototype.removeColAt = function (colIdx, colWidth) {
  if (!isNaturalNumber(colWidth)) colWidth = 1;
  colWidth = colWidth || 1;
  var body = this.$body;
  var row, cell;
  var loc;
  var rmLoc = [0, colIdx, 100, colWidth];
  var needSplitLocs = [];
  var needSplitCells = [];
  var childSplitCells = [];
  var i, j;

  for (i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];

    for (j = 0; j < row.childNodes.length; ++j) {
      cell = row.childNodes[j];
      loc = locOfCell(cell);

      if ((loc[2] > 1 || loc[3] > 1) && locCollapse(rmLoc, loc) && !locInLoc(loc, rmLoc)) {
        needSplitLocs.push(loc);
        needSplitCells.push(cell);
        childSplitCells.push(Array.prototype.slice.call(cell.childNodes));
      }
    }
  }

  for (i = 0; i < needSplitCells.length; ++i) {
    this.splitCell(needSplitCells[i]);
    loc = needSplitLocs[i];

    if (loc[1] < colIdx) {
      if (loc[1] + loc[3] <= colIdx + colWidth) {
        loc[3] = colIdx - loc[1];
      } else {
        loc[3] -= colWidth;
      }
    } else {
      loc[3] -= colIdx + colWidth - loc[1];
    }
  }

  var cells = this.getCellsFromLoc(rmLoc);
  cells.forEach(function (cell) {
    return cell.remove();
  });
  this.updateCellLoc();

  for (i = 0; i < needSplitLocs.length; ++i) {
    loc = needSplitLocs[i];
    cells = this.getCellsFromLoc(loc);
    cells[0].addChild(childSplitCells[i]);
    this.mergeCells(cells);
  }

  this.updateCellLoc();
};

CDGrid.prototype.mergeCells = function (cells) {
  var loc = locOfCells(cells);
  var cell0 = cells[0];
  cell0.attr({
    rowspan: loc[2],
    colspan: loc[3]
  });

  for (var i = 1; i < cells.length; ++i) {
    cell0.addChild($$('.as-cag-var', cells[i]));
    cells[i].remove();
  }

  this.updateCellLoc();
};

CDGrid.prototype.splitCell = function (originalCell) {
  // var originalLoc = locOfCell(originalCell);
  var height = Array(100).fill(0);
  var loc;
  var body = this.$body;
  var size = this.getSize();
  loc = [0, 0, size.height, size.width];
  var rowLength = loc[1] + loc[3];
  originalCell.attr('rowspan', undefined);
  originalCell.attr('colspan', undefined);
  var row, cell;
  var jj;

  for (var i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];
    jj = 0;

    while (height[jj] > i) {
      ++jj;
    }

    for (var j = 0; j < row.childNodes.length; ++j) {
      cell = row.childNodes[j];
      loc = locOfCell(cell);

      while (jj < loc[1]) {
        row.addChildBefore(this.makeCell({}), cell);
        height[jj] = i + 1;
        ++jj;
        ++j;
      }

      for (var k = 0; k < loc[3]; ++k) {
        height[jj + k] = i + loc[2];
      }

      jj += loc[3];

      while (height[jj] > i) {
        ++jj;
      }
    }

    while (jj < rowLength) {
      row.addChild(this.makeCell({}));
      height[jj] = i + 1;
      ++jj;
      ++j;
    }
  }

  this.updateCellLoc();
};
/**
 * @typedef CDGData
 * @property {CDGDataRow[]}
 */

/**
 * @typedef CDGDataRow
 * @property {CDGDataCell[]}
 */

/**
 * @typedef CDGDataCell
 * @property {{}} style
 * @property {string} text
 */


Object.defineProperty(CDGrid.prototype, 'data', {
  set: function set(value) {
    var _this4 = this;

    this.$body.clearChild();
    var rows = value && value.rows || [];
    if (rows.length === 0) rows.push({
      cells: [{}]
    });
    this.$body.addChild(rows.map(function (it) {
      return _this4.makeRow(it);
    }));
    var nCol = this.updateCellLoc();
    this.fixRowLength(nCol);
  },
  get: function get() {
    var res = {};
    res.rows = Array.prototype.map.call(this.$body.childNodes, function (rowElt) {
      var rowData = {};
      rowData.cells = Array.prototype.map.call(rowElt.childNodes, function (cellElt) {
        var cellData = {};
        var variables = $$('.as-cag-var', cellElt).map(function (varElt) {
          return variableDataOfElt(varElt);
        }).filter(function (x) {
          return !!x;
        });
        if (variables.length > 0) cellData.variables = variables;
        var loc = locOfCell(cellElt);
        if (loc[2] > 1) cellData.rowSpan = loc[2];
        if (loc[3] > 1) cellData.colSpan = loc[3];
        return cellData;
      });
      return rowData;
    });
    return res;
  }
});
/**
 *
 * @param {CDGContext} context
 * @constructor
 */

function CDSelectController(context) {
  var _this5 = this;

  this.context = context;
  this.elt = context.elt;
  this.lcEmitter = context.lcEmitter;
  Object.keys(this.constructor.prototype).filter(function (k) {
    return k.startsWith('ev_');
  }).forEach(function (key) {
    return _this5[key] = _this5[key].bind(_this5);
  });
  this.selectedCells = [];

  ACore_({
    tag: 'hanger',
    elt: this.context.grid.$body,
    on: {
      draginit: this.ev_dragInit,
      drag: this.ev_drag,
      dragdeinit: this.ev_dragDeinit
    }
  });
}

CDSelectController.prototype.cellOf = function (o) {
  while (o) {
    if (o.hasClass && o.hasClass('as-ca-cell')) return o;
    o = o.parentElement;
  }

  return null;
};
/**
 *
 * @param {Vec2} pos
 */


CDSelectController.prototype.cellOfScreenPos = function (pos) {
  var row, cell, bound;
  var body = this.context.grid.$body;

  for (var i = 0; i < body.childNodes.length; ++i) {
    row = body.childNodes[i];

    for (var j = 0; j < row.childNodes.length; ++j) {
      cell = row.childNodes[j];
      bound = Math_Rectangle.fromClientRect(cell.getBoundingClientRect());
      if (bound.containsPoint(pos)) return cell;
    }
  }

  return null;
};

CDSelectController.prototype.ev_dragInit = function (event) {
  var cell = null;

  if (event.target.hasClass && event.target.hasClass('as-ca-cell')) {
    cell = event.target;
  }

  this.startingCell = cell;
  this.mouseDownCell = this.cellOf(event.target);
  this.hoveringCells = [];
};

CDSelectController.prototype.ev_drag = function (event) {
  if (!this.startingCell) return;
  var curCell = this.cellOfScreenPos(event.currentPoint);
  if (!curCell) return;
  var startingLoc = locOfCell(this.startingCell);
  var endingLoc = locOfCell(curCell);
  var selectedLoc = mergeLoc(startingLoc, endingLoc);
  this.hoveringCells.forEach(function (cell) {
    cell.removeClass('as-hovering');
  });
  this.hoveringCells = this.context.grid.getCellsFromLoc(selectedLoc);
  this.hoveringCells.forEach(function (cell) {
    cell.addClass('as-hovering');
  });
};

CDSelectController.prototype.ev_dragDeinit = function (event) {
  this.hoveringCells.forEach(function (cell) {
    cell.removeClass('as-hovering');
  });

  if (this.hoveringCells.length > 0) {
    this.selectCells(this.hoveringCells);
  } else if (this.cellOf(event.target) === this.mouseDownCell) {
    this.selectCells([this.mouseDownCell]);
  }

  this.hoveringCells = null;
  this.hoveringCells = [];
};

CDSelectController.prototype.selectCells = function (cells) {
  this.selectedCells.forEach(function (cell) {
    return cell.removeClass('as-selected');
  });
  this.selectedCells = cells.slice();
  this.selectedCells.forEach(function (cell) {
    return cell.addClass('as-selected');
  });
  var focsVar = ACore_$('td.as-selected .as-cag-var.as-focus', this.elt);

  if (!focsVar) {
    focsVar = ACore_$('td.as-selected .as-cag-var', this.elt);
    this.context.varMng.focus(focsVar || null);
  }

  this.lcEmitter.emit(EV_SELECTED_CELL_CHANGE);
};
/**
 *
 * @param  context
 * @constructor
 */


function CDGVariableManager(context) {
  var _this6 = this;

  this.context = context;
  this.elt = context.elt;
  this.lcEmitter = context.lcEmitter;
  /**
   *
   * @type {CDGrid}
   */

  this.grid = context.grid;
  this.createView();
  this._variables = [];
  this.variableDict = {};
  this.pickedVariables = {};
  this.availableVariables = {};
  Object.keys(this.constructor.prototype).filter(function (k) {
    return k.startsWith('ev_');
  }).forEach(function (key) {
    return _this6[key] = _this6[key].bind(_this6);
  });
  this.focusVariable = null;
}

CDGVariableManager.prototype.focus = function (varElt) {
  if (this.focusVariable) {
    this.focusVariable.removeClass('as-focus');
  }

  this.focusVariable = varElt;

  if (this.focusVariable) {
    this.focusVariable.addClass('as-focus');
  }
};

CDGVariableManager.revokeResource = function () {
  this.elt = undefined;
  this.grid = undefined;
};

CDGVariableManager.prototype.createView = function () {
  this.$varMng = ACore_({
    "class": 'as-cag-var-mng',
    child: []
  });
  this.elt.addChildAfter(this.$varMng, this.context.formatTool.$tool);
};
/**
 *
 * @param {string} name
 * @returns {*}
 */


CDGVariableManager.prototype.makeVariable = function (name) {
  var _this7 = this;

  var info = this.variableDict[name];

  var elt = ACore_({
    tag: 'hanger',
    "class": 'as-cag-var',
    attr: {
      'data-name': name
    },
    child: [// { tag: 'span', child: { text: name } }
    ],
    props: {
      hangOn: 3
    },
    on: {
      dragstart: this.ev_dragStart,
      dragend: this.ev_dragEnd,
      drag: this.ev_drag,
      click: function click() {
        _this7.focus(elt);
      }
    }
  });

  if (typeof data.title === "string") {
    elt.attr('data-title', data.title);
  }

  if (info) {
    elt.attr('data-default-title', info.title);
  }

  return elt;
};

CDGVariableManager.prototype.pickVariable = function (name) {
  if (this.availableVariables[name]) {
    this.pickedVariables[name] = this.availableVariables[name];
    delete this.availableVariables[name];
  } else {
    this.pickedVariables[name] = this.makeVariable(name);
  }

  return this.pickedVariables[name];
};

CDGVariableManager.prototype.rejectVariable = function (name) {
  if (this.pickedVariables[name]) {
    this.availableVariables[name] = this.pickedVariables[name];
    delete this.pickedVariables[name];
  }

  this.$varMng.addChild(this.availableVariables[name]);
  return this.availableVariables[name];
};

CDGVariableManager.prototype.variableElementOf = function (o) {
  var name = varNameOf(o);
  if (name === "string") return this.availableVariables[o] || this.pickedVariables[o];

  if (Dom_isDomNode(o)) {
    while (o) {
      if (o.hasClass && o.hasClass('as-cag-var')) {
        return o;
      }

      o = o.parentElement;
    }
  }

  return null;
};

CDGVariableManager.prototype.findVariableLocation = function (rect) {
  var cells = $$('.as-ca-cell', this.grid.$body);
  var best = 0;
  var cellRect;
  var bestCell;
  var square;
  var i;

  for (i = 0; i < cells.length; ++i) {
    cellRect = Math_Rectangle.fromClientRect(cells[i].getBoundingClientRect());
    square = rect.collapsedSquare(cellRect);

    if (square > best) {
      bestCell = cells[i];
    }
  }

  var res = {
    "in": null
  };

  if (bestCell) {
    res["in"] = bestCell;
  } else {
    res["in"] = null;
  }

  var varEltList, varElt, varBound;

  if (res["in"]) {
    varEltList = $$('.as-cag-var', res["in"]);

    for (i = varEltList.length - 1; i >= 0; --i) {
      varElt = varEltList[i];
      varBound = Math_Rectangle.fromClientRect(varElt.getBoundingClientRect());

      if (varBound.centerPoint().x < rect.centerPoint().x) {
        res.bf = varElt;
      }
    }
  }

  return res;
};
/**
 *
 * @param {AElement=} elt
 */


CDGVariableManager.prototype.openEditVariableDialog = function (elt) {
  var _this8 = this;

  elt = elt || this.focusVariable;
  if (!elt) return;

  var flushData = function flushData() {
    var newTile = checkbox.checked ? undefined : titleInput.value;
    var oldTile = elt.attr('data-title');
    if (typeof oldTile !== "string") oldTile = undefined;

    if (newTile !== oldTile) {
      elt.attr('data-title', newTile);

      _this8.lcEmitter.emit(EV_CELL_DATA_CHANGE);
    }
  };

  var finish = function finish() {
    flushData();

    _cancel();
  };

  var _cancel = function cancel() {
    document.removeEventListener('click', clickOut);
    elt = null;
    follower.followTarget = null;
    follower.clearChild();
    follower.remove();
    HTML5_ResizeSystem.removeTrash();
    finish = undefined;
    _cancel = undefined;
    clickOut = undefined;
  };

  var clickOut = function clickOut(event) {
    if (hitElement(follower, event)) return;

    _cancel();
  };

  setTimeout(function () {
    document.addEventListener('click', clickOut);
  }, 100);

  var checkboxUpdate = function checkboxUpdate() {
    if (checkbox.checked) {
      titleInput.disabled = true;
      titleInput.savedData = titleInput.value;
      titleInput.value = '';
    } else {
      titleInput.disabled = false;
      titleInput.value = titleInput.value || titleInput.savedData || '';
    }
  };

  var follower = ACore_({
    tag: js_Follower,
    "class": ['as-dropdown-box-common-style', 'as-cdg-variable-edit-dialog'],
    style: {
      zIndex: findMaxZIndex(elt) + 10
    },
    child: [{
      style: {
        fontWeight: 'bold',
        padding: '10px 5px'
      },
      child: {
        text: 'Tiêu đề'
      }
    }, {
      "class": 'as-table-grid',
      child: [{
        "class": 'as-table-grid-row',
        child: [{
          "class": 'as-table-grid-cell',
          child: {
            tag: 'span',
            child: {
              text: 'Mặc định'
            }
          }
        }, {
          "class": 'as-table-grid-cell',
          child: {
            tag: 'checkboxinput',
            props: {
              checked: typeof elt.attr('data-title') !== "string"
            },
            on: {
              change: checkboxUpdate
            }
          }
        }]
      }, {
        "class": 'as-table-grid-row',
        child: [{
          "class": 'as-table-grid-cell',
          child: {
            tag: 'span',
            child: {
              text: 'Giá trị'
            }
          }
        }, {
          "class": 'as-table-grid-cell',
          child: {
            tag: 'input',
            attr: {
              type: 'text'
            },
            props: {
              value: elt.attr('data-title') || ''
            },
            "class": 'as-text-input'
          }
        }]
      }]
    }, {
      style: {
        textAlign: 'center',
        padding: '10px'
      },
      child: [{
        tag: 'flexiconbutton',
        props: {
          text: 'Xác nhận'
        },
        style: {
          marginRight: '20px'
        },
        on: {
          click: finish
        }
      }, {
        tag: 'flexiconbutton',
        props: {
          text: 'Hủy'
        },
        on: {
          click: _cancel
        }
      }]
    }],
    props: {
      followTarget: elt
    }
  }).addTo(document.body);

  var checkbox = ACore_$('checkboxinput', follower);
  var titleInput = ACore_$('input[type="text"]', follower);
  checkboxUpdate();
};

CDGVariableManager.prototype.ev_dragStart = function (event) {
  var varElt = this.variableElementOf(event.target);
  var eltBound = varElt.getBoundingClientRect();
  var offset = event.currentPoint.sub(new Math_Vec2(eltBound.left, eltBound.top));
  this.draggingElt = varElt;
  this.dragOffset = offset;
  this.clonedElt = ACore_$(varElt.cloneNode(true)).addStyle({
    position: 'fixed',
    zIndex: findMaxZIndex(varElt) + 2,
    left: eltBound.left + 'px',
    top: eltBound.top + 'px'
  }).addTo(document.body);
  varElt.addStyle('opacity', 0.5);
  this.hoverCell = null;
};

CDGVariableManager.prototype.ev_drag = function (event) {
  var newPos = event.currentPoint.sub(this.dragOffset);
  this.clonedElt.addStyle({
    left: newPos.x + 'px',
    top: newPos.y + 'px'
  });
  var pointerRect = new Math_Rectangle(event.currentPoint.x - 10, event.currentPoint.y - 10, 20, 20);
  this.newLocation = this.findVariableLocation(pointerRect);

  if (this.newLocation) {
    if (this.newLocation["in"] && this.newLocation["in"] !== this.hoverCell) {
      if (this.hoverCell) this.hoverCell.removeClass('as-drag-over');
      this.hoverCell = this.newLocation["in"];
      this.hoverCell.addClass('as-drag-over');
    }
  } else {
    if (this.hoverCell) this.hoverCell.removeClass('as-drag-over');
  }
};

CDGVariableManager.prototype.ev_dragEnd = function () {
  this.draggingElt.removeStyle('opacity');
  this.clonedElt.remove();
  if (this.hoverCell) this.hoverCell.removeClass('as-drag-over');
  var name = this.draggingElt.attr('data-name');
  var newLocation = this.newLocation;

  if (newLocation && newLocation["in"]) {
    if (this.draggingElt.parentElement !== this.newLocation["in"]) {
      this.newLocation["in"].addChild(this.draggingElt);
      this.pickVariable(name);
      this.context.selectCtrl.selectCells([this.newLocation["in"]]);
      this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
    }
  } else {
    if (this.draggingElt.parentElement !== this.$varMng) {
      this.rejectVariable(name);
      this.$varMng.addChild(this.draggingElt);
      this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
    }
  }
};

CDGVariableManager.prototype.updateVariableInfo = function () {
  var i, elt;
  var varInfo;

  for (i in this.availableVariables) {
    elt = this.availableVariables[i];
    varInfo = this.variableDict[i];
    if (varInfo) elt.attr('data-default-title', varInfo.title);
  }

  for (i in this.pickedVariables) {
    elt = this.pickedVariables[i];
    varInfo = this.variableDict[i];
    if (varInfo) elt.attr('data-default-title', varInfo.title);
  }

  for (i = 0; i < this._variables.length; ++i) {
    varInfo = this._variables[i];
    if (this.pickedVariables[varInfo.name] || this.availableVariables[varInfo.name]) continue;
    this.availableVariables[varInfo.name] = this.makeVariable(varInfo.name);
    this.$varMng.addChild(this.availableVariables[varInfo.name]);
  }
}; /// nếu không c trong danh sách thì tự bỏ ra


Object.defineProperty(CDGVariableManager.prototype, 'variables', {
  set: function set(variables) {
    if (!Array.isArray(variables)) variables = [];
    variables = variables.map(function (v) {
      return normalizeVariableData(v);
    }).filter(function (x) {
      return !!x;
    });
    var t = variables.reduce(function (ac, cr) {
      if (!ac.dict[cr.name]) {
        ac.dict[cr.name] = cr;
        ac.arr.push(cr);
      }

      return ac;
    }, {
      arr: [],
      dict: {}
    });
    this._variables = t.arr;
    this.variableDict = t.dict;
    this.updateVariableInfo(); //
    // this.availableVariables = {};
    // this.$varMng.clearChild();
  },
  get: function get() {
    return this._variables;
  }
});
/**
 *
 * @param {CDGContext} context
 * @constructor
 */

function CDGFormatTool(context) {
  var _this9 = this;

  this.context = context;
  this.grid = context.grid;
  this.elt = context.elt;
  this.lcEmitter = context.lcEmitter;
  Object.keys(this.constructor.prototype).filter(function (k) {
    return k.startsWith('ev_');
  }).forEach(function (k) {
    return _this9[k] = _this9[k].bind(_this9);
  });
  this.$tool = ACore_({
    "class": 'as-table-of-text-input-tool',
    child: [{
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-column-plus-before',
      attr: {
        'data-command': 'left'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-column-plus-after',
      attr: {
        'data-command': 'right'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-row-plus-before',
      attr: {
        'data-command': 'above'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      child: 'span.mdi.mdi-table-row-plus-after',
      attr: {
        'data-command': 'bellow'
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command', 'as-variant-danger'],
      attr: {
        'data-command': 'removeCol'
      },
      child: {
        tag: 'span',
        "class": ['mdi', 'mdi-table-column-remove']
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command', 'as-variant-danger'],
      attr: {
        'data-command': 'removeRow'
      },
      child: {
        tag: 'span',
        "class": ['mdi', 'mdi-table-row-remove']
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      //can checked
      attr: {
        'data-command': 'merge'
      },
      child: {
        tag: 'span',
        "class": ['mdi', 'mdi-table-merge-cells']
      }
    }, {
      tag: 'button',
      "class": ['as-transparent-button', 'as-table-of-text-input-tool-command'],
      attr: {
        'data-command': 'edit_variable'
      },
      child: {
        tag: 'span',
        "class": ['mdi', 'mdi-tag-edit-outline']
      }
    }]
  });
  this.elt.addChildAfter(this.$tool, null);
  this.$commandBtns = $$('.as-table-of-text-input-tool-command', this.$tool).reduce(function (ac, btn) {
    var value = btn.attr('data-command');
    btn.on('click', function (ev) {
      _this9.commands[value].exec.call(_this9); // this.ev_clickInsert(value, ev);

    });
    ac[value] = btn;
    return ac;
  }, {});
  this.updateAvailableCommands();
  this.lcEmitter.on(EV_SELECTED_CELL_CHANGE, this.updateAvailableCommands.bind(this));
}

CDGFormatTool.prototype.updateAvailableCommands = function () {
  var _this10 = this;

  Object.values(this.$commandBtns).forEach(function (btn) {
    var name = btn.attr('data-command');

    if (_this10.commands[name] && _this10.commands[name].available) {
      btn.disabled = !_this10.commands[name].available.call(_this10);
    }

    if (_this10.commands[name] && _this10.commands[name].checked) {
      if (_this10.commands[name].checked.call(_this10)) {
        btn.addClass('as-checked');
      } else {
        btn.removeClass('as-checked');
      }
    }
  });
};

CDGFormatTool.prototype.addColAt = function (newColIdx) {
  this.grid.addColAt(newColIdx);
  this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};

CDGFormatTool.prototype.addRowAt = function (newRowIdx) {
  //todo: wrong
  this.grid.addRowAt(newRowIdx);
  this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};

CDGFormatTool.prototype.removeRowAt = function (rowIdx, rowHeight) {
  this.grid.removeRowAt(rowIdx, rowHeight);
  this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};

CDGFormatTool.prototype.removeColAt = function (rowIdx, colWidth) {
  this.grid.removeColAt(rowIdx, colWidth);
  this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};

CDGFormatTool.prototype.mergeCells = function (cells) {
  this.grid.mergeCells(cells);
  this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};

CDGFormatTool.prototype.splitCell = function (originalCell) {
  this.grid.splitCell(originalCell);
  this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};
/**
 * @this CDGFormatTool
 */


function hasSelectedCell() {
  var selectedCells = this.context.selectCtrl.selectedCells;
  return selectedCells.length > 0;
}

CDGFormatTool.prototype.commands = {
  left: {
    available: hasSelectedCell,

    /**
     * @this CDGFormatTool
     */
    exec: function exec() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return;
      var loc = locOfCells(selectedCells);
      var newColIdx = loc[1];
      this.addColAt(newColIdx);
    }
  },
  right: {
    available: hasSelectedCell,

    /**
     * @this CDGFormatTool
     */
    exec: function exec() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return;
      var loc = locOfCells(selectedCells);
      var newColIdx = loc[1] + loc[3];
      this.addColAt(newColIdx);
    }
  },
  above: {
    available: hasSelectedCell,

    /**
     * @this CDGFormatTool
     */
    exec: function exec() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return;
      var loc = locOfCells(selectedCells);
      var newRowIdx = loc[0];
      this.addRowAt(newRowIdx);
    }
  },
  bellow: {
    available: hasSelectedCell,

    /**
     * @this CDGFormatTool
     */
    exec: function exec() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return;
      var loc = locOfCells(selectedCells);
      var newRowIdx = loc[0] + loc[2];
      this.addRowAt(newRowIdx);
    }
  },
  removeRow: {
    available: function available() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return false;
      var loc = locOfCells(selectedCells);
      var size = this.context.grid.getSize();
      return loc[2] < size.height;
    },
    exec: function exec() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return;
      var loc = locOfCells(selectedCells);
      this.removeRowAt(loc[0], loc[2]);
      this.context.selectCtrl.selectCells([]);
    }
  },
  removeCol: {
    available: function available() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return false;
      var loc = locOfCells(selectedCells);
      var size = this.context.grid.getSize();
      return loc[3] < size.width;
    },
    exec: function exec() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return;
      var loc = locOfCells(selectedCells);
      this.removeColAt(loc[1], loc[3]);
      this.context.selectCtrl.selectCells([]);
    }
  },
  merge: {
    checked: function checked() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (selectedCells.length !== 1) return false;
      var loc = locOfCells(selectedCells);
      return loc[2] > 1 || loc[3] > 1;
    },
    available: function available() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return false;
      var loc = locOfCells(selectedCells);
      return loc[2] > 1 || loc[3] > 1;
    },
    exec: function exec() {
      var selectedCells = this.context.selectCtrl.selectedCells;
      if (!selectedCells.length) return false;
      var loc = locOfCells(selectedCells);
      var isMerged = selectedCells.length === 1 && (loc[2] > 1 || loc[3] > 1);
      if (isMerged) this.splitCell(selectedCells[0]);else this.mergeCells(selectedCells);
      selectedCells = this.context.grid.getCellsFromLoc(loc);
      this.context.selectCtrl.selectCells(selectedCells);
    }
  },
  edit_variable: {
    /**
     * @this CDGFormatTool
     */
    available: function available() {
      var fv = this.context.varMng && this.context.varMng.focusVariable;
      return !!(fv && fv.isDescendantOf(this.elt));
    },

    /**
     * @this CDGFormatTool
     */
    exec: function exec() {
      this.context.varMng.openEditVariableDialog();
    }
  }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dom/install.js











































































































































































var publicCreators = [MdiStoreMarkerOutline, js_AutoCompleteInput, js_BoardTable, js_Board, js_BScroller, js_ButtonArray, js_ButtonRange, js_CalendarInput, OldCalendarInput, CheckBoxInput, js_CheckBox, CheckboxButton, js_CheckListItem, js_CheckListBox, js_CheckTreeLeafOnlyBox, js_ChromeCalendar, js_ChromeTimePicker, js_ChromeTime24Picker, js_CircleSectionLabel, js_CountdownClock, js_CountdownText, js_DateInYearPicker, js_DateInYearInput, js_DateTimeInput, js_DropZone, js_ExpressionInput, js_IdentTextInput, js_EmojiPickerTooltip, js_FileInputBox, js_FileListItem, js_FileListInput, finder_Finder, Scrollbar, VScrollbar, HScrollbar, VScroller, HScroller, ContextMenu, HMenu, VMenuItem, VMenu, Dropright, VMenuLine, Dropdown, HMenuItem, VMenu, VRootMenu, MenuButton, js_DateInput2, js_DateNLevelInput, 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_LinearColorTinyBar, js_MediaInput, messageinput_MessageInput, MessageQuote, js_Modal, js_LoadingCubeModal, numberinput_NumberInput, js_NumberSpanInput, OnsScreenWindow, js_OnScreenWidget, js_PageIndicator, js_PageSelector, js_PreInput, js_ProgressBar, js_ProgressCircle, js_QuickListButton, js_QuickMenu, js_QuickPath, js_PathMenu, 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_MultiCheckTreeLeafBox, Detector_BrowserDetector.isMobile ? multichecktreeleafmenu_MultiCheckTreeLeafMenu : js_MultiCheckTreeLeafMenu, js_SelectBoxItem, js_DualSelectBox, Detector_BrowserDetector.isMobile ? dualselectmenu_DualSelectMenu : js_DualSelectMenu, js_SelectTable, js_SelectTable2, js_SelectTreeMenu, js_SelectTreeLeafBox,
/*BrowserDetector.isMobile ? SelectTreeLeafMenuV2 :*/
js_SelectTreeLeafMenu, js_SpanInput, Snackbar, js_StaticTabbar, js_Switch, tablescroller_TableScroller, js_TableVScroller, treetable_TreeTable, js_TextArea2, js_TextClipboard, js_TimeInput, js_Time24Input, js_TimeRange24Input, js_TimeSelectInput, js_TimePicker, js_DateTimeInput, Tooltip, js_CopyableIconTooltip, 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, js_MessageDialog, js_YesNoQuestionDialog, js_TOCItem, js_TOCList, ckeditor_CKPlaceholder, ckeditor_CKInlineShortText, js_VerticalTimeline, js_WindowBox, js_LocationView, js_LocationPicker, js_LocationInput, js_PlaceSearchAutoCompleteInput, js_MKNavigator, js_ProcessLBar, js_KVCommentItem, dynamictable_DynamicTable, js_EfficientTable, objectmergetool_ObjectMergeTool, tokenizeiput_TokenizeHyperInput, selectlistbox_SelectListBox, // MCheckTreeBox,
checktreeleafbox_MCheckTreeLeafBox, selecttreeleafbox_MSelectTreeLeafBox, dualselectbox_MDualSelectBox, js_TreeChart, js_TableOfTextInput, js_CompactDataGridEditor, mobile_MHeaderBar, MExploreSectionBreak, MExploreItemBlock, MExploreGroup, MSpringboardMenu, colorpicker_SolidColorPicker, colorpicker_ColorPickerButton, ColorCell, colorpicker_SelectColorSchemeMenu];
/***
 *
 * @param {Dom} core
 */

function install(core) {
  core.install(publicCreators);
  core.install('checkboxbutton', CheckBoxInput);
  core.install('selectbox', js_MultiSelectMenu);

  if (Detector_BrowserDetector.isMobile) {
    core.install('selectmenu', selectmenu_MSelectMenu);
    core.install('selecttreemenu', selecttreemenu_MSelectTreeMenu);
  }

  core.install('MSelectTreeLeafMenu'.toLowerCase(), js_SelectTreeLeafMenu);
  core.install('MMultiCheckTreeMenu'.toLowerCase(), js_MultiCheckTreeMenu);
  core.install('MMultiCheckTreeLeafMenu'.toLowerCase(), js_MultiCheckTreeLeafMenu);
}

/* 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,
  BlurTrigger: tool_BlurTrigger
};
window.runDebugTask = js_DebugTask.start.bind(js_DebugTask);
/* harmony default export */ const absol_acomp_AComp = (AComp);
;// 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);
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/ColorPicker.js



var ColorPicker_ = components_CPCore._;
var ColorPicker_$ = components_CPCore.$;

function ColorPicker_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_ColorPicker.defaultNumberInputHandle(res.$num0);
  ColorPicker_ColorPicker.defaultNumberInputHandle(res.$num1);
  ColorPicker_ColorPicker.defaultNumberInputHandle(res.$num2);
  ColorPicker_ColorPicker.defaultNumberInputHandle(res.$num3);
  res._num0LimitOption = ColorPicker_ColorPicker.numberInputHandleLimit(res.$num0, 0, 360);
  res._num1LimitOption = ColorPicker_ColorPicker.numberInputHandleLimit(res.$num1, 0, 100, 0);
  res._num2LimitOption = ColorPicker_ColorPicker.numberInputHandleLimit(res.$num2, 0, 100, 0);
  res._num3LimitOption = ColorPicker_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_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_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_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_ColorPicker.property = {};
ColorPicker_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_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_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_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_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_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_ColorPicker.property.value = {
  set: function set(value) {
    if (typeof value == 'string') {
      value = src_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 src_Color_Color.fromHSBA(this.hue, this.saturation, this.brightness, this.alpha);
  }
};
ColorPicker_ColorPicker.property.RGBA = {
  set: function set(value) {
    var hsba = src_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 = src_Color_Color.hsbaToRGBA([this.hue, this.saturation, this.brightness, this.alpha]);
    return rgba;
  }
};

ColorPicker_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_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_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_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 = src_Color_Color.hsbaToRGBA([h, s, b, 1]);
  return 'rgba(' + rgba.map(function (x, i) {
    return i < 3 ? x * 255 : x;
  }).join(',') + ')';
};

ColorPicker_ColorPicker.prototype.init = function (props) {
  this.RGBA = [1, 1, 1, 1];
  this["super"](props);
};

ColorPicker_ColorPicker.prototype._update = function () {
  //update vs
  var rgba = src_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 = src_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_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 = src_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_ColorPicker.eventHandler = {};

ColorPicker_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_ColorPicker.eventHandler.colorPointerFinish = function (event) {
  absol.$(document.body).off('pointermove', this.eventHandler.colorPointerMove).off('pointerup', this.eventHandler.colorPointerFinish).off('pointerleave', this.eventHandler.colorPointerFinish);
};

ColorPicker_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_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_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_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_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_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_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_ColorPicker.eventHandler.modeClick = function (event) {
  this.mode = this.switchMode[this.mode];
  event.preventDefault();
};

ColorPicker_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 : src_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_ColorPicker;
/* harmony default export */ const components_ColorPicker = ((/* unused pure expression or super */ null && (ColorPicker_ColorPicker)));
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/ColorPickerButton.js




var ColorPickerButton_ = components_CPCore._;
var ColorPickerButton_$ = components_CPCore.$;
var components_ColorPickerButton_isMobile = Detector_BrowserDetector.isMobile;

function ColorPickerButton_ColorPickerButton() {
  this.$innerValue = ColorPickerButton_$('.as-color-picker-button-inner-value', this);
  this.prepare();
  this.on('click', this.eventHandler.click);
}

ColorPickerButton_ColorPickerButton.tag = 'ColorPickerButton'.toLowerCase();

ColorPickerButton_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_ColorPickerButton.eventHandler = {};

ColorPickerButton_ColorPickerButton.eventHandler.click = function (event) {
  this.togglePicker();
};

ColorPickerButton_ColorPickerButton.eventHandler.changeColor = function (event) {
  this.$innerValue.addStyle("background-color", event.value.toString());
  this._value = event.value;
  this.emit('change', event, this);
};

ColorPickerButton_ColorPickerButton.eventHandler.clickBody = function (event) {
  if (HTML5_EventEmitter.hitElement(this, event) || HTML5_EventEmitter.hitElement(this.$ColorPicker, event) || this._isClickMenu(event)) return;
  this.closePicker();
};

ColorPickerButton_ColorPickerButton.eventHandler.submit = function (event) {
  this.closePicker();
};

ColorPickerButton_ColorPickerButton.prototype.togglePicker = function () {
  if (this.containsClass('as-color-picker-selecting')) {
    this.closePicker();
  } else {
    this.openPicker();
  }
};

ColorPickerButton_ColorPickerButton.prototype.openPicker = function () {
  if (this.containsClass('as-color-picker-selecting')) return;

  if (ColorPickerButton_ColorPickerButton.lastOpen) {
    ColorPickerButton_ColorPickerButton.lastOpen.closePicker();
  }

  ColorPickerButton_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_ColorPickerButton.$ColorPicker.value = this.value;
  setTimeout(function () {
    thisBt.$follower.removeStyle('visibility');
  }, 1); //10p
};

ColorPickerButton_ColorPickerButton.prototype.closePicker = function () {
  if (!this.containsClass('as-color-picker-selecting')) return;
  this.removeClass('as-color-picker-selecting');

  if (ColorPickerButton_ColorPickerButton.lastOpen === this) {
    ColorPickerButton_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_ColorPickerButton.prototype.prepare = function () {
  if (!ColorPickerButton_ColorPickerButton.$ColorPicker) {
    if (components_ColorPickerButton_isMobile) {
      ColorPickerButton_ColorPickerButton.$follower = ColorPickerButton_('modal').on('click', function (event) {
        if (event.tagert === this) {
          if (ColorPickerButton_ColorPickerButton.lastOpen) ColorPickerButton_ColorPickerButton.lastOpen.closePicker();
        }
      });
    } else {
      ColorPickerButton_ColorPickerButton.$follower = ColorPickerButton_('follower.as-color-picker-button-follower');
    }

    ColorPickerButton_ColorPickerButton.$ColorPicker = ColorPickerButton_({
      tag: 'solidcolorpicker'
    }).addTo(ColorPickerButton_ColorPickerButton.$follower);
    ColorPickerButton_ColorPickerButton.lastOpen = null;
  }

  this.$follower = ColorPickerButton_ColorPickerButton.$follower;
  this.$ColorPicker = ColorPickerButton_ColorPickerButton.$ColorPicker;
};

ColorPickerButton_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_ColorPickerButton.property = {};
ColorPickerButton_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_ColorPickerButton);
/* harmony default export */ const components_ColorPickerButton = (ColorPickerButton_ColorPickerButton);
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/SwatchesTable.js
function components_SwatchesTable_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { components_SwatchesTable_typeof = function _typeof(obj) { return typeof obj; }; } else { components_SwatchesTable_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return components_SwatchesTable_typeof(obj); }



var SwatchesTable_ = components_CPCore._;
var SwatchesTable_$ = components_CPCore.$;

function SwatchesTable_SwatchesTable() {
  this._data = [];
  this._poolCells = [];
  this._poolRows = [];
  this._dict = {};
}

SwatchesTable_SwatchesTable.tag = 'SwatchesTable'.toLowerCase();

SwatchesTable_SwatchesTable.render = function () {
  return SwatchesTable_({
    extendEvent: 'presscell',
    "class": 'as-swatches-table'
  });
};

SwatchesTable_SwatchesTable.prototype.getCell = function () {
  if (arguments.length == 1) {
    var key = arguments[0];

    if (key.toHex8) {
      key = key.toHex8();
    } else if (typeof key == 'string') {
      key = src_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_SwatchesTable.eventHandler = {};

SwatchesTable_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_SwatchesTable.property = {};
SwatchesTable_SwatchesTable.property.data = {
  set: function set(value) {
    this._dict = {};
    value = value || [[null]];

    if (typeof value == 'string') {
      value = {
        classic: SwatchesTable_MoqupsClassicSwathes,
        material: SwatchesTable_MaterialSwatches,
        bootstrap: SwatchesTable_BootstrapSwatches,
        ios: SwatchesTable_iOsSwatches,
        moqupsclassic: SwatchesTable_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 (components_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[src_Color_Color.parse(row[j].value + '').toHex8()] = rowElt.childNodes[j];
          } else {
            rowElt.childNodes[j].firstChild.removeStyle('background-color');
            this._dict[src_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[src_Color_Color.parse(row[j]).toHex8()] = rowElt.childNodes[j];
        }
      }
    }
  },
  get: function get() {
    return this._data;
  }
};
var SwatchesTable_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 SwatchesTable_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 SwatchesTable_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 SwatchesTable_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_SwatchesTable);
/* harmony default export */ const components_SwatchesTable = ((/* unused pure expression or super */ null && (SwatchesTable_SwatchesTable)));
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/components/SolidColorPicker.js




var SolidColorPicker_ = components_CPCore._;
var SolidColorPicker_$ = components_CPCore.$;

function SolidColorPicker_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 src_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 = [SwatchesTable_MoqupsClassicSwathes, SwatchesTable_MaterialSwatches, SwatchesTable_BootstrapSwatches, SwatchesTable_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_SolidColorPicker.tag = 'SolidColorPicker'.toLowerCase();

SolidColorPicker_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: SwatchesTable_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: SwatchesTable_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_SolidColorPicker._settingKey = "absol_solid_color_setting"; //only Hex6

SolidColorPicker_SolidColorPicker.setting = {
  recentColors: ['#ffffff', '#00ffff', '#0000ff', '#ffffff', '#000000']
};

SolidColorPicker_SolidColorPicker._loadSetting = function () {
  var setting = localStorage.getItem(SolidColorPicker_SolidColorPicker._settingKey);

  try {
    setting = JSON.parse(setting);
  } catch (e) {
    setting = {};
  }

  if (setting) {
    Object.assign(SolidColorPicker_SolidColorPicker.setting, setting);
  }
};

SolidColorPicker_SolidColorPicker._loadSetting();

SolidColorPicker_SolidColorPicker._writeSetting = function () {
  localStorage.setItem(SolidColorPicker_SolidColorPicker._settingKey, JSON.stringify(SolidColorPicker_SolidColorPicker.setting));
  SolidColorPicker_SolidColorPicker.updateInstancesSetting();
};

SolidColorPicker_SolidColorPicker.pushInstances = function (elt) {
  var instances = SolidColorPicker_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_SolidColorPicker.updateInstancesSetting = function () {
  var instances = SolidColorPicker_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_SolidColorPicker.$instances = [];
/**
 * @param {Color} color
 */

SolidColorPicker_SolidColorPicker.pushColorHistory = function (color) {
  var hex6Color = color.toString('hex6');
  var recentColors = SolidColorPicker_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_SolidColorPicker._writeSetting.bind(SolidColorPicker_SolidColorPicker), 1);
};

SolidColorPicker_SolidColorPicker.prototype.reloadSetting = function () {
  var recentColors = SolidColorPicker_SolidColorPicker.setting.recentColors.slice();
  var swatches = [];

  while (recentColors.length > 0) {
    swatches.push(recentColors.splice(0, 12));
  }

  this.$recentSwatchesTable.data = swatches;

  this._autoAdDotToCell();
};

SolidColorPicker_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_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_SolidColorPicker.prototype._setValue = function (color) {
  this._value = color;
  this.$selected.addStyle('background-color', color.toString());

  this._updateNear();
};

SolidColorPicker_SolidColorPicker.prototype._setRGB = function (rgb) {
  this._rgb = rgb;
  this.$hex.value = this._rgb;
  this.$selectedDot.remove();

  this._autoAdDotToCell();
};

SolidColorPicker_SolidColorPicker.prototype._setOpacityPercent = function (opacity) {
  this._opatictyPercent = opacity;
  this.$opacity.value = opacity;

  this._updateOpacityPercent();
};

SolidColorPicker_SolidColorPicker.prototype._updateOpacityPercent = function () {
  this.$alphaDot.addStyle('left', 'calc(' + this._opatictyPercent + '% - 0.5em)');
};

SolidColorPicker_SolidColorPicker.prototype._setHue = function (hue) {
  this._hue = hue;
  var spectrumColor = src_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_SolidColorPicker.prototype._setSatBrightness = function (sat, brightness) {
  this._sat = sat;
  this._brightness = brightness;

  this._updateSpectrumDot();
};

SolidColorPicker_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_SolidColorPicker.prototype._updateNear = function () {
  var hsba = src_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 src_Color_Color.fromHSB(hue, sat * (7 - i) / 8, brightness);
  });
  var darkerColors = Array(7).fill(null).map(function (u, i) {
    return src_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 src_Color_Color.fromHSB(nHue, sat, brightness);
  });
  this.$near.data = [whiterColors, darkerColors, hueNearColors];
};

SolidColorPicker_SolidColorPicker.prototype.notifyCanBeChanged = function () {
  var cHex8 = this._value.toHex8();

  if (cHex8 != this._lastEmitHex8) {
    this._lastEmitHex8 = cHex8;
    this.notifyChange();
  }
};

SolidColorPicker_SolidColorPicker.prototype.notifyChange = function () {
  this.emit('change', {
    target: this,
    value: this.value,
    type: 'change'
  }, this);
};

SolidColorPicker_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_SolidColorPicker.prototype.notifySizeChange = function () {
  this.emit('sizechange', {
    target: this,
    size: this._lastSize,
    type: 'sizechange'
  }, this);
};

SolidColorPicker_SolidColorPicker.prototype.notifySubmit = function () {
  SolidColorPicker_SolidColorPicker.pushColorHistory(this._value);
  this.emit('submit', {
    target: this,
    value: this._value,
    type: 'submit'
  }, this);
};

SolidColorPicker_SolidColorPicker.property = {};
/**
 * @type {SolidColorPicker}
 */

SolidColorPicker_SolidColorPicker.property.value = {
  /**
   *
   * @param {Color} value
   */
  set: function set(value) {
    value = value || 'transparent';

    if (!value.toHex8) {
      try {
        value = src_Color_Color.parse(value + '');
      } catch (e) {
        value = new src_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 = src_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_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_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_SolidColorPicker.eventHandler = {};

SolidColorPicker_SolidColorPicker.eventHandler.attached = function () {
  SolidColorPicker_SolidColorPicker.pushInstances(this);
  this.reloadSetting();
};

SolidColorPicker_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_SolidColorPicker.eventHandler.swatchesPressCell = function (event) {
  try {
    var value = src_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 = src_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_SolidColorPicker.eventHandler.nearPressCell = function (event) {
  try {
    var value = src_Color_Color.parse(event.value + '');
    value.rgba[3] = this._opatictyPercent / 100;

    this._setValue(value);

    this._setRGB(value.toHex6());

    var hsba = src_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_SolidColorPicker.eventHandler.hexKeyup = function () {
  try {
    var value = src_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 = src_Color_Color.rgbaToHSBA(value.rgba);

      this._setHue(hsba[0] * 360);

      this._setSatBrightness(hsba[1] * 100, hsba[2] * 100);

      this.notifyCanBeChanged();
    }
  } catch (e) {}
};

SolidColorPicker_SolidColorPicker.eventHandler.hexChange = function () {
  if (this.$hex.value != this._rgb) this.$hex.value = this._rgb;
};

SolidColorPicker_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 = src_Color_Color.parse('#' + this._rgb);
    color.rgba[3] = opacity / 100;

    this._setValue(color);

    this._updateOpacityPercent();

    this.notifyCanBeChanged();
  }
};

SolidColorPicker_SolidColorPicker.eventHandler.opacityChange = function () {
  var opacity = this._opatictyPercent;

  if (this.$opacity.value != opacity) {
    this.$opacity.value = opacity + '';
  }
};

SolidColorPicker_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 = src_Color_Color.parse('#' + this._rgb);
  color.rgba[3] = opacity / 100;

  this._setValue(color);

  this._setOpacityPercent(opacity);

  this.notifyCanBeChanged();
};

SolidColorPicker_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 = src_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_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 = src_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_SolidColorPicker.eventHandler.keydown = function (event) {
  if (event.key == 'Enter') {
    event.preventDefault();
    event.target.blur();
    this.notifySubmit();
  }
};

components_CPCore.install('solidcolorpicker', SolidColorPicker_SolidColorPicker);
/* harmony default export */ const components_SolidColorPicker = ((/* unused pure expression or super */ null && (SolidColorPicker_SolidColorPicker)));
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/colorpicker.css
var colorpicker = __webpack_require__(829);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/colorpickerbutton.css
var style_colorpickerbutton = __webpack_require__(1721);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/swatchestable.css
var style_swatchestable = __webpack_require__(3370);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/spectrumcolor.css
var style_spectrumcolor = __webpack_require__(501);
// EXTERNAL MODULE: ./node_modules/absol-colorpicker/style/solidcolorpicker.css
var style_solidcolorpicker = __webpack_require__(3934);
;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/style/index.js





;// CONCATENATED MODULE: ./node_modules/absol-colorpicker/index.js




var absol_colorpicker_ColorPicker = {
  core: components_CPCore,
  _: components_CPCore._,
  $: components_CPCore.$,
  creator: components_CPCore.creator,
  Color: src_Color_Color
};
/* harmony default export */ const absol_colorpicker = ((/* unused pure expression or super */ null && (absol_colorpicker_ColorPicker)));
// 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 = src_Color_Color.fromHSL(hue, 1, 0.5);
  var dColor = src_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 = src_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 = ACore_$('.r64-brush-color', this.$view);
  this.$fillColor = ACore_$('.r64-fill-color', this.$view);
  this.$device = ACore_$('.r64-device', this.$view);
  this.$gridCtn = ACore_$('.r8-grid-ctn', this.$view);
  this.$grid = ACore_$('.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 = ACore_$('.r64-brush-secondary-color', this.$view).on('click', this.swapBrushColor.bind(this));
  this.$secondaryColorBg = ACore_$('.as-color-picker-button-inner-value', this.$secondaryColor);
  this.$program = ACore_$('.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 = src_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 = src_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: ./template/connection_help.tpl
/* harmony default export */ const connection_help = ("<p>Không thể kết nối đến đèn của bạn, vui lòng kiểm tra theo các bước sau đây</p>\r\n<p>\r\n    1. Kiểm tra công tắc đã gạt về bên phải chưa(có chấm màu đỏ)<br>\r\n    2. Sau khi bật, nếu chỉ có đèn đỏ sáng, đèn màu xanh không chớp lần nào, vui lòng sạc ít nhất 30p để đèn có thể khởi động<br>\r\n    3. Sau khi bật, nếu đèn xanh chớp liên tục, đèn chưa cài đặt wifi hoặc không thể vào được wifi hiện tại(do sai password, không tìm thấy wifi đã cài trước đó)<br>\r\n    4. Nếu đèn vẫn sáng, công tắc đang bật, trước đó đang ở chế độ tiết kiệm pin, vui lòng tắt và bật lại để đèn vào chế độ bình thưường<br>\r\n</p>\r\n<p>\r\n    <h4>Các bước cài mới hoặt đặt lại wifi</h4>\r\n    1. Bật tắt 2 lần trong thời gian ngắn(tối đa 2 giây giữa bật->tắt): ví dụ bật->1 giây->tắt,... bật->1 giây->tắt<br>\r\n    2. Đèn xanh chuyển qua chế độ chớp liên tục, dùng điện thoại/máy tính kết nối vào wifi CrystalConfig, pass 12345678, hoặc sử dụng mã QR số 1\r\n    3. Sau khi kết nối wifi, điện thoại sẽ tự mở trang thiết lập wifi, nếu không tự động, sử dụng QR số 2, hoặc vào địa chỉ web <strong>http://192.168.1.1</strong><br>\r\n    4. Trong trang thiết lập, nhập wifi và password, có thể xem lại thiết lập truước\r\n    5. Bấm Configure => thiết lập thành công. Điện thoại sẽ tự động kết nối lại wifi của bạn, hoàn thành cài đặt\r\n    6. Quay lại trang điều khiển, có thể dùng QR trên kệ để pha lê\r\n</p>\r\n<p style=\"color: aqua\">Hộp thoại này sẽ tự biến mất sau khi kết nối thành công</p>\r\n");
;// CONCATENATED MODULE: ./js/CrystalApp.js
















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 CrystalApp_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 CrystalApp() {
  AppPattern_Fragment.call(this);
  this.deviceName = (location.search || '').match(/(?:[^a-zA-z0-9]+)d=([a-zA-z0-9]+)/);
  if (this.deviceName) this.deviceName = this.deviceName[1];
  this.online = false;
  this.lastSendColor = 0;
  this.rawHue = 0;
  this.color = src_Color_Color.parse('black');
  this.waitConnectionFrg = new CAWaitingConnection(this);
}

mixClass(CrystalApp, AppPattern_Fragment);

CrystalApp.prototype.createView = function () {
  this.$attachhook = ACore_('attachhook');
  this.$attachhook.requestUpdateSize = this.requestUpdateSize.bind(this);
  this.$view = ACore_({
    "class": 'r7-crystal-app',
    child: [{
      "class": 'r7ca-header',
      child: [{
        tag: 'label',
        child: {
          text: "Device: "
        }
      }, {
        tag: 'span',
        child: {
          text: this.deviceName
        }
      }]
    }, {
      "class": 'r7ca-body',
      child: [{
        tag: js_Hanger,
        "class": 'r7ca-spectrum-ctn',
        child: [{
          tag: colorpicker_SpectrumColor,
          "class": 'r7ca-spectrum-color'
        }, '.as-solid-color-picker-spectrum-dot.r7ca-spectrum-dot'],
        on: {
          drag: this.ev_spectrumDrag.bind(this),
          predrag: this.ev_spectrumDrag.bind(this)
        }
      }, 'br', {
        tag: 'hanger',
        "class": 'r7ca-hue-ctn',
        child: [{
          "class": ['r7ca-hue', 'as-solid-color-picker-hue']
        }, '.as-solid-color-picker-spectrum-dot.r7ca-hue-dot'],
        on: {
          drag: this.ev_hueDrag.bind(this),
          predrag: this.ev_hueDrag.bind(this)
        }
      }, 'br', {
        tag: js_FlexiconButton,
        "class": 'dark',
        style: {
          fontSize: '1em',
          height: 'calc(2em + 2px)',
          marginTop: '1em'
        },
        props: {
          text: 'Tiết kiệm điện',
          icon: 'span.mdi.mdi-battery-heart-variant',
          variant: ''
        },
        on: {
          click: this.showDeepSleepMessage.bind(this)
        }
      }]
    }, this.$attachhook]
  });
  this.$spectrumDot = ACore_$('.r7ca-spectrum-dot', this.$view);
  this.$spectrum = ACore_$('.r7ca-spectrum-color', this.$view);
  this.$hueDot = ACore_$('.r7ca-hue-dot', this.$view);
  this.$hue = ACore_$('.r7ca-hue', this.$view);
};

CrystalApp.prototype.requestUpdateSize = function () {
  var bound = this.$view.getBoundingClientRect();
  this.baseBlockSize = Math.min(bound.width, bound.height) / 32 << 0;
  this.$view.addStyle('font-size', this.baseBlockSize + 'px');
  if (bound.width > bound.height) this.$view.addClass('r7-orient-landscape');else this.$view.removeClass('r7-orient-landscape');
};

CrystalApp.prototype.onStart = function () {
  this.waitConnectionFrg.start();
  this.mqttCli = window.MQTT.connect('wss://absol.cf:9884');
  this.mqttCli.on('connect', this.ev_mqttConnect.bind(this));
  this.mqttCli.on('message', this.ev_mqttMessage.bind(this));
  HTML5_ResizeSystem.add(this.$attachhook);
  this.requestUpdateSize();
};

CrystalApp.prototype.ev_mqttConnect = function () {
  var _this = 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");
    } // this.mqttCli.publish('duthienkt/led64/who_online', '0');

  });
  this.mqttCli.subscribe('duthienkt/led64/' + this.deviceName + '/status', function (err) {
    if (err) {
      Snackbar.show("Error: Subscribe duthienkt/led64/online");
    } else {
      Snackbar.show("Subscribe duthienkt/led64/online");
    }

    _this.waitOnline();

    _this.mqttCli.publish('duthienkt/led64/' + _this.deviceName + '/what_status', '0');
  });
};

CrystalApp.prototype.waitOnline = function () {
  this.waitConnectionFrg.restartIfNeed(); // clearTimeout(this.onlineTO);
  // this.onlineTO = setTimeout(() => {
  //     this.online = false;
  //     this.loadingTK = LoadingCubeModal.show();
  // }, 3e3);
};

CrystalApp.prototype.sendColor = function (color) {
  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 CrystalApp_CMDSet({
    i: 7,
    r: r,
    g: g,
    b: b,
    flushed: 1
  }).toBuffer();
  this.mqttCli.publish('duthienkt/led64/' + this.deviceName + '/set', data);
};

CrystalApp.prototype.showDeepSleepMessage = function () {
  var _this2 = this;

  var dialog = ACore_({
    tag: js_MessageDialog,
    props: {
      dialogTitle: 'Cảnh báo',
      dialogActions: [{
        text: 'Hủy',
        name: 'cancel',
        "class": 'secondary'
      }, {
        text: 'Xác nhận',
        name: 'ok',
        "class": 'primary'
      }]
    },
    child: {
      text: "Trong chế độ tiết kiệm điện, đèn sẽ không thể đổi màu cho đến khi khởi động lại, vẫn tiếp tục?"
    },
    on: {
      action: function action(event) {
        if (event.action.name === 'ok') {
          _this2.deepSleep();
        }

        modal.selfRemove();
      }
    }
  });

  var modal = ACore_({
    tag: js_Modal,
    style: {
      zIndex: 1000
    },
    child: dialog
  }).addTo(document.body);
};

CrystalApp.prototype.deepSleep = function () {
  this.mqttCli.publish('duthienkt/led64/' + this.deviceName + '/deep_sleep', '');
};

CrystalApp.prototype.sendColorDelay = function () {
  var _this3 = this;

  clearTimeout(this.sendTO);
  var now = Date.now();

  if (now - this.lastSendColor >= 100) {
    this.lastSendColor = now;
    this.sendColor(this.color);
  } else {
    this.sendTO = setTimeout(function () {
      now = Date.now();
      _this3.lastSendColor = now;

      _this3.sendColor(_this3.color);
    }, this.lastSendColor + 100 - now);
  }
};
/**
 *
 * @param {Color} color
 */


CrystalApp.prototype.viewColor = function (color) {
  var hsba = color.toHSBA();
  this.rawHue = hsba[0];
  this.$hueDot.addStyle('left', "calc(".concat(hsba[0] * 100, "% - 0.5em)"));
  var contract = src_Color_Color.fromHSB(this.rawHue, 1, 1).getContrastYIQ();
  contract.rgba[3] = 0.7;
  this.$hueDot.addStyle('box-shadow', "".concat(contract.toString('rgba'), " 0px 0px 0.3em 0.125em inset"));
  contract = this.color.getContrastYIQ();
  contract.rgba[3] = 0.7;
  this.$spectrumDot.addStyle('box-shadow', "".concat(contract.toString('rgba'), " 0px 0px 0.3em 0.125em inset"));
  this.$spectrumDot.addStyle({
    left: "calc(".concat(hsba[1] * 100, "% - 0.5em)"),
    bottom: "calc(".concat(hsba[2] * 100, "% - 0.5em)")
  });
};

CrystalApp.prototype.ev_spectrumDrag = function (event) {
  event.preventDefault();
  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)));
  this.color = src_Color_Color.fromHSB(this.rawHue, sat / 100, brightness / 100);
  this.$spectrumDot.addStyle({
    left: "calc(".concat(sat, "% - 0.5em)"),
    bottom: "calc(".concat(brightness, "% - 0.5em)")
  });
  var contract = this.color.getContrastYIQ();
  contract.rgba[3] = 0.7;
  this.$spectrumDot.addStyle('box-shadow', "".concat(contract.toString('rgba'), " 0px 0px 0.3em 0.125em inset"));
  this.sendColorDelay();
};

CrystalApp.prototype.ev_hueDrag = function (event) {
  event.preventDefault();
  var hBound = this.$hue.getBoundingClientRect();
  var hue = (event.clientX - hBound.left) * 360 / hBound.width;
  hue = Math.max(0, Math.min(360, Math.round(hue)));
  this.rawHue = hue / 360;
  var hsba = this.color.toHSBA();
  this.color = src_Color_Color.fromHSB(this.rawHue, hsba[1], hsba[2]);
  var hueColor = src_Color_Color.fromHSB(this.rawHue, 1, 1);
  this.$spectrum.addStyle('background-color', hueColor.toString('rgb'));
  this.$hueDot.addStyle('left', "calc(".concat(this.rawHue * 100, "% - 0.5em)"));
  this.sendColorDelay();
};

CrystalApp.prototype.ev_online = function () {
  this.waitConnectionFrg.stop(); // this.online = true;
  // clearTimeout(this.onlineTO);
  // LoadingCubeModal.close(this.loadingTK);
};

CrystalApp.prototype.ev_status = function (buff) {
  this.ev_online();
  var rgb = [0.0, 0.0, 0.0, 1];

  for (var i = 0; i < 7; ++i) {
    rgb[0] += buff[i * 3];
    rgb[1] += buff[i * 3 + 1];
    rgb[2] += buff[i * 3 + 2];
  }

  rgb[0] /= 7 * 255;
  rgb[1] /= 7 * 255;
  rgb[2] /= 7 * 255;
  this.color = new src_Color_Color(rgb);
  this.viewColor(this.color);
  var hue = this.color.toHSBA()[0];
  var hueColor = src_Color_Color.fromHSB(hue, 1, 1);
  this.$spectrum.addStyle('background-color', hueColor.toString('rgb'));
};

CrystalApp.prototype.ev_mqttMessage = function (topic, payload) {
  if (topic === 'duthienkt/led64/online') {
    console.log(payload.toString());

    if (payload.toString() === this.deviceName) {
      this.ev_online();
    }
  } else if (topic === 'duthienkt/led64/' + this.deviceName + '/status') {
    this.ev_status(payload);
  } else {}
};

/* harmony default export */ const js_CrystalApp = (CrystalApp);
/**
 * @extends Fragment
 * @param {CrystalApp} app
 * @constructor
 */

function CAWaitingConnection(app) {
  AppPattern_Fragment.call(this);
  this.app = app;
  this.waitTO = -1;
}

mixClass(CAWaitingConnection, AppPattern_Fragment);

CAWaitingConnection.prototype.createView = function () {
  this.$view = ACore_({
    tag: js_Modal,
    child: {
      tag: js_MessageDialog,
      props: {
        dialogTitle: "Kết nối"
      }
    }
  });
  this.$diallog = ACore_$(js_MessageDialog.tag, this.$view);
};

CAWaitingConnection.prototype.onStart = function () {
  var _this4 = this;

  this.getView().addTo(document.body);
  this.waitTO = setTimeout(this.showHelp.bind(this), this.WAIT_FAILED);

  var text = ACore_({
    tag: 'span',
    child: {
      text: "Đang chờ thiết bị trực tuyến "
    }
  });

  var time = ACore_({
    tag: 'strong',
    child: {
      text: '(0s)'
    }
  });

  this.$diallog.clearChild().addChild(text).addChild(time);
  var sTime = Date.now();

  var tick = function tick() {
    if (time.isDescendantOf(_this4.$view)) {
      time.firstChild.data = "(".concat(Math.floor((Date.now() - sTime) / 1000), "s)");
      setTimeout(tick, 200);
    }
  };

  setTimeout(tick, 200);
};

CAWaitingConnection.prototype.restartIfNeed = function () {
  if (this.state === "RUNNING") {
    clearTimeout(this.waitTO);
    this.waitTO = setTimeout(this.showHelp.bind(this), this.WAIT_FAILED);
  } else {
    this.start();
  }
};

CAWaitingConnection.prototype.WAIT_FAILED = 12000;

CAWaitingConnection.prototype.showHelp = function () {
  this.$doc = ACore_({
    "class": 'r7ca-doc',
    props: {
      innerHTML: connection_help
    }
  });
  this.$diallog.clearChild().addChild(this.$doc);
};

CAWaitingConnection.prototype.onStop = function () {
  this.getView().selfRemove();
  clearTimeout(this.waitTO);
  this.app.mqttCli.publish('duthienkt/led64/' + this.app.deviceName + '/what_status', '0');
};
;// CONCATENATED MODULE: ./dev.js


window.r64 = {};
r64.RGB64App = js_RGB64App;
r64.CrystalApp = js_CrystalApp;

/***/ }),

/***/ 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"], ["linux", /\blinux\s(?:[xi][0-9_]+;)\srv:([0-9.]+)/], //Linux x86_64; rv:34.0
["windowsce", /\bwindows ce(?: ([0-9.]+))?/], ["cros", /\bcros armv7l ([0-9.]+)/], //CrOS armv7l 7077.134.0
["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\/([0-9.]+)\b/], ["webview", /os x (?:[0-9._]+).+\bapplewebkit\/([0-9.]+)\b/], ["firefox", /\bfirefox\/([0-9.ab]+)/], ["nokia", /\bnokiabrowser\/([0-9.]+)/]];
module.exports = {
  device: DEVICES,
  os: OS,
  browser: BROWSER,
  engine: ENGINE,
  re_msie: re_msie
};

/***/ }),

/***/ 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('');
}

/***/ }),

/***/ 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;
};

/***/ }),

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

// shim for using process in browser
var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it
// don't break things.  But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals.  It's inside a
// function because try/catches deoptimize in certain engines.

var cachedSetTimeout;
var cachedClearTimeout;

function defaultSetTimout() {
  throw new Error('setTimeout has not been defined');
}

function defaultClearTimeout() {
  throw new Error('clearTimeout has not been defined');
}

(function () {
  try {
    if (typeof setTimeout === 'function') {
      cachedSetTimeout = setTimeout;
    } else {
      cachedSetTimeout = defaultSetTimout;
    }
  } catch (e) {
    cachedSetTimeout = defaultSetTimout;
  }

  try {
    if (typeof clearTimeout === 'function') {
      cachedClearTimeout = clearTimeout;
    } else {
      cachedClearTimeout = defaultClearTimeout;
    }
  } catch (e) {
    cachedClearTimeout = defaultClearTimeout;
  }
})();

function runTimeout(fun) {
  if (cachedSetTimeout === setTimeout) {
    //normal enviroments in sane situations
    return setTimeout(fun, 0);
  } // if setTimeout wasn't available but was latter defined


  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
    cachedSetTimeout = setTimeout;
    return setTimeout(fun, 0);
  }

  try {
    // when when somebody has screwed with setTimeout but no I.E. maddness
    return cachedSetTimeout(fun, 0);
  } catch (e) {
    try {
      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
      return cachedSetTimeout.call(null, fun, 0);
    } catch (e) {
      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
      return cachedSetTimeout.call(this, fun, 0);
    }
  }
}

function runClearTimeout(marker) {
  if (cachedClearTimeout === clearTimeout) {
    //normal enviroments in sane situations
    return clearTimeout(marker);
  } // if clearTimeout wasn't available but was latter defined


  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
    cachedClearTimeout = clearTimeout;
    return clearTimeout(marker);
  }

  try {
    // when when somebody has screwed with setTimeout but no I.E. maddness
    return cachedClearTimeout(marker);
  } catch (e) {
    try {
      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
      return cachedClearTimeout.call(null, marker);
    } catch (e) {
      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
      // Some versions of I.E. have different rules for clearTimeout vs setTimeout
      return cachedClearTimeout.call(this, marker);
    }
  }
}

var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;

function cleanUpNextTick() {
  if (!draining || !currentQueue) {
    return;
  }

  draining = false;

  if (currentQueue.length) {
    queue = currentQueue.concat(queue);
  } else {
    queueIndex = -1;
  }

  if (queue.length) {
    drainQueue();
  }
}

function drainQueue() {
  if (draining) {
    return;
  }

  var timeout = runTimeout(cleanUpNextTick);
  draining = true;
  var len = queue.length;

  while (len) {
    currentQueue = queue;
    queue = [];

    while (++queueIndex < len) {
      if (currentQueue) {
        currentQueue[queueIndex].run();
      }
    }

    queueIndex = -1;
    len = queue.length;
  }

  currentQueue = null;
  draining = false;
  runClearTimeout(timeout);
}

process.nextTick = function (fun) {
  var args = new Array(arguments.length - 1);

  if (arguments.length > 1) {
    for (var i = 1; i < arguments.length; i++) {
      args[i - 1] = arguments[i];
    }
  }

  queue.push(new Item(fun, args));

  if (queue.length === 1 && !draining) {
    runTimeout(drainQueue);
  }
}; // v8 likes predictible objects


function Item(fun, array) {
  this.fun = fun;
  this.array = array;
}

Item.prototype.run = function () {
  this.fun.apply(null, this.array);
};

process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues

process.versions = {};

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;

process.listeners = function (name) {
  return [];
};

process.binding = function (name) {
  throw new Error('process.binding is not supported');
};

process.cwd = function () {
  return '/';
};

process.chdir = function (dir) {
  throw new Error('process.chdir is not supported');
};

process.umask = function () {
  return 0;
};

/***/ }),

/***/ 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\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\n\n.r7-crystal-app {\n    background-color: black;\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    width: 100%;\n    height: 100%;\n    box-sizing: border-box;\n    color: white;\n}\n\n.r7ca-header {\n    padding: 1em;\n    font-size: 1.5em;\n}\n\n\n.r7ca-body{\n    user-select: none;\n    text-align: center;\n}\n\n.r7ca-spectrum-ctn {\n    border: 1px solid white;\n    width: 18em;\n    height: 18em;\n    position: relative;\n    display: inline-block;\n}\n\n.r7ca-spectrum-color {\n    width: 100%;\n    height: 100%;\n}\n\n.as-solid-color-picker-spectrum-dot.r7ca-spectrum-dot {\n\n    box-shadow: rgba(255, 255, 255, 0.7) 0px 0px 0.3em 0.125em inset;\n}\n\n.r7ca-hue-ctn {\n    position: relative;\n    display: inline-block;\n    height: 3em;\n    width: 22em;\n    margin-top: 1em;\n    border: 1px solid white;\n    box-sizing: border-box;\n}\n\n.r7ca-hue.as-solid-color-picker-hue{\n    width: 100%;\n    height: 100%;\n}\n\n.r7ca-hue-dot{\n    position: absolute;\n    top: calc(50% - 0.5em);\n}\n\n.as-theme-dark .as-message-dialog {\n    background-color: rgb(37, 37, 40);\n    color: white;\n}\n\n.r7ca-doc {\n    max-height: calc(90vh - 120px);\n    max-width: calc(90vw - 40px);\n    width: 600px;\n    overflow-y: auto;\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-calendar-input {\r\n    font-size: 1rem;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    width: 7em;\r\n    height: 2em;\r\n    box-sizing: content-box;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    border: solid 1px #d6d6d6;\r\n    border-radius: 0.2em;\r\n}\r\n\r\n.absol-calendar-input.as-border-none {\r\n    border: none;\r\n}\r\n\r\n.absol-calendar-input.as-border-none > input {\r\n    text-align: left;\r\n    padding-left: 0;\r\n}\r\n\r\n.absol-calendar-input > input {\r\n    text-align: center;\r\n    width: 100%;\r\n    height: 100%;\r\n    outline: none;\r\n    border: none;\r\n    background: transparent;\r\n    padding: 0;\r\n    font: inherit;\r\n}\r\n\r\n.absol-calendar-input:not(.as-read-only) input {\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-calendar-input:not(.as-read-only) > input:hover,\r\n.absol-calendar-input:not(.as-read-only) > input:focus {\r\n    color: red;\r\n}\r\n\r\n.absol-calendar-input.absol-disabled {\r\n    pointer-events: none;\r\n    background-color: var(--as-disabled-background-color);\r\n}\r\n\r\n.absol-calendar-input.absol-disabled input {\r\n    color: var(--as-disabled-text-color);\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "/** align middle in table cell **/\r\n.KPIsimpletableclass td > .absol-checkbox:first-child:last-child,\r\n.KPIsimpletableclass td > .absol-checkbox.as-no-label:first-child:last-child .as-checkbox-input {\r\n    display: block;\r\n    margin: auto;\r\n}\r\n\r\n.cardsimpletableclass > table > tbody > tr > td > .absol-checkbox:first-child:last-child {\r\n    display: block;\r\n}\r\n\r\n.absol-checkbox {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: 16px;\r\n}\r\n\r\n.absol-checkbox:not(.as-read-only):not(.as-disabled) {\r\n    cursor: pointer;\r\n    user-select: none;\r\n}\r\n\r\n.absol-checkbox.right > .absol-checkbox-label.as-right {\r\n    display: none;\r\n}\r\n\r\n\r\n.absol-checkbox:not(.right) > .absol-checkbox-label.as-left {\r\n    display: none;\r\n}\r\n\r\n.absol-checkbox-label {\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.absol-checkbox-label.as-left {\r\n    padding-right: 0.3em;\r\n}\r\n\r\n\r\n.absol-checkbox-label.as-right {\r\n    padding-left: 0.3em;\r\n}\r\n\r\n.absol-checkbox.as-no-label {\r\n    width: calc(1em + 2px);\r\n    height: calc(1em + 2px);\r\n}\r\n\r\n\r\n.absol-checkbox.as-no-label .absol-checkbox-label {\r\n    display: none;\r\n}\r\n\r\n.absol-checkbox.as-no-label .as-checkbox-input {\r\n    display: block;\r\n}\r\n\r\n.absol-checkbox.as-disabled .absol-checkbox-label {\r\n    color: var(--as-disabled-text-color);\r\n}\r\n\r\n\r\n.absol-checkbox.as-wrap-text {\r\n    white-space: nowrap;\r\n}\r\n\r\n.absol-checkbox.as-wrap-text .absol-checkbox-label {\r\n    white-space: normal;\r\n}\r\n\r\n.absol-checkbox.as-wrap-text > * {\r\n    vertical-align: top;\r\n}\r\n\r\n.absol-checkbox.as-wrap-text .absol-checkbox-label {\r\n    max-width: calc(100% - 24px);\r\n}\r\n\r\n.absol-checkbox.as-read-only .as-checkbox-input {\r\n    pointer-events: none;\r\n}\r\n\r\n.absol-checkbox.as-read-only.as-border-none .bound {\r\n    display: none;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --candy-border-color: #929292;\r\n    --candy-hover-background-color: #eeeee9;\r\n    --candy-disabled-background-color: #ebebe4;\r\n}\r\n\r\nlabel.as-checkbox-input {\r\n    display: inline-block;\r\n    position: relative;\r\n    width: calc(1em + 2px);\r\n    height: calc(1em + 2px);\r\n    font-size: inherit;\r\n    box-sizing: border-box;\r\n    vertical-align: middle;\r\n    border-radius: 0.25em;\r\n    padding: 0;\r\n    margin: 0; /*fix boostrap override*/\r\n    overflow: hidden;\r\n}\r\n\r\n.as-checkbox-input:not(.as-read-only):not(.as-disabled){\r\n    cursor: pointer;\r\n}\r\n\r\n\r\nlabel.as-checkbox-input:hover:not(.as-read-only) .bound,\r\n.absol-checkbox:hover:not(.as-read-only) .bound {\r\n    fill: var(--candy-hover-background-color);\r\n}\r\n\r\n.as-checkbox-input .tick,\r\n.as-checkbox-input .minus {\r\n    fill: #606060;\r\n}\r\n\r\n\r\n.as-checkbox-input input.as-checkbox-input-value {\r\n    font-size: inherit;\r\n    position: absolute;\r\n    right: 100%;\r\n    top: 0;\r\n    opacity: 0.0;\r\n    z-index: -100000000000;\r\n}\r\n\r\ninput.as-checkbox-input-value:not(:checked) ~ svg .tick {\r\n    opacity: 0;\r\n}\r\n\r\n.as-checkbox-input.as-has-minus .minus {\r\n    opacity: 1;\r\n}\r\n\r\n.as-checkbox-input .minus,\r\ninput.as-checkbox-input-value:checked ~ svg .minus {\r\n    opacity: 0;\r\n}\r\n\r\n\r\nlabel.as-checkbox-input .bound {\r\n    stroke: var(--candy-border-color);\r\n    fill: white;\r\n}\r\n\r\nlabel.as-checkbox-input .tick {\r\n    opacity: 1;\r\n    transition: opacity 0.1s;\r\n}\r\n\r\nlabel.as-checkbox-input .minus {\r\n    transition: opacity 0.1s;\r\n}\r\n\r\nlabel.as-checkbox-input.as-disabled > svg .bound,\r\nlabel.as-checkbox-input.as-disabled:hover > svg .bound {\r\n    stroke: #929292;\r\n    fill: #ebebe4;\r\n}\r\n\r\n\r\n.as-checkbox-input > svg {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.as-checkbox-input.as-read-only.as-border-none .bound{\r\n    display: none;\r\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 {\r\n    width: calc(var(--select-list-estimate-width) + 2px + 5px + 23px + 7px);\r\n    --as-width-limit: calc(100vw - 20px);\r\n}\r\n\r\n.as-check-list-box.as-select-list-box.as-enable-search .as-select-list-box-scroller {\r\n    max-height: calc(var(--max-height) - 2em - 10px - 2em - 1px);\r\n}\r\n\r\n.as-check-list-box.as-select-list-box .as-select-list-box-scroller {\r\n    max-height: calc(var(--max-height) - 2em - 1px);\r\n}\r\n\r\n\r\n.as-check-list-box.as-select-list-box .absol-selectlist-item-text {\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    max-width: calc(var(--as-width-limit) - 0.7em - 2.5em);\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-check-list-item {\r\n    padding-left: 0.35em;\r\n    height: calc(30rem / 14);\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n    -moz-user-select: none;\r\n}\r\n\r\n.as-check-list-item-checkbox {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-check-list-item-checkbox .as-checkbox-input-check-icon{\r\n    display: block;\r\n\r\n}\r\n\r\n.absol-selectlist-item.as-check-list-item > span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: calc(30rem / 14);\r\n}\r\n\r\n.absol-selectlist-item.as-check-list-item .absol-selectlist-item-desc {\r\n    line-height: calc(25rem / 14);\r\n}\r\n\r\n.as-check-list-item.as-no-select .as-check-list-item-checkbox {\r\n    visibility: hidden;\r\n}\r\n\r\n.as-check-list-item.as-no-select {\r\n    pointer-events: none;\r\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 {\r\n    width: 100%;\r\n}\r\n\r\n.as-check-tree-box {\r\n    min-width: 18em;\r\n}\r\n\r\n.as-check-tree-box.as-no-transition label.as-checkbox-input .minus,\r\n.as-check-tree-box.as-no-transition label.as-checkbox-input .tick {\r\n    transition: none;\r\n}\r\n\r\n\r\n.as-check-tree-box.as-select-list-box.as-enable-search .as-select-list-box-scroller {\r\n    max-height: calc(var(--max-height) - 2em - 10px - 2em - 1px);\r\n}\r\n\r\n.as-check-tree-box.as-select-list-box .as-select-list-box-scroller {\r\n    max-height: calc(var(--max-height) - 2em - 1px);\r\n}\r\n\r\n/***********************************************************************************************************************/\r\n\r\n.am-check-tree-box .as-dropdown-box-footer,\r\n.am-check-tree-box\r\n{\r\n    min-width: 18em;\r\n}\r\n\r\n.am-check-tree-box-list {\r\n    --text-width: 100%;\r\n    --desc-width: 0;\r\n}\r\n\r\n.am-check-tree-box-modal:not(.as-enable-search) .absol-search-text-input {\r\n    visibility: hidden;\r\n    opacity: 0;\r\n    pointer-events: none;\r\n}\r\n\r\n.am-check-tree-box .as-check-tree-box-scroller {\r\n    max-height: calc(100vh - var(--modal-margin-top) - 100px);\r\n}\r\n\r\n.am-check-tree-box {\r\n    width: var(--select-list-estimate-width);\r\n    /*max-width: calc(100vw - 20px);*/\r\n}\r\n\r\n.am-check-tree-box .as-check-tree-box-content {\r\n    /*max-width: calc(100vw - 20px);*/\r\n}\r\n\r\n.am-check-tree-box.as-has-desc {\r\n    --text-width: 50%;\r\n    --desc-width: 50%;\r\n}\r\n\r\n\r\n.am-check-tree-box-body {\r\n    overflow-y: auto;\r\n    max-height: calc(80vh - 2em);\r\n}\r\n\r\n.am-check-tree-box.as-enable-search .am-check-tree-box-body {\r\n    max-height: calc(80vh - 4em - 10px);\r\n}\r\n\r\n.am-check-tree-item {\r\n    display: block;\r\n    white-space: nowrap;\r\n    position: relative;\r\n    width: 100%;\r\n    overflow: hidden;\r\n    --level: 0;\r\n    --icon-width: 0px;\r\n}\r\n\r\n\r\n.am-check-tree-item.as-has-icon {\r\n    --icon-width: 2.7em;\r\n}\r\n\r\n\r\n.am-check-tree-item-toggle-ctn,\r\n.am-check-tree-item-icon-ctn,\r\n.am-check-tree-item-checkbox-ctn {\r\n    position: absolute;\r\n    white-space: nowrap;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.am-check-tree-item-toggle-ctn {\r\n    left: calc(2em * var(--level) + 0.2em);\r\n    width: 1.5em;\r\n    text-align: center;\r\n}\r\n\r\n.am-check-tree-item-toggle-ctn > svg {\r\n    width: 0.7em;\r\n    height: 0.7em;\r\n}\r\n\r\n\r\n.am-check-tree-item-icon-ctn {\r\n    left: calc(2em * var(--level) + 3.2em);\r\n}\r\n\r\n.am-check-tree-item-checkbox-ctn {\r\n    left: calc(2em * var(--level) + 1.7em)\r\n}\r\n\r\n.am-check-tree-item-icon-ctn > svg {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n\r\n}\r\n\r\n\r\n.am-check-tree-item.as-status-open svg .toggle-close,\r\n.am-check-tree-item.as-status-close svg .toggle-open,\r\n.am-check-tree-item:not(.as-status-close):not(.as-status-open) .am-check-tree-item-toggle-ctn {\r\n    display: none;\r\n}\r\n\r\n.am-check-tree-item-icon-ctn::before,\r\n.am-check-tree-item-toggle-ctn::before,\r\n.am-check-tree-item-checkbox-ctn::before {\r\n    content: \"\";\r\n    height: 100%;\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n}\r\n\r\n.am-check-tree-item-icon-ctn:empty {\r\n    display: none;\r\n}\r\n\r\n.am-check-tree-item-icon-ctn > span {\r\n    font-size: 1.8em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.am-check-tree-item-icon-ctn img,\r\n.am-check-tree-item-icon-ctn svg {\r\n    width: 1.8em;\r\n    height: 1.8em;\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.am-check-tree-item-text {\r\n    width: var(--text-width);\r\n    box-sizing: border-box;\r\n    padding: 0.3em 0.5em 0.3em calc(3em + 2em * var(--level) + var(--icon-width));\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: 1.5;\r\n    white-space: normal;\r\n}\r\n\r\n\r\n.am-check-tree-item-desc {\r\n    display: none;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.am-check-tree-leaf-item:not(.as-is-leaf) .am-check-tree-item-checkbox-ctn {\r\n    display: none;\r\n}\r\n\r\n.am-check-tree-leaf-item:not(.as-is-leaf) .am-check-tree-item-text {\r\n    padding: 0.3em 0.5em 0.3em calc(2em * var(--level) + var(--icon-width) + 1em);\r\n}\r\n\r\n.am-check-tree-leaf-item:not(.as-is-leaf) .am-check-tree-item-icon-ctn {\r\n    left: calc(2em * var(--level) + 1.5em);\r\n}\r\n\r\n.am-check-tree-box-list.as-has-desc .am-check-tree-item-desc {\r\n    display: inline-block;\r\n}\r\n\r\n.am-check-tree-box.as-leaf-only .am-check-tree-item:not(.as-has-leaf) .as-checkbox-input {\r\n    pointer-events: none;\r\n    opacity: 0.2;\r\n}\r\n\r\n\r\n.am-check-tree-box.as-leaf-only:not(.as-has-leaf) .as-select-list-box-check-all {\r\n    pointer-events: none;\r\n    color: var(--as-disabled-text-color);\r\n}\r\n\r\n.am-check-tree-box.as-leaf-only:not(.as-has-leaf) .as-select-list-box-check-all label.as-checkbox-input .bound {\r\n    stroke: #929292;\r\n    fill: #ebebe4;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-check-tree-item {\r\n    font-size: inherit;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    height: 2em;\r\n}\r\n\r\n.as-check-tree-item:focus {\r\n    background-color: unset;\r\n}\r\n\r\n.as-check-tree-item:hover:focus {\r\n    background-color: rgba(169, 169, 172, 0.1);\r\n}\r\n\r\n.as-check-tree-item .as-checkbox-input {\r\n    margin-right: 0.35em;\r\n}\r\n\r\n.as-check-tree-item.as-no-select .as-checkbox-input,\r\n.absol-checkbox.as-no-select {\r\n    pointer-events: none;\r\n    opacity: 0.3;\r\n}\r\n\r\n.as-check-tree-item.as-no-select .as-checkbox-input .bound,\r\n.absol-checkbox.as-no-select .bound {\r\n    stroke: #929292;\r\n    fill: #ebebe4;\r\n}\r\n\r\n.as-check-tree-item.as-no-select .as-checkbox-input .tick,\r\n.as-check-tree-item.as-no-select .as-checkbox-input .minus,\r\n.absol-checkbox.as-no-select .tick,\r\n.absol-checkbox.as-no-select .minus {\r\n    display: none;\r\n    opacity: 0;\r\n    visibility: hidden;\r\n}\r\n\r\n.absol-checkbox.as-no-select{\r\n    visibility: hidden;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".cke_panel {\r\n    z-index: 1000000000 !important;\r\n}\r\n\r\n\r\nspan.cke_button_icon.cke_button__as-variable-box-ico_icon {\r\n    background-size: cover;\r\n    background-image: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB2aWV3Qm94PSIwIDAgMjQgMjQiPgogICAgPHBhdGggZmlsbD0iIzAwMDBmZiIgZD0iTTE5IDNINUMzLjkgMyAzIDMuOSAzIDVWMTlDMyAyMC4xIDMuOSAyMSA1IDIxSDE5QzIwLjEgMjEgMjEgMjAuMSAyMSAxOVY1QzIxIDMuOSAyMC4xIDMgMTkgM003LjQgMThDNS45IDE2LjUgNSAxNC4zIDUgMTJTNS45IDcuNSA3LjQgNkw5IDYuN0M3LjcgNy45IDcgOS45IDcgMTJTNy43IDE2LjEgOSAxNy4zTDcuNCAxOE0xMi43IDE1TDExLjkgMTNMMTAuNSAxNUg5TDExLjMgMTEuOUwxMCA5SDExLjNMMTIuMSAxMUwxMy41IDlIMTVMMTIuOCAxMkwxNC4xIDE1SDEyLjdNMTYuNiAxOEwxNSAxNy4zQzE2LjMgMTYgMTcgMTQuMSAxNyAxMlMxNi4zIDcuOSAxNSA2LjdMMTYuNiA2QzE4LjEgNy41IDE5IDkuNyAxOSAxMlMxOC4xIDE2LjUgMTYuNiAxOFoiIC8+Cjwvc3ZnPg==\");\r\n}\r\n\r\nspan.cke_button_icon.cke_button__as-expression-box-ico_icon {\r\n    background-size: cover;\r\n    background-image: url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiICB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik01LDNIN1Y1SDVWMTBBMiwyIDAgMCwxIDMsMTJBMiwyIDAgMCwxIDUsMTRWMTlIN1YyMUg1QzMuOTMsMjAuNzMgMywyMC4xIDMsMTlWMTVBMiwyIDAgMCwwIDEsMTNIMFYxMUgxQTIsMiAwIDAsMCAzLDlWNUEyLDIgMCAwLDEgNSwzTTE5LDNBMiwyIDAgMCwxIDIxLDVWOUEyLDIgMCAwLDAgMjMsMTFIMjRWMTNIMjNBMiwyIDAgMCwwIDIxLDE1VjE5QTIsMiAwIDAsMSAxOSwyMUgxN1YxOUgxOVYxNEEyLDIgMCAwLDEgMjEsMTJBMiwyIDAgMCwxIDE5LDEwVjVIMTdWM0gxOU0xMiwxNUExLDEgMCAwLDEgMTMsMTZBMSwxIDAgMCwxIDEyLDE3QTEsMSAwIDAsMSAxMSwxNkExLDEgMCAwLDEgMTIsMTVNOCwxNUExLDEgMCAwLDEgOSwxNkExLDEgMCAwLDEgOCwxN0ExLDEgMCAwLDEgNywxNkExLDEgMCAwLDEgOCwxNU0xNiwxNUExLDEgMCAwLDEgMTcsMTZBMSwxIDAgMCwxIDE2LDE3QTEsMSAwIDAsMSAxNSwxNkExLDEgMCAwLDEgMTYsMTVaIiAvPgo8L3N2Zz4=\");\r\n}\r\n\r\nspan.cke_button_icon.cke_button__insert_video_icon {\r\n    background-size: cover;\r\n    background-image: url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+CiAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0xOSwxOUg1VjVIMTlNMTksM0g1QTIsMiAwIDAsMCAzLDVWMTlBMiwyIDAgMCwwIDUsMjFIMTlBMiwyIDAgMCwwIDIxLDE5VjVDMjEsMy44OSAyMC4xLDMgMTksM00xMCw4VjE2TDE1LDEyTDEwLDhaIiAvPgo8L3N2Zz4=\");\r\n}\r\n\r\n\r\ndiv.as-ck-inline-short-text {\r\n    border: 1px solid #dddddd;\r\n    height: 30px;\r\n    line-height: 28px;\r\n    font-size: 14px;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    padding-left: var(--as-input-horizontal-padding);\r\n    padding-right: var(--as-input-horizontal-padding);\r\n    outline: none;\r\n    overflow: hidden;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-ck-inline-short-text p {\r\n    padding: 0;\r\n    margin: 0;\r\n}\r\n\r\n.as-ck-inline-short-text p::after {\r\n    content: \"\";\r\n}\r\n\r\n.as-ck-inline-short-text .cke_reset.cke_widget_drag_handler_container {\r\n    visibility: hidden;\r\n    opacity: 0;\r\n    display: none;\r\n}\r\n\r\n.cke.cke_browser_webkit {\r\n    z-index: 2000000 !important;\r\n}\r\n\r\n.cke.cke_browser_webkit.as-hidden {\r\n    opacity: 0;\r\n    visibility: hidden;\r\n    pointer-events: none;\r\n}\r\n\r\n.cke.as-has-sticky-toolbar {\r\n    border-top: none;\r\n}\r\n\r\n.cke.as-has-sticky-toolbar > .cke_inner > .cke_top {\r\n    border-top: 1px solid #d1d1d1;\r\n    z-index: 100;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-color-picker-button {\r\n    width: 45px;\r\n    height: 30px;\r\n    border-radius: 3px;\r\n    border: 1px solid #d6d6d6;\r\n    background-color: transparent;\r\n    padding: 5px;\r\n    outline: none;\r\n}\r\n\r\n.as-color-picker-button-inner {\r\n    height: 100%;\r\n    width: 100%;\r\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\r\n    background-size: 1.5em;\r\n    image-rendering: optimizeSpeed;\r\n    /* STOP SMOOTHING, GIVE ME SPEED  */\r\n    image-rendering: -moz-crisp-edges;\r\n    /* Firefox                        */\r\n    image-rendering: -o-crisp-edges;\r\n    /* Opera                          */\r\n    image-rendering: -webkit-optimize-contrast;\r\n    /* Chrome (and eventually Safari) */\r\n    image-rendering: pixelated;\r\n    /* Chrome */\r\n    image-rendering: optimize-contrast;\r\n    /* CSS3 Proposed                  */\r\n    -ms-interpolation-mode: nearest-neighbor;\r\n    /* IE8+                           */\r\n}\r\n\r\n.as-color-picker-button-inner-value {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.as-color-picker-button-fol {\r\n    z-index: 1000;\r\n}\r\n\r\n.as-color-picker-button[data-mode=\"HEX6\"] .as-null .as-color-cell-value {\r\n    display: none;\r\n}\r\n\r\n\r\n.absol-selectmenu {\r\n\r\n}\r\n\r\n.as-select-color-scheme-menu-dropdown {\r\n    font-size: 14px;\r\n    padding: 5px;\r\n}\r\n\r\n.as-select-color-scheme-menu {\r\n    box-sizing: border-box;\r\n    padding-right: 30px;\r\n    padding-left: 5px;\r\n}\r\n\r\n.as-select-color-scheme-menu::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: 100%;\r\n}\r\n\r\n.as-select-color-scheme-menu-selected-item {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-select-color-scheme-menu-selected-item .as-scsm-item-cell {\r\n    width: 20px;\r\n    height: 20px;\r\n}\r\n\r\n.as-scsm-item-list-row {\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-scsm-item-wrapper {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    padding: 7px;\r\n}\r\n\r\n.as-scsm-item {\r\n\r\n    border-radius: 4px;\r\n    overflow: hidden;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-scsm-item-wrapper:hover .as-scsm-item:not(.as-selected) {\r\n    box-shadow: 0px 0px 0px 2px rgba(107, 159, 255, 0.5);\r\n}\r\n\r\n.as-scsm-item.as-selected {\r\n    box-shadow: 0px 0px 0px 2px #1464f6;\r\n}\r\n\r\n.as-scsm-item-row {\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-scsm-item-cell {\r\n    width: 1.2em;\r\n    height: 1.2em;\r\n    display: inline-block;\r\n    vertical-align: top;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-text-input {\r\n    border-style: solid;\r\n    border-width: 1px;\r\n    border-radius: var(--as-input-border-radius);\r\n    border-color: var(--as-input-border-color);\r\n    outline: none;\r\n    height: var(--as-input-height);\r\n    padding-left: var(--as-input-vertical-padding);\r\n    font-size: inherit;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-text-input[readonly].as-border-none {\r\n    border: none;\r\n    padding-left: 0;\r\n    padding-right: 0;\r\n}\r\n\r\ninput[type=\"text\"].as-text-input:disabled,\r\ntextarea.as-text-input:disabled {\r\n    background-color: var(--as-disabled-background-color);\r\n}\r\n\r\n\r\n.as-blink-text {\r\n    --blink-duration: 1s;\r\n    --text-color: black;\r\n    animation-name: as-anim-text-blink-1-1;\r\n    animation-duration: var(--blink-duration);\r\n    animation-iteration-count: infinite;\r\n}\r\n\r\n\r\n@keyframes as-anim-text-blink-1-1 {\r\n    0% {\r\n        color: var(--text-color);\r\n    }\r\n    49% {\r\n        color: var(--text-color);\r\n    }\r\n    50% {\r\n        color: transparent;\r\n    }\r\n    99% {\r\n        color: transparent;\r\n    }\r\n    100% {\r\n        color: var(--text-color);\r\n    }\r\n}\r\n\r\n.as-mti-star {\r\n    font-family: 'Material Icons';\r\n    color: #ffa834;\r\n    font-size: var(--icon-font-size);\r\n    -webkit-font-smoothing: antialiased;\r\n}\r\n\r\n.as-mti-star::before {\r\n    content: \"star\";\r\n}\r\n\r\n.as-cursor-pointer {\r\n    cursor: pointer;\r\n}\r\n\r\n\r\n.as-table-grid {\r\n    display: table;\r\n}\r\n\r\n.as-table-grid.as-inline {\r\n    display: inline-table;\r\n}\r\n\r\n.as-table-grid-row {\r\n    display: table-row;\r\n}\r\n\r\n\r\n.as-table-grid-cell {\r\n    display: table-cell;\r\n}\r\n\r\n\r\n.as-pseudo-align-child-center {\r\n    text-align: center;\r\n}\r\n\r\n.as-pseudo-align-child-center::before {\r\n    height: 100%;\r\n    content: \"\";\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n}\r\n\r\n.as-pseudo-align-child-center > * {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.as-transparent-button {\r\n    background-color: transparent;\r\n    border: none;\r\n    padding: 0;\r\n    margin: 0;\r\n    font-size: inherit;\r\n    color: var(--as-transparent-button-text-color);\r\n}\r\n\r\n.as-transparent-button:hover {\r\n    color: var(--as-transparent-button-text-hover-color);\r\n}\r\n\r\n\r\n.as-transparent-button:active {\r\n    color: var(--as-transparent-button-text-active-color);\r\n}\r\n\r\n.as-transparent-button .mdi {\r\n    font-size: 1.5em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-transparent-button > svg,\r\n.as-transparent-button > img {\r\n    width: 1.5em;\r\n    height: 1.5em;\r\n}\r\n\r\n\r\n.as-transparent-button.as-variant-danger {\r\n    color: var(--variant-color-danger)\r\n}\r\n\r\n.as-transparent-button.as-variant-danger:hover {\r\n    color: #c03542;\r\n}\r\n\r\n\r\n\r\n.as-transparent-button.as-variant-danger:active{\r\n    color: #ef0d23;\r\n}\r\n\r\nbutton.as-transparent-button:disabled {\r\n    color: #dddddd;\r\n}\r\n\r\n.as-section-text-n-line {\r\n    position: relative;\r\n    display: block;\r\n    padding-bottom: 5px;\r\n}\r\n\r\n.as-section-text-n-line span {\r\n    background-color: white;\r\n    position: relative;\r\n    z-index: 2;\r\n    padding-right: 5px;\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.as-section-text-n-line::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    z-index: 1;\r\n    left: 0;\r\n    right: 0;\r\n    top: calc(50% - 1px);\r\n    border-top: 1px solid #dddddd;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-compact-data-grid-editor {\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n    border: 1px solid #dddddd;\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n\r\n.as-cag-var-mng {\r\n    padding: 10px;\r\n    border-bottom: 1px solid #dddddd;\r\n    background-color: #fefefe;\r\n}\r\n\r\n.as-cag-var {\r\n    display: inline-block;\r\n    padding: 5px 10px;\r\n    background-color: #0a90eb;\r\n    border-radius: 5px;\r\n\r\n    color: white;\r\n    cursor: move;\r\n    user-select: none;\r\n}\r\n\r\n.as-cag-var::after {\r\n    content: attr(data-default-title);\r\n}\r\n\r\n.as-cag-var:not([data-default-title]) {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-cag-var.as-focus{\r\n    box-shadow:0px 0px 2px 2px rgba(255, 153, 0, 0.75);\r\n}\r\n\r\n/*.as-cag-var::before {*/\r\n/*    content: \"[title]: \";*/\r\n/*}*/\r\n\r\n.as-cag-var[data-title]::before {\r\n    content: attr(data-title) \": \";\r\n    font-style: italic;\r\n\r\n}\r\n\r\n.as-cag-var[data-title=\"\"]::before {\r\n    display: none;\r\n}\r\n\r\n.as-cag-var-mng .as-cag-var {\r\n    margin-bottom: 5px;\r\n}\r\n\r\n.as-cag-var:not(:last-child) {\r\n    margin-right: 10px;\r\n}\r\n\r\n\r\n.as-cdg-table {\r\n    margin: 15px;\r\n    border-collapse: collapse;\r\n    user-select: none;\r\n}\r\n\r\n\r\n.as-ca-cell:empty {\r\n    padding: 10px 30px;\r\n    text-align: center;\r\n}\r\n\r\n.as-ca-cell:empty::before {\r\n    content: \"+\";\r\n    font-size: 1.1em;\r\n    color: #1da1ff;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-ca-cell {\r\n    border: 1px dashed rgba(150, 150, 250, 0.3);\r\n    white-space: nowrap;\r\n    padding: 5px 20px;\r\n    position: relative;\r\n}\r\n\r\n.as-ca-cell.as-hovering,\r\n.as-ca-cell.as-hovering.as-selected {\r\n    background-color: rgba(78, 246, 162, 0.15);\r\n}\r\n\r\n\r\n.as-ca-cell.as-selected {\r\n    background-color: rgba(78, 222, 246, 0.25);\r\n}\r\n\r\n.as-ca-cell.as-drag-over::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    right: 0;\r\n    display: block;\r\n    border: 2px solid #ff922a;\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n\r\n.as-cdg-variable-edit-dialog .as-table-grid-cell{\r\n    padding: 5px 10px;\r\n}\r\n.as-cdg-variable-edit-dialog button{\r\n    min-width: 100px;\r\n}\r\n\r\n\r\n.as-cdg-variable-edit-dialog input[type=\"text\"] {\r\n    width: 200px;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-date-input {\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 1rem;\r\n    border: 1px solid #ddd;\r\n    border-radius: 3px;\r\n    height: calc(2em + 2px);\r\n    width: 10.5em;\r\n    box-sizing: border-box;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    position: relative;\r\n    background-color: white;\r\n    overflow: hidden;\r\n}\r\n\r\n.as-date-input-text {\r\n    outline: none;\r\n    width: calc(100% - 29px);\r\n    height: 100%;\r\n    border: none;\r\n    background-color: transparent;\r\n    display: block;\r\n    padding: 0 0 0 var(--as-input-horizontal-padding);\r\n    font: inherit;\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n.as-date-input-icon-ctn {\r\n    font-size: inherit;\r\n    border-left: 1px solid #ddd;\r\n    border-right: none;\r\n    border-top: none;\r\n    border-bottom: none;\r\n    text-align: center;\r\n    position: absolute;\r\n    right: 0;\r\n    width: calc(2em + 1px);\r\n    box-sizing: border-box;\r\n    top: 0;\r\n    height: 100%;\r\n    background-color: rgba(169, 169, 169, 0.1);\r\n    cursor: pointer;\r\n    color: black;\r\n    padding: 0;\r\n}\r\n\r\n\r\n.as-date-input-icon-ctn:hover {\r\n    background-color: rgba(169, 169, 169, 0.25);\r\n}\r\n\r\n.as-date-input-icon-ctn:active {\r\n    background-color: rgba(169, 169, 169, 0.5);\r\n}\r\n\r\n\r\n.as-date-input-icon-ctn > span {\r\n    line-height: 28px;\r\n    font-size: calc(16em / 14);\r\n    display: inline-block;\r\n    padding: 0;\r\n}\r\n\r\n.as-date-input.as-read-only .as-date-input-icon-ctn {\r\n    pointer-events: none;\r\n}\r\n\r\n.as-date-input.as-disabled {\r\n    color: var(--as-disabled-text-color);\r\n    pointer-events: none;\r\n}\r\n\r\n.as-date-input.as-disabled input {\r\n    background-color: var(--as-disabled-background-color);\r\n}\r\n\r\n.as-date-input.as-value-null .as-date-input-clear-btn,\r\n.as-date-input.as-must-not-null .as-date-input-clear-btn {\r\n    display: none;\r\n}\r\n\r\n.as-date-input-clear-btn {\r\n    font-size: inherit;\r\n    position: absolute;\r\n    right: 2em;\r\n    height: 2em;\r\n    padding: 0 0.3em;\r\n    top: calc(50% - 1em);\r\n    box-sizing: border-box;\r\n    background-color: transparent;\r\n    border: none;\r\n    color: #bbb;\r\n    visibility: hidden;\r\n}\r\n\r\n.as-date-input.as-read-only .as-date-input-clear-btn {\r\n    display: none;\r\n}\r\n\r\n.as-date-input-clear-btn:hover {\r\n    color: rgb(132, 132, 132)\r\n}\r\n\r\n.as-date-input-clear-btn:active {\r\n    color: #525555;\r\n}\r\n\r\n.as-date-input-text:focus + .as-date-input-clear-btn,\r\n.as-date-input:hover .as-date-input-clear-btn {\r\n    visibility: visible;\r\n}\r\n\r\n.as-date-input.as-border-none {\r\n    border: transparent;\r\n    background-color: transparent;\r\n}\r\n\r\n.as-date-input.as-border-none .as-date-input-icon-ctn {\r\n    display: none;\r\n}\r\n\r\n.as-date-input.as-border-none .as-date-input-text {\r\n    width: 100%;\r\n    padding-left: 0;\r\n}\r\n\r\n.as-date-n-level-input {\r\n    white-space: nowrap;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    margin: 5px;\r\n    position: relative;\r\n    width: 13.5em;\r\n    height: calc(2em + 2px);\r\n}\r\n\r\n.as-date-n-level-input .as-date-input {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.as-date-n-level-input-select-level {\r\n    position: absolute;\r\n    left: 1px;\r\n    top: 1px;\r\n    width: 2em;\r\n    height: 2em;\r\n    padding: 0;\r\n}\r\n\r\n\r\n.as-date-n-level-input.as-disabled .as-date-n-level-input-select-level {\r\n    opacity: 0.5;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-date-n-level-input.as-read-only .as-date-n-level-input-select-level {\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n.as-date-n-level-input .as-date-input-text {\r\n    padding-left: calc(var(--as-input-horizontal-padding) + 2em);\r\n    width: calc(100% - 2em - 1px);\r\n    box-sizing: border-box;\r\n}\r\n\r\n\r\n.as-date-n-level-input.as-border-none.as-read-only .as-date-input {\r\n    border: none;\r\n}\r\n\r\n\r\n.as-date-n-level-input.as-border-none.as-read-only .as-date-input-text {\r\n    width: 100%;\r\n    text-align: left;\r\n    padding-left: 0;\r\n}\r\n.as-date-n-level-input.as-border-none.as-read-only button {\r\n    display: none;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-date-in-year-follower {\r\n    z-index: 900000000;\r\n}\r\n\r\n.as-date-in-year-picker {\r\n    font-size: 1rem;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    /*width: 20em;*/\r\n    box-sizing: border-box;\r\n    border: 1px solid #dddddd;\r\n    display: inline-block;\r\n    padding: calc(10em / 14) calc(5rem / 14);\r\n    box-shadow: 1px 1px 2px rgb(240, 240, 240);\r\n    background-color: white;\r\n}\r\n\r\n\r\n.as-date-in-year-picker-table {\r\n    display: table;\r\n}\r\n\r\n.as-date-in-year-picker-row {\r\n    display: table-row;\r\n}\r\n\r\n\r\n.as-date-in-year-picker-row:first-child {\r\n    text-align: center;\r\n    line-height: 1.5;\r\n}\r\n\r\n.as-date-in-year-picker-cell {\r\n    display: table-cell;\r\n}\r\n\r\n\r\n.as-date-in-year-picker-cell:first-child {\r\n    padding-right: 10px;\r\n}\r\n\r\n\r\n.as-date-in-year-picker-month-col {\r\n    position: relative;\r\n    padding-top: calc(25em / 14);\r\n    padding-bottom: calc(25em / 14);\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-date-in-year-picker-month-viewport {\r\n    width: calc(50em / 14);\r\n    overflow: hidden;\r\n\r\n}\r\n\r\n.as-date-in-year-picker-month-scroller {\r\n    width: calc(100% + 17px);\r\n    height: 8em;\r\n    overflow-y: scroll;\r\n    box-sizing: border-box;\r\n}\r\n\r\n\r\nbutton.as-date-in-year-picker-month {\r\n    font-size: inherit;\r\n    height: 2em;\r\n    width: calc(50em / 14);\r\n    padding: 0;\r\n    border: none;\r\n    background-color: transparent;\r\n}\r\n\r\nbutton.as-date-in-year-picker-month:hover {\r\n    background-color: rgb(224, 245, 256);\r\n}\r\n\r\nbutton.as-date-in-year-picker-month.as-selected {\r\n    background-color: rgb(188, 205, 236);\r\n    border-radius: 3px;\r\n}\r\n\r\nbutton.as-date-in-year-picker-month > span {\r\n    font-size: calc(16rem / 14);\r\n}\r\n\r\n\r\n.as-chrome-time-picker-scroller-up:hover,\r\n.as-chrome-time-picker-scroller-down:hover {\r\n    background-color: rgba(169, 169, 169, 0.2);\r\n}\r\n\r\n\r\n.as-date-in-year-picker-month-btn {\r\n    position: absolute;\r\n    left: 0;\r\n    font-size: inherit;\r\n    height: calc(20em / 14);\r\n    width: calc(50em / 14);\r\n    padding: 0;\r\n    border: none;\r\n    background-color: transparent;\r\n    box-sizing: border-box;\r\n    border-radius: 3px;\r\n}\r\n\r\n.as-date-in-year-picker-month-btn.as-up {\r\n    top: 0;\r\n}\r\n\r\n.as-date-in-year-picker-month-btn.as-down {\r\n    bottom: 0;\r\n}\r\n\r\n\r\n.as-date-in-year-picker-month-btn:hover {\r\n    background-color: rgba(169, 169, 169, 0.2);\r\n}\r\n\r\n.as-date-in-year-picker-month-btn > span {\r\n    font-size: 1.5em;\r\n    user-select: none;\r\n    -moz-user-select: none;\r\n    -webkit-user-select: none;\r\n}\r\n\r\n\r\n.as-date-in-year-picker-days {\r\n    display: inline-table;\r\n    vertical-align: middle;\r\n    border: solid 1px rgb(190, 190, 190);\r\n}\r\n\r\n.as-date-in-year-picker-week {\r\n    display: table-row;\r\n}\r\n\r\n.as-date-in-year-picker-day {\r\n    display: table-cell;\r\n    text-align: right;\r\n    padding: calc(5em / 14);\r\n    line-height: calc(20em / 14);\r\n    font-size: inherit;\r\n    user-select: none;\r\n    -moz-user-select: none;\r\n    -webkit-user-select: none;\r\n}\r\n\r\n\r\n.as-date-in-year-picker-day:hover {\r\n    background-color: rgb(224, 245, 256);\r\n    cursor: default;\r\n}\r\n\r\n.as-date-in-year-picker-day.as-selected {\r\n    background-color: rgb(188, 205, 236);\r\n}\r\n\r\n\r\n.as-date-time-input.as-date-in-year-input {\r\n    width: calc(8em + 2px);\r\n}\r\n\r\n.as-date-in-year-input.as-must-not-null .as-time-input-clear-btn,\r\n.as-date-in-year-input.as-empty .as-time-input-clear-btn {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-date-in-year-follower {\r\n    z-index: 1000000;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --as-input-height: calc(2rem + 2px);\r\n    --as-input-font-size: 1rem;\r\n    --as-input-font-family: Arial, Helvetica, sans-serif;\r\n    --as-input-vertical-padding: 0.3571em;\r\n    --as-input-horizontal-padding: 0.5em;\r\n    --as-input-border-color: #ddd;\r\n    --as-input-border-radius: 3px;\r\n    --as-context-menu-font-size: 1rem;\r\n    --as-context-font-family: Arial, Helvetica, sans-serif;\r\n    --as-disabled-background-color: #ebebe4;\r\n    --as-disabled-text-color: rgb(102, 102, 102);\r\n    --icon-background-cover-hover: #91e4fb;\r\n    --as-transparent-button-hover-color: rgba(169, 169, 172, 0.1);\r\n    --as-transparent-button-focus-color:  rgba(20, 185, 235, 0.3);\r\n    --as-transparent-button-active-color:  rgba(169, 169, 172, 0.2);\r\n    --as-transparent-button-text-color: rgb(139, 139, 140);\r\n    --as-transparent-button-text-hover-color: rgb(107, 107, 107);\r\n    --as-transparent-button-text-active-color: rgb(0, 0, 0);\r\n\r\n    --modal-margin-top: 10vh;\r\n    --icon-font-size: 1.42857142857rem;\r\n}\r\n\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "\r\n/**********************************************************************************************************************/\r\ndiv.as-dropdown-box-common-style {\r\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    border: solid 1px rgb(100, 100, 255);\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    background-color: white;\r\n}\r\n\r\n.as-dropdown-box-footer {\r\n    height: calc(2em + 1px);\r\n    border-top: 1px solid #dddddd;\r\n    box-sizing: border-box;\r\n    padding-left: 0.35em;\r\n    white-space: nowrap;\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-dropdown-box-footer > *,\r\n.as-dropdown-box-footer::before,\r\n.as-dropdown-box-footer-right::before,\r\n.as-dropdown-box-footer-right > * {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-dropdown-box-footer-right::before,\r\n.as-dropdown-box-footer::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.as-dropdown-box-footer > *:not(:last-child) {\r\n    margin-right: 6.5em;\r\n}\r\n\r\n.as-dropdown-box-footer .absol-checkbox-label.as-right {\r\n    padding-left: 0.35em;\r\n}\r\n\r\n.as-dropdown-box-footer-right {\r\n    position: absolute;\r\n    right: 10px;\r\n    top: 0;\r\n    height: 100%;\r\n}\r\n\r\n.as-dropdown-box-footer a {\r\n    cursor: pointer;\r\n    margin-left: 30px;\r\n}\r\n\r\n.as-dropdown-box-footer a:hover {\r\n    color: #1da1ff;\r\n}\r\n\r\n.as-dropdown-box-footer a.as-select-list-box-cancel-btn {\r\n    color: #888888;\r\n}\r\n\r\n.as-dropdown-box-footer a.as-select-list-box-close-btn {\r\n    padding: 0 10px;\r\n}\r\n\r\n.as-dropdown-box-footer a.as-select-list-box-cancel-btn:hover {\r\n    color: #ea2121;\r\n}\r\n\r\n/********** MOBILE ***************/\r\n\r\n.am-modal.am-dropdown-box-modal{\r\n    z-index: 100001000;\r\n}\r\n\r\n.am-dropdown-box {\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 1rem;\r\n    max-width: 95vw;\r\n}\r\n\r\n.am-dropdown-box.as-enable-search .absol-search-text-input,\r\n.am-dropdown-box-modal.as-enable-search .absol-search-text-input\r\n{\r\n    visibility: visible;\r\n}\r\n\r\n.am-dropdown-box-header {\r\n    height: calc(2em + 10px);\r\n    display: block;\r\n    white-space: nowrap;\r\n    box-sizing: border-box;\r\n    padding-top: 5px;\r\n    padding-bottom: 5px;\r\n    padding-left: 10px;\r\n    border-bottom: solid 1px #dddddd;\r\n}\r\n\r\n.am-dropdown-box-header .absol-search-text-input {\r\n    display: inline-block;\r\n    width: calc(100% - 2em - 18px);\r\n    vertical-align: middle;\r\n    box-sizing: border-box;\r\n    background-color: white;\r\n    visibility: hidden;\r\n}\r\n\r\n.am-dropdown-box-close-btn {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    border-radius: 50%;\r\n    padding: 0;\r\n    height: 2em;\r\n    width: 2em;\r\n    font-size: inherit;\r\n    border: none;\r\n    outline: none;\r\n    margin-left: 10px;\r\n    background-color: rgb(255, 255, 255);\r\n    color: #7a7a7a;\r\n    white-space: nowrap;\r\n}\r\n\r\n.am-dropdown-box-close-btn span {\r\n    font-size: 1.5em;\r\n}\r\n\r\n.am-dropdown-box-close-btn:active {\r\n    background-color: rgba(169, 169, 172, 0.3);\r\n}\r\n\r\n.am-dropdown-box-item {\r\n    border-bottom: 1px solid #efefef;\r\n}\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".am-dual-select-box {\r\n\r\n}\r\n\r\n\r\n.am-dual-select-box .absol-selectlist-item span {\r\n    white-space: normal;\r\n    display: inline-block;\r\n    margin-right: 0;\r\n    line-height: calc(30rem / 14);\r\n}\r\n\r\n.am-mobile-theme.bsc-white .am-dual-select-box .absol-selectlist-item span{\r\n    line-height: calc(30rem / 14);\r\n}\r\n\r\n.am-dual-select-box .absol-selectlist-item {\r\n    height: auto;\r\n}\r\n\r\n.am-mobile-theme.bsc-white .am-dual-select-box .absol-selectlist-item {\r\n    height: auto;\r\n}\r\n\r\n.am-dual-select-box .absol-selectlist-item:not(:last-child) {\r\n    border-bottom: 1px solid #efefef;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-dual-select-box {\r\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    --max-height: 70vh;\r\n    box-sizing: border-box;\r\n    --dual-list-estimate-width: 0;\r\n    width: var(--dual-list-estimate-width);\r\n    z-index: 10000000;\r\n    background-color: white;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    font-size: 1rem;\r\n\r\n}\r\n\r\n.as-dual-select-box-search-ctn {\r\n    padding: 5px;\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n}\r\n\r\n.as-dual-select-box.as-enable-search.as-anchor-6 .as-dual-select-box-search-ctn,\r\n.as-dual-select-box.as-enable-search.as-anchor-5 .as-dual-select-box-search-ctn {\r\n    bottom: 0;\r\n}\r\n\r\n.as-dual-select-box.as-enable-search.as-anchor-6,\r\n.as-dual-select-box.as-enable-search.as-anchor-5 {\r\n    padding-bottom: calc(2rem + 10px);\r\n}\r\n\r\n.as-dual-select-box.as-enable-search.as-anchor-1,\r\n.as-dual-select-box.as-enable-search.as-anchor-2 {\r\n    padding-top: calc(2rem + 10px);\r\n}\r\n\r\n.as-dual-select-box.as-enable-search.as-anchor-1 .as-dual-select-box-search-ctn,\r\n.as-dual-select-box.as-enable-search.as-anchor-2 .as-dual-select-box-search-ctn {\r\n    top: 0;\r\n}\r\n\r\n\r\n.as-dual-select-box-list-ctn {\r\n    white-space: nowrap;\r\n    display: flex;\r\n    align-items: stretch;\r\n}\r\n\r\n.as-dual-select-box:not(.as-enable-search) .as-dual-select-box-search-ctn {\r\n    display: none;\r\n}\r\n\r\n.as-dual-select-box-list {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    max-height: calc(var(--max-height) - 2em - 2em - 11px);\r\n    overflow-y: auto;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-dual-select-box.as-enable-search .as-dual-select-box-list {\r\n    max-height: calc(var(--max-height) - 6rem - 11px);\r\n}\r\n\r\n.as-dual-select-box-arrow-ctn {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n}\r\n\r\n.as-dual-select-box-arrow-ctn::before,\r\n.as-dual-select-box-arrow-ctn span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-dual-select-box-arrow-ctn::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n\r\n.as-dual-select-box-list:first-child {\r\n    border-right: solid 1px #dddddd;\r\n}\r\n\r\n\r\n.as-dual-select-box-list:last-child {\r\n    border-left: solid 1px #dddddd;\r\n    flex-grow: 1;\r\n}\r\n\r\n.as-dual-select-menu.absol-selectmenu {\r\n    min-width: calc(var(--dual-list-estimate-text-width) + 5.5em);\r\n    --dual-list-estimate-text-width: 20px;\r\n}\r\n\r\n\r\n.am-dual-select-menu .absol-selectmenu-holder-item{\r\n    position: relative;\r\n    height: 100%;\r\n    top: unset;\r\n    bottom: unset;\r\n}\r\n\r\n.am-dual-select-menu{\r\n    width: auto;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --table-row-height: 40px;\r\n}\r\n\r\n\r\n.as-efficient-table-wrapper {\r\n    box-sizing: border-box;\r\n    position: relative;\r\n    overflow: hidden;\r\n    overflow-anchor: none !important;\r\n    scroll-snap-stop: normal !important;\r\n    overscroll-behavior: unset !important;\r\n    scroll-behavior: unset !important;\r\n}\r\n\r\n.as-efficient-table-wrapper > .as-dynamic-table {\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper {\r\n    --dt-content-height: 0px;\r\n    --dt-scroll-bar-width: 17px;\r\n    --dt-content-width: 0;\r\n    --dt-header-height: 0;\r\n    --dt-fixed-x-width: 0;\r\n    --dt-dragging-row-height: 0;\r\n    position: relative;\r\n\r\n    /*padding-right: 17px;*/\r\n    /*padding-bottom: 17px;*/\r\n    box-sizing: border-box;\r\n    height: var(--dt-content-height);\r\n    overflow: hidden;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-width-match-parent {\r\n\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-table-layout-fixed table.as-dynamic-table {\r\n    table-layout: fixed;\r\n}\r\n\r\ntd .as-dynamic-table-wrapper .as-dt-header-cell {\r\n    --as-force-min-width: 0;\r\n}\r\n\r\n.as-dynamic-table-wrapper .as-dt-header-cell.as-col-width-auto::before { /*table in table bug*/\r\n    content: \"\";\r\n    display: block;\r\n    width: var(--as-force-min-width);\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-inline {\r\n    max-width: calc(var(--dt-content-width) + var(--dt-scroll-bar-width));\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-overflow-x.as-has-fixed-col .as-dynamic-table-viewport::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    top: 0;\r\n    bottom: 0;\r\n    border-right: 2px solid #aaa;\r\n    left: calc(var(--dt-fixed-x-width) - 1px);\r\n    z-index: 20;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-overflow-y .as-dynamic-table-viewport::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    width: 100%;\r\n    max-width: var(--dt-content-width);\r\n    border-top: 2px solid #aaa;\r\n    top: calc(var(--dt-header-height) - 1px);\r\n    z-index: 20;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-has-fixed-col {\r\n    max-width: var(--dt-content-width);\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-inline {\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-overflow-x {\r\n    padding-bottom: var(--dt-scroll-bar-width);\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-overflow-x {\r\n    height: calc(var(--dt-content-height) + var(--dt-scroll-bar-width));\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-overflow-x .as-dynamic-table-hb,\r\n.as-dynamic-table-wrapper.as-overflow-y .as-dynamic-table-vb {\r\n    display: block;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-overflow-y {\r\n    padding-right: var(--dt-scroll-bar-width);\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-overflow-y.as-has-fixed-col,\r\n.as-dynamic-table-wrapper.as-overflow-y:not(.as-width-match-parent) {\r\n    max-width: calc(var(--dt-content-width) + var(--dt-scroll-bar-width));\r\n}\r\n\r\n\r\n.as-dynamic-table-viewport {\r\n    width: 100%;\r\n    height: 100%;\r\n    overflow: hidden;\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-dynamic-table.as-dt-fixed-y,\r\n.as-dynamic-table.as-fixed-x {\r\n    table-layout: fixed;\r\n    width: auto;\r\n    /*display: inline-block;*/\r\n}\r\n\r\n.as-dynamic-table-fixed-x-ctn {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    z-index: 6;\r\n    display: none;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-has-fixed-col .as-dynamic-table-fixed-x-ctn {\r\n    display: block;\r\n}\r\n\r\n.as-dynamic-table-fixed-xy-ctn {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    z-index: 9;\r\n}\r\n\r\n\r\n.as-dynamic-table-fixed-y-ctn {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    z-index: 6;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-headless .as-dynamic-table-fixed-x-ctn,\r\n.as-dynamic-table-wrapper.as-headless .as-dynamic-table-fixed-y-ctn,\r\n.as-dynamic-table-wrapper.as-headless .as-dynamic-table-fixed-xy-ctn {\r\n    visibility: hidden;\r\n}\r\n\r\n.as-dynamic-table-space {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    width: 100%;\r\n}\r\n\r\n.as-dynamic-table-space > table {\r\n    vertical-align: top;\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-has-fixed-col .as-dynamic-table-space,\r\n.as-dynamic-table-wrapper.as-inline .as-dynamic-table-space {\r\n    width: 8096px;\r\n}\r\n\r\n\r\n.as-dynamic-table-vb {\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    height: 100%;\r\n    width: var(--dt-scroll-bar-width);\r\n    display: none;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-overflow-x .as-dynamic-table-vb {\r\n    height: calc(100% - var(--dt-scroll-bar-width));\r\n}\r\n\r\n.as-dynamic-table-hb {\r\n    position: absolute;\r\n    left: 0;\r\n    bottom: 0;\r\n    width: 100%;\r\n    height: var(--dt-scroll-bar-width);\r\n    display: none;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-overflow-y .as-dynamic-table-hb {\r\n    width: calc(100% - var(--dt-scroll-bar-width));\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-no-paging .absol-page-selector {\r\n    display: none;\r\n}\r\n\r\n.as-dynamic-table-wrapper .absol-page-selector[data-page-count=\"1\"] {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-dynamic-table-fixed-x-col {\r\n    display: none;\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    width: auto !important;\r\n    z-index: 12;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-has-fixed-col .as-dynamic-table-fixed-x-col {\r\n    display: block;\r\n}\r\n\r\n.as-dynamic-table {\r\n    font-size: 1rem;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    border-collapse: collapse;\r\n    box-sizing: border-box;\r\n    display: inline-table;\r\n    table-layout: fixed;\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper:not(.as-inline) .as-dynamic-table-space .as-dynamic-table {\r\n    /*min-width: 100%;*/\r\n    table-layout: auto;\r\n    /*display: table;*/\r\n}\r\n\r\n.as-dt-header {\r\n    background-color: #d6d6d6;\r\n}\r\n\r\n.as-dt-header-cell {\r\n    font-weight: bold;\r\n    padding: 10px;\r\n    border: 1px solid #ababab;\r\n    position: relative;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-dt-header-cell-resizer {\r\n    position: absolute;\r\n    right: -2px;\r\n    top: 0;\r\n    bottom: 0;\r\n    border-right: 4px solid transparent;\r\n    z-index: 5;\r\n    cursor: col-resize;\r\n    /*display: none;*/\r\n}\r\n\r\n/*\r\n.as-dynamic-table-wrapper[id] .as-dt-header-cell[data-col-id] .as-dt-header-cell-resizer {\r\n    display: block;\r\n}*/\r\n\r\n.as-dt-header-cell[data-sort-key] {\r\n    padding-right: 1.75em;\r\n    cursor: pointer;\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n    -moz-user-select: none;\r\n}\r\n\r\n.as-dt-sort-btn {\r\n    display: none;\r\n    vertical-align: middle;\r\n    line-height: 1.5em;\r\n    position: absolute;\r\n    right: 0.25em;\r\n    top: calc(50% - 0.75em);\r\n    /*color: #a9a9a9;*/\r\n\r\n    height: 1.5em;\r\n    width: 1.5em;\r\n    pointer-events: none;\r\n    color: transparent;\r\n}\r\n\r\n.as-dt-header-cell[data-sort-key] .as-dt-sort-btn {\r\n    display: inline-block;\r\n}\r\n\r\n.as-dt-header-cell[data-sort-order=\"ascending\"] .as-dt-sort-btn .mdi-menu-down,\r\n.as-dt-header-cell[data-sort-order=\"descending\"] .as-dt-sort-btn .mdi-menu-up {\r\n    color: #007bff;\r\n}\r\n\r\n.as-dt-sort-btn span {\r\n    position: absolute;\r\n    display: inline-block;\r\n    left: 0;\r\n    font-size: 2em;\r\n\r\n}\r\n\r\n.as-dt-sort-btn .mdi-menu-up {\r\n    bottom: 0.18em;\r\n}\r\n\r\n\r\n.as-dt-sort-btn .mdi-menu-down {\r\n    top: 0.18em;\r\n}\r\n\r\n\r\n.as-dt-body-row:nth-child(odd) {\r\n    background-color: rgb(245, 245, 245);\r\n}\r\n\r\n.as-dt-body-row:nth-child(even) {\r\n    background-color: white;\r\n}\r\n\r\n.as-dt-body-cell {\r\n    padding: 4px 5px;\r\n    border: 1px solid #ddd;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-dt-body-row .as-drag-zone .mdi,\r\n.as-tree-table-row .as-drag-zone .mdi {\r\n    font-size: 25px;\r\n}\r\n\r\n\r\n.as-dt-body-row {\r\n    height: calc(40em / 14);\r\n}\r\n\r\n.as-dt-body-row {\r\n    height: var(--table-row-height);\r\n}\r\n\r\n.as-dynamic-table-wrapper:not(.as-searching) .as-dt-body-row .as-drag-zone,\r\n.as-tree-table:not(.as-searching) .as-tree-table-row .as-drag-zone {\r\n    cursor: move;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-row-dragging .as-dt-body-row {\r\n    transition: transform 0.2s;\r\n}\r\n\r\n.as-dt-body-row.as-dragging {\r\n    opacity: 0.0;\r\n    /*position: relative;*/\r\n    /*z-index: 1000000;*/\r\n\r\n    /*opacity: 0.8;*/\r\n}\r\n\r\n\r\n.as-dt-body-row.as-after-dragging {\r\n\r\n}\r\n\r\n\r\n.as-dt-body-row-cloned-ctn {\r\n    position: fixed;\r\n    cursor: move;\r\n    opacity: 0.7;\r\n    -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n\r\n}\r\n\r\n.as-dt-body-row-cloned-ctn > table {\r\n    display: block;\r\n}\r\n\r\n.as-dt-body-row.as-drag-neighbor {\r\n    position: relative;\r\n    z-index: 1;\r\n    transition: transform 0.05s;\r\n\r\n}\r\n\r\n.as-dt-body-row.as-dragging.as-homing {\r\n    transition: transform 0.06s;\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-searching .as-drag-zone {\r\n    opacity: 0.3;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-dynamic-table-wrapper .as-drag-zone {\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n    -moz-user-select: none;\r\n}\r\n\r\n.as-dt-insert-line {\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    border-top: 2px solid blue;\r\n}\r\n\r\n.as-dt-body-cell > .absol-checkbox:last-child:first-child {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-dt-row-index::before {\r\n    content: attr(data-idx);\r\n}\r\n\r\n.as-dt-row-index:not([data-idx])::before {\r\n    content: \"000\";\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-header-cell,\r\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-body-cell {\r\n    border: none;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-header,\r\n.as-dynamic-table-wrapper.as-no-graphic .as-dt-body-row {\r\n    background-color: transparent;\r\n}\r\n\r\n\r\n.absol-single-page-scroller-viewport .as-dynamic-table-wrapper:not(.as-adapt-infinity-grow) {\r\n    max-height: calc(var(--single-page-scroller-height) - 20px);\r\n}\r\n\r\n.absol-single-page-scroller-viewport > div:last-child .as-dynamic-table-wrapper:not(.as-adapt-infinity-grow) {\r\n    max-height: calc(var(--single-page-scroller-height) - 20px - 22px);\r\n}\r\n\r\n.absol-single-page-scroller-viewport > div:last-child .as-dynamic-table-wrapper.as-overflow-y:not(.as-adapt-infinity-grow) {\r\n    max-height: calc(var(--single-page-scroller-height) - 20px - 39px);\r\n}\r\n\r\n\r\n/*Keeview modal*/\r\nbody > div > table .as-dynamic-table-wrapper {\r\n    width: var(--dt-content-width);\r\n    max-width: calc(90vw - 50px);\r\n}\r\n\r\nbody > div > table .as-dynamic-table-wrapper.as-overflow-y {\r\n    width: calc(var(--dt-content-width) + var(--dt-scroll-bar-width));\r\n    max-width: calc(90vw - 50px);\r\n}\r\n\r\n/*.as-dynamic-table-wrapper*/\r\n\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "/*.as-expression-input {*/\r\n/*    box-sizing: border-box;*/\r\n/*    border: 1px solid var(--as-input-border-color);*/\r\n/*    min-height: var(--as-input-height);*/\r\n\r\n/*}*/\r\n\r\n/*.as-expression-input-content {*/\r\n/*    font-size: 14px;*/\r\n/*    line-height: 2;*/\r\n/*    min-height: 2em;*/\r\n/*}*/\r\n\r\n/*.as-expression-input-content::before{*/\r\n/*    content: \"=\";*/\r\n/*    color: #aaaaaa;*/\r\n/*    display: inline-block;*/\r\n/*    height: 28px;*/\r\n/*    vertical-align: middle;*/\r\n/*    padding: 0 5px;*/\r\n/*}*/\r\n\r\n/*.asei-identifier{*/\r\n/*    display: inline-block;*/\r\n/*}*/\r\n\r\n\r\n.as-expression-input {\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    border-color: var(--as-input-border-color);\r\n    border-style: solid;\r\n    box-sizing: border-box;\r\n    border-width: 1px;\r\n    border-radius: var(--as-input-border-radius);\r\n    font-size: 14px;\r\n    position: relative;\r\n}\r\n\r\n.as-expression-input-content {\r\n    min-height: 28px;\r\n    outline: none;\r\n    line-height: 28px;\r\n    padding-left: calc(18px + var(--as-input-horizontal-padding));\r\n    white-space: pre;\r\n}\r\n\r\n.as-expression-input-content .as-token[data-type=\"number\"] {\r\n    color: #0289f6;\r\n}\r\n\r\n.as-expression-input-content .as-token[data-type=\"string\"] {\r\n    color: darkgreen;\r\n}\r\n\r\n\r\n.as-expression-input-icon-ctn {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    pointer-events: none;\r\n    font-size: 1.5em;\r\n    line-height: 28px;\r\n}\r\n\r\n.as-expression-input-icon-ctn .mdi-equal {\r\n    color: rgba(169, 169, 170);\r\n}\r\n\r\n.as-expression-input-icon-ctn .mdi-alert-circle {\r\n    color: red;\r\n    opacity: 0.8;\r\n    display: none;\r\n}\r\n\r\n\r\n.as-expression-input.as-error .as-expression-input-icon-ctn .mdi-alert-circle {\r\n    display: inline-block;\r\n}\r\n\r\n.as-expression-input.as-error .as-expression-input-icon-ctn .mdi-equal {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-token.as-unexpected-token {\r\n    background-color: red;\r\n    animation-name: error_blink;\r\n    animation-duration: 1s;\r\n    animation-iteration-count: infinite;\r\n}\r\n\r\n@keyframes error_blink {\r\n    0% {\r\n        background-color: red\r\n    }\r\n    50% {\r\n        background-color: transparent\r\n    }\r\n    100% {\r\n        background-color: red\r\n    }\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-file-input-box {\r\n    font-size: 14px;\r\n    position: relative;\r\n    width: 100px;\r\n    height: 100px;\r\n    box-sizing: border-box;\r\n    border: 1px solid #dddddd;\r\n    background-color: white;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    overflow: visible;\r\n}\r\n\r\n.as-file-input-box-trigger:hover + .as-file-input-box-upload-overlay,\r\n.as-file-input-box-trigger.as-drag-over + .as-file-input-box-upload-overlay {\r\n    display: block;\r\n}\r\n\r\n.as-file-input-box-trigger input {\r\n    visibility: hidden;\r\n    opacity: 0;\r\n}\r\n\r\n.as-file-input-box-upload-overlay {\r\n    display: none;\r\n    pointer-events: none;\r\n    background-color: rgba(30, 30, 80, 0.3);\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    z-index: 5;\r\n    overflow: hidden;\r\n    text-align: center;\r\n    white-space: nowrap;\r\n    font-size: 3em;\r\n    color: #b0fffb;\r\n}\r\n\r\n.as-file-input-box-upload-overlay::before,\r\n.as-file-input-box-upload-overlay > span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-file-input-box-upload-overlay::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n\r\n.as-file-input-box-trigger {\r\n    position: absolute;\r\n    z-index: 2;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    opacity: 0;\r\n}\r\n\r\n.as-file-input-box:not(.as-has-file-name) .as-file-input-box-file-name,\r\n.as-file-input-box:not(.as-has-file-name) .as-file-input-box-file-name + br,\r\n.as-file-input-box:not(.as-has-file-size) .as-file-input-box-file-size,\r\n.as-file-input-box:not(.as-has-value) .as-file-input-box-action-left,\r\n.as-file-input-box:not(.as-has-value) .as-file-input-box-action-right,\r\n.as-file-input-box:not(.as-downloadable) .as-file-input-box-action-right,\r\n.as-file-input-box:not(.as-removable) .as-file-input-box-action-left,\r\n.as-file-input-box:not(.as-allow-upload) .as-file-input-box-trigger {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-file-input-box-background {\r\n    position: absolute;\r\n    z-index: 1;\r\n    left: 4%;\r\n    top: 4%;\r\n    right: 4%;\r\n    bottom: 4%;\r\n    background-size: contain;\r\n    background-repeat: no-repeat;\r\n    background-position: center;\r\n    overflow: hidden;\r\n}\r\n\r\n.as-file-input-box.as-allow-upload .as-file-input-box-background {\r\n    background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij4NCiAgIDxwYXRoIGZpbGw9IiNhYWFhYWEiIGQ9Ik0xMyw5SDE4LjVMMTMsMy41VjlNNiwySDE0TDIwLDhWMjBBMiwyIDAgMCwxIDE4LDIySDZDNC44OSwyMiA0LDIxLjEgNCwyMFY0QzQsMi44OSA0Ljg5LDIgNiwyTTExLDE1VjEySDlWMTVINlYxN0g5VjIwSDExVjE3SDE0VjE1SDExWiIgLz4NCjwvc3ZnPg==);\r\n}\r\n\r\n\r\n.as-file-input-box-info {\r\n    position: absolute;\r\n    bottom: 0;\r\n    left: 0;\r\n    right: 0;\r\n    padding: 2px;\r\n    z-index: 3;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    background-color: rgba(255, 255, 255, 0.3);\r\n    pointer-events: none;\r\n    text-align: center;\r\n}\r\n\r\n.as-file-input-box-file-name {\r\n    font-size: inherit;\r\n    color: black;\r\n    text-shadow: 0 0 5px white;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-file-input-box-action-left,\r\n.as-file-input-box-action-right {\r\n    position: absolute;\r\n    z-index: 6;\r\n    top: 0;\r\n}\r\n\r\n\r\n.as-file-input-box-action-left {\r\n    left: 0;\r\n}\r\n\r\n\r\n.as-file-input-box-action-right {\r\n    right: 0;\r\n}\r\n\r\n.as-file-input-box button {\r\n    height: 2em;\r\n    width: 2em;\r\n    padding: 0;\r\n    border: none;\r\n    background-color: rgba(255, 255, 255, 0.3);\r\n    border-radius: 0;\r\n}\r\n\r\n.as-file-input-box button span {\r\n    font-size: 1.5em;\r\n}\r\n\r\n.as-file-input-box .mdi-close {\r\n    color: rgb(250, 100, 100);\r\n}\r\n\r\n.as-file-input-box .mdi-download {\r\n    color: rgb(100, 100, 250);\r\n}\r\n\r\n.as-file-input-box button:hover .mdi-close {\r\n    color: rgb(250, 50, 50);\r\n}\r\n\r\n.as-file-input-box button:hover .mdi-download {\r\n    color: rgb(50, 50, 250);\r\n}\r\n\r\n.as-file-input-box button:active .mdi-close {\r\n    color: rgb(250, 0, 0);\r\n}\r\n\r\n.as-file-input-box button:active .mdi-download {\r\n    color: rgb(0, 0, 250);\r\n}\r\n\r\n.as-file-input-box-checked {\r\n    display: none;\r\n    box-sizing: border-box;\r\n    z-index: 4;\r\n    position: absolute;\r\n    left: -1px;\r\n    top: -1px;\r\n    bottom: -1px;\r\n    right: -1px;\r\n    pointer-events: none;\r\n    border: 3px solid #0a90eb;\r\n    overflow: hidden;\r\n}\r\n\r\n.as-file-input-box.as-checked .as-file-input-box-checked{\r\n    display: block;\r\n}\r\n\r\n.as-file-input-box-checked::before {\r\n    content: \"\";\r\n    display: block;\r\n    position: absolute;\r\n    right: -20px;\r\n    top: -20px;\r\n    width: 40px;\r\n    height: 40px;\r\n    transform: rotate(45deg);\r\n    background-color: #0a90eb;\r\n}\r\n\r\n.as-file-input-box-checked .mdi {\r\n    display: inline-block;\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    font-size: 14px;\r\n    color: white;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "\r\n.as-file-list-input {\r\n    padding: 5px;\r\n    border: 1px solid #dddddd;\r\n    box-sizing: border-box;\r\n    overflow: auto;\r\n    --item-width: 100%;\r\n    --item-require-width: 300px;\r\n    position: relative;\r\n    min-height: 42px;\r\n}\r\n\r\n.as-file-list-input.as-border-none {\r\n    border: none;\r\n    padding: 0;\r\n}\r\n\r\n.as-file-list-input.as-disabled {\r\n    background-color: var(--as-disabled-background-color);\r\n}\r\n\r\n.as-file-list-input.as-disabled > * {\r\n    opacity: 0.5;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-file-list-input-upload-overlay {\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    overflow: hidden;\r\n    text-align: center;\r\n    white-space: nowrap;\r\n    pointer-events: none;\r\n    background-color: rgba(30, 30, 80, 0.3);\r\n    color: #b0fffb;\r\n}\r\n\r\n.as-file-list-input-upload-overlay::before {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: 100%;\r\n    content: \"\";\r\n}\r\n\r\n.as-file-list-input-upload-overlay > span {\r\n    font-size: 30px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-file-list-input:not(.as-drag-over) .as-file-list-input-upload-overlay,\r\n.as-file-list-input:not(.as-droppable) .as-file-list-input-upload-overlay,\r\n.as-file-list-input:not(.as-droppable) .as-file-list-drag-file-text,\r\n.as-file-list-input.as-read-only .as-file-list-input-upload-overlay {\r\n    display: none;\r\n}\r\n\r\n/*span.mdi.mdi-upload*/\r\n\r\n.as-file-list-input .as-file-input-box {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    margin-right: 10px;\r\n}\r\n\r\n.as-file-list-input.as-read-only .as-file-list-input-add {\r\n    display: none;\r\n}\r\n\r\n.as-file-list-input-add {\r\n    border: none;\r\n    width: 3.5em;\r\n    border-radius: 5px;\r\n    background-color: rgba(235, 235, 235, 0.2);\r\n    height: calc(2em + 2px);\r\n    padding-bottom: 10px;\r\n    box-sizing: border-box;\r\n    display: inline-block;\r\n    overflow: hidden;\r\n    position: relative;\r\n    vertical-align: middle;\r\n    margin-right: 5px;\r\n    font-size: inherit;\r\n}\r\n\r\n\r\n.as-file-list-input-add:hover {\r\n    background-color: rgb(235, 235, 235);\r\n}\r\n\r\n.as-file-list-input-add:active {\r\n    background-color: rgb(212, 212, 212);\r\n}\r\n\r\n\r\n.as-file-list-input-add input {\r\n    opacity: 0;\r\n    visibility: hidden;\r\n}\r\n\r\n.as-file-list-input-add-icon-ctn {\r\n    font-size: 1.5em;\r\n    text-align: center;\r\n    color: rgb(100, 100, 250);\r\n    position: absolute;\r\n    top: 0;\r\n    bottom: 0;\r\n    left: 0;\r\n    right: 0;\r\n    white-space: nowrap;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-file-list-input-add-icon-ctn span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-file-list-input-add-icon-ctn::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: 100%;\r\n}\r\n\r\n.as-file-list-input.as-drag-over.as-droppable .as-file-list-input-add,\r\n.as-file-list-input.as-drag-over .as-file-list-drag-file-text {\r\n    visibility: hidden;\r\n}\r\n\r\n.as-file-list-item {\r\n    position: relative;\r\n    height: calc(2em + 2px);\r\n    font-size: 1rem;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    width: calc(var(--item-width) - 5px);\r\n    padding-left: 2.3em;\r\n    white-space: nowrap;\r\n    box-sizing: border-box;\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n    -moz-user-select: none;\r\n    padding-right: calc(2.3em + 5px);\r\n}\r\n\r\n.as-file-list-item .as-file-list-item-check {\r\n    display: none;\r\n    position: absolute;\r\n    left: 0.1em;\r\n    top:calc(50% - 1px - 0.5em);\r\n\r\n\r\n}\r\n\r\n\r\n.as-file-list-input.as-show-check .as-file-list-item .as-file-list-item-check {\r\n    display: block;\r\n}\r\n\r\n.as-file-list-input.as-show-check .as-file-list-item\r\n{\r\n    padding-left: 3.5em ;\r\n}\r\n\r\n.as-file-list-input.as-show-check .as-file-list-item .as-file-list-item-icon{\r\n    left: 1.2em;\r\n}\r\n\r\n.as-file-list-item-icon {\r\n    position: absolute;\r\n    left: 0;\r\n    top: calc(50% - 1em - 1px);\r\n    bottom: 0;\r\n    width: calc(2em + 2px);\r\n    height: calc(2em + 2px);\r\n}\r\n\r\n\r\n.as-file-list-item-name {\r\n    color: rgb(89, 89, 95);\r\n    display: inline-block;\r\n    overflow-x: hidden;\r\n    vertical-align: middle;\r\n    width: 100%;\r\n    text-overflow: ellipsis;\r\n    white-space: nowrap;\r\n    font-weight: bold;\r\n}\r\n\r\n\r\n.as-file-list-item::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    height: 100%;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.as-file-list-input .as-file-list-item {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    margin-bottom: 5px;\r\n    margin-right: 5px;\r\n}\r\n\r\n.as-file-list-input:not(.as-empty) .as-file-list-drag-file-text,\r\n.as-file-list-input.as-read-only .as-file-list-drag-file-text {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-file-list-item:hover {\r\n    background-color: rgba(169, 169, 172, 0.1);\r\n}\r\n\r\n\r\n.as-file-list-input .as-file-list-item:hover .as-file-list-item-quick-btn {\r\n    visibility: visible;\r\n}\r\n\r\n\r\n.as-file-list-item-quick-btn {\r\n    position: absolute;\r\n    border: none;\r\n    background-color: transparent;\r\n    outline: none;\r\n    border-radius: 3px;\r\n    height: 2em;\r\n    width: 2em;\r\n    font-size: inherit;\r\n    padding: 0;\r\n    right: 5px;\r\n    top: calc(50% - 1em);\r\n    visibility: hidden;\r\n}\r\n\r\n\r\n.as-file-list-item-quick-btn.as-quick-menu-attached {\r\n    display: block;\r\n}\r\n\r\n.as-file-list-item-quick-btn > span {\r\n    font-size: 1.2em;\r\n}\r\n\r\n\r\n.as-file-list-item-quick-btn.as-active {\r\n    background-color: rgba(20, 185, 235, 0.3);\r\n}\r\n\r\n.as-file-list-item-quick-btn:hover {\r\n    background-color: #91e4fb77;\r\n}\r\n\r\n.as-file-list-item-quick-btn:active {\r\n    background-color: #91e4fb;\r\n\r\n}\r\n\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-finder {\r\n    font-size: 1rem;\r\n    position: relative;\r\n    --finder-header-height: 51px;\r\n    --finder-nav-width: 250px;\r\n    overflow: hidden;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.as-finder.as-compact-mode {\r\n    --finder-header-height: 0;\r\n}\r\n\r\n.as-finder.as-compact-mode .as-finder-header {\r\n    display: none;\r\n}\r\n\r\n.as-finder-header {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    height: var(--finder-header-height);\r\n    width: 100%;\r\n    border-bottom: 1px solid #dddddd;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-finder-header .as-flexicon-button {\r\n    min-width: 110px;\r\n}\r\n\r\n.as-finder-nav-ctn,\r\n.as-finder-search-ctn {\r\n    position: absolute;\r\n    left: 0;\r\n    top: var(--finder-header-height);\r\n    width: var(--finder-nav-width);\r\n    bottom: 0;\r\n    border-right: 1px solid #dddddd;\r\n    padding-top: 29px;\r\n    background-color: white;\r\n    z-index: 20;\r\n}\r\n\r\n.as-finder-nav-ctn {\r\n}\r\n\r\n.as-finder-search-ctn {\r\n    visibility: hidden;\r\n\r\n}\r\n\r\n\r\n.as-finder-nav-header,\r\n.as-finder-search-header {\r\n    display: flex;\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    right: 0;\r\n    height: 29px;\r\n    box-sizing: border-box;\r\n    border-bottom: 1px solid #dddddd;\r\n    align-items: center;\r\n}\r\n\r\n.as-finder-nav-header-left {\r\n    flex-grow: 1;\r\n}\r\n\r\n.as-finder-nav-header-right button {\r\n    height: 100%;\r\n    width: 30px;\r\n    margin-left: 5px;\r\n}\r\n\r\n.as-finder-nav-ctn > .as-exp-group,\r\n.as-finder-search-ctn > .as-finder-search-body {\r\n    overflow-y: auto;\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n\r\n.as-finder-search-body {\r\n    padding: 10px 5px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n\r\n.as-finder-search-field {\r\n    padding-top: 10px;\r\n}\r\n\r\n.as-finder-search-field > div {\r\n    display: inline-block;\r\n}\r\n\r\n.as-finder-search-field > div:first-child {\r\n    width: 5em;\r\n}\r\n\r\n\r\n.as-finder-search-footer {\r\n    text-align: center;\r\n    padding-top: 20px;\r\n\r\n}\r\n\r\n.as-finder-search-footer button {\r\n    min-width: 100px;\r\n}\r\n\r\n.as-finder-search-footer button:not(:last-child) {\r\n    margin-right: 20px;\r\n}\r\n\r\n.as-finder-body {\r\n    position: absolute;\r\n    right: 0;\r\n    left: var(--finder-nav-width);\r\n    top: var(--finder-header-height);\r\n    bottom: 0;\r\n    padding-top: 29px;\r\n}\r\n\r\n.as-finder-content-header {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    right: 0;\r\n    height: 29px;\r\n    box-sizing: border-box;\r\n    border-bottom: 1px solid white;\r\n    display: flex;\r\n\r\n}\r\n\r\n.as-finder-content-header-left {\r\n    flex-grow: 1;\r\n}\r\n\r\n.as-finder:not(.as-mobile) .as-finder-content-header-right::after {\r\n    content: \"Kéo thả file vào đây để tải lên\";\r\n    color: rgb(100, 100, 180);\r\n    font-style: italic;\r\n    line-height: 28px;\r\n    padding-right: 10px;\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.as-finder-content-ctn {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n\r\n.as-finder-normal-action-button-ctn,\r\n.as-finder-tiny-action-button-ctn {\r\n    position: absolute;\r\n    left: 10px;\r\n    top: calc(50% - 15px);\r\n    white-space: nowrap;\r\n    max-width: calc(100% - 50px);\r\n    overflow: hidden;\r\n}\r\n\r\n.as-finder-normal-action-button-ctn > button:not(:last-child),\r\n.as-finder-tiny-action-button-ctn > button:not(:last-child) {\r\n    margin-right: 10px;\r\n}\r\n\r\n.as-finder-tiny-action-button-ctn button,\r\n.as-finder-content-header button:not(.as-ribbon-button) {\r\n    background-color: transparent;\r\n    border: none;\r\n    border-radius: 3px;\r\n    width: 30px;\r\n    height: 30px;\r\n    font-size: inherit;\r\n    padding: 0;\r\n    color: var(--as-transparent-button-text-color);\r\n}\r\n\r\n.as-finder-content-header button.as-ribbon-button {\r\n    height: 30px;\r\n}\r\n\r\n\r\n\r\n.as-finder-tiny-action-button-ctn button span {\r\n    font-size: 1.3em;\r\n}\r\n\r\n.as-finder-tiny-action-button-ctn button:hover {\r\n    color: var(--as-transparent-button-text-hover-color);\r\n}\r\n\r\n.as-finder-tiny-action-button-ctn button:active {\r\n    color: var(--as-transparent-button-text-active-color);\r\n}\r\n\r\n\r\n.as-action-button-minimized .as-finder-normal-action-button-ctn,\r\n.as-finder:not(.as-action-button-minimized) .as-finder-tiny-action-button-ctn {\r\n    visibility: hidden;\r\n}\r\n\r\n.as-finder[data-selected-file-count=\"0\"] .as-finder-header button[name=\"view\"],\r\n.as-finder[data-selected-file-count=\"0\"] .as-finder-header button[name=\"delete\"],\r\n.as-finder:not([data-selected-folder-count=\"0\"]) .as-finder-header button[name=\"delete\"],\r\n.as-finder[data-selected-file-count=\"0\"] .as-finder-header button[name=\"download\"],\r\n.as-finder[data-selected-file-count=\"0\"][data-selected-folder-count=\"0\"] .as-finder-header button[name=\"move\"],\r\n.as-finder:not([data-selected-file-count=\"1\"][data-selected-folder-count=\"0\"]) .as-finder-header button[name=\"rename\"],\r\n.as-finder:not(.as-mini-layout) .as-finder-content-header button[name=\"nav_toggle\"],\r\n.as-finder:not(.as-mini-layout) .as-finder-nav-ctn button[name=\"nav_toggle\"] {\r\n    display: none;\r\n}\r\n\r\n.as-finder-nav-ctn {\r\n    overflow-y: auto;\r\n\r\n}\r\n\r\n.as-finder-content-ctn {\r\n    overflow-y: auto;\r\n    z-index: 1;\r\n}\r\n\r\n.as-finder.as-mini-layout .as-finder-body {\r\n    left: 0;\r\n}\r\n\r\n.as-finder.as-mini-layout .as-finder-nav-ctn,\r\n.as-finder.as-mini-layout .as-finder-search-ctn {\r\n    left: calc(var(--finder-nav-width) * -1);\r\n    transition: left 0.2s;\r\n}\r\n\r\n\r\n.as-finder.as-mini-layout.as-nav-open .as-finder-nav-ctn,\r\n.as-finder.as-mini-layout.as-nav-open .as-finder-search-ctn {\r\n    left: 0;\r\n}\r\n\r\n.as-finder.as-mini-layout.as-nav-open::after {\r\n    content: \"\";\r\n    display: block;\r\n    z-index: 8;\r\n    position: absolute;\r\n    left: 0;\r\n    top: var(--finder-header-height);\r\n    width: 100%;\r\n    height: 100%;\r\n    background-color: rgba(169, 169, 172, 0.2);\r\n}\r\n\r\n\r\n.as-finder-content::before,\r\n.as-finder-content::after {\r\n    content: \"\";\r\n    display: block;\r\n}\r\n\r\n.as-finder-content .as-file-thumbnail {\r\n    display: inline-block;\r\n    margin: 5px;\r\n}\r\n\r\n\r\n.as-finder-content {\r\n    user-select: none;\r\n    min-height: 100%;\r\n    box-sizing: border-box;\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"upload\"],\r\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"delete\"],\r\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"rename\"],\r\n.as-finder:not(.as-writable-folder) .as-finder-header button[name=\"move\"],\r\n.as-finder.as-disable-create-folder .as-finder-header button[name=\"new_folder\"]\r\n{\r\n    display: none;\r\n}\r\n\r\n.as-finder-select-area {\r\n    position: fixed;\r\n    box-sizing: border-box;\r\n    border: 2px solid rgba(0, 103, 240, 0.5);\r\n    width: 100px;\r\n    height: 100px;\r\n    background-color: rgba(0, 103, 240, 0.2);\r\n    /*background-color: ;*/\r\n}\r\n\r\n.as-finder:not(.as-dragging) .as-file-thumbnail:hover {\r\n    background-color: rgba(29, 161, 255, 0.13);\r\n}\r\n\r\n\r\n.as-finder-upload-overlay {\r\n    display: none;\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    right: 0;\r\n    z-index: 4;\r\n    backdrop-filter: blur(1px);\r\n    -webkit-backdrop-filter: blur(1px);\r\n    background-color: rgba(167, 167, 167, 0.1);\r\n    font-size: 2rem;\r\n    text-align: center;\r\n    text-shadow: 2px 2px 3px white, -2px -2px 3px white, -2px 2px 3px white, 2px -2px 3px white;\r\n    color: rgb(97, 79, 100);\r\n    font-weight: bold;\r\n    padding-top: calc(50% - 6em);\r\n}\r\n\r\n\r\n.as-finder-upload-overlay-icon-ctn {\r\n    text-align: center;\r\n    color: #1da1ff;\r\n    font-size: 8rem;\r\n\r\n}\r\n\r\n.as-finder:not(.as-searching) .as-finder-body.as-drag-over .as-finder-upload-overlay {\r\n    display: block;\r\n}\r\n\r\n\r\n.as-finder.as-searching .as-finder-nav-ctn {\r\n    visibility: hidden;\r\n}\r\n\r\n.as-finder.as-searching .as-finder-search-ctn {\r\n    visibility: visible;\r\n}\r\n\r\n.as-finder.as-searching .as-finder-content-header-right,\r\n.as-finder.as-searching .as-finder-header button[name='upload'],\r\n.as-finder.as-searching .as-finder-header button[name='move'] {\r\n    display: none;\r\n}\r\n\r\n.as-finder-task-check {\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-finder-task-check >span{\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-finder-task-check .mdi {\r\n    font-size: 1.5em;\r\n    color: rgb(30, 237, 219);\r\n}\r\n\r\n\r\n.as-finder-task-check .mdi.mdi-alert-decagram-outline {\r\n    color: red;\r\n}\r\n\r\n\r\n/**************************************************/\r\n\r\n.as-file-thumbnail {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    position: relative;\r\n}\r\n\r\n.as-file-thumbnail-background {\r\n    display: block;\r\n    width: 100px;\r\n    height: 100px;\r\n    background-size: contain;\r\n    background-position: center;\r\n    background-repeat: no-repeat;\r\n    box-sizing: border-box;\r\n    border: 1px solid #c0c0c0;\r\n}\r\n\r\n.as-file-thumbnail-check {\r\n    display: none;\r\n    position: absolute;\r\n    top: -2px;\r\n    left: -2px;\r\n    bottom: -2px;\r\n    right: -2px;\r\n    overflow: hidden;\r\n    z-index: 4;\r\n    pointer-events: none;\r\n    border: 2px solid #0a90eb;\r\n}\r\n\r\n.as-file-thumbnail.as-checked .as-file-thumbnail-check {\r\n    display: block;\r\n}\r\n\r\n.as-file-thumbnail-check::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    right: -28px;\r\n    top: -28px;\r\n    width: 56px;\r\n    height: 56px;\r\n    transform: rotate(45deg);\r\n    background-color: #0a90eb;\r\n}\r\n\r\n.as-file-thumbnail-check .mdi {\r\n    display: inline-block;\r\n    position: absolute;\r\n    right: 5px;\r\n    top: 5px;\r\n    font-size: 14px;\r\n    color: white;\r\n}\r\n\r\n.as-file-thumbnail-file-name {\r\n    word-wrap: break-word; /* IE 5.5-7 */\r\n    white-space: -moz-pre-wrap; /* Firefox 1.0-2.0 */\r\n    white-space: pre-wrap;\r\n    text-overflow: ellipsis;\r\n    overflow: hidden;\r\n    width: 100px;\r\n    max-height: 6.2em;\r\n    line-height: 1.5;\r\n    text-align: center;\r\n    font-size: 13px;\r\n    padding-top: 0.2em;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-file-thumbnail-file-name > span:last-child {\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-finder-folder-dialog-tree-ctn {\r\n    max-height: calc(90vh - 250px);\r\n    overflow-y: auto;\r\n    border: 1px solid #dddddd;\r\n}\r\n\r\n.as-finder-folder-dialog-tree-ctn > .as-exp-group {\r\n    width: 300px;\r\n}\r\n\r\n.as-finder-folder-dialog-selected-ctn {\r\n    padding-bottom: 10px;\r\n    white-space: pre-wrap;\r\n}\r\n\r\n.as-finder-folder-dialog-selected-ctn > span {\r\n    white-space: nowrap;\r\n}\r\n\r\ndiv[data-view-as=\"list\"] {\r\n    --col: 1;\r\n}\r\n\r\ndiv[data-view-as=\"list\"] .as-file-thumbnail {\r\n    display: inline-block;\r\n    margin-right: 4px;\r\n    height: 50px;\r\n    padding-left: 60px;\r\n    white-space: nowrap;\r\n    box-sizing: border-box;\r\n    width: calc(100% / var(--col) - 10px * var(--col));\r\n}\r\n\r\ndiv[data-view-as=\"list\"] .as-file-thumbnail::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: 100%;\r\n}\r\n\r\ndiv[data-view-as=\"list\"] .as-file-thumbnail-background {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    width: 50px;\r\n    height: 50px;\r\n}\r\n\r\ndiv[data-view-as=\"list\"] .as-file-thumbnail-file-name {\r\n    width: unset;\r\n    max-width: 100%;\r\n    text-align: left;\r\n}\r\n\r\ndiv[data-view-as=\"list\"] .as-file-thumbnail-background,\r\ndiv[data-view-as=\"list\"] .as-file-thumbnail-file-name {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\ndiv[data-view-as=\"lage_icons\"] .as-file-thumbnail-background{\r\n    width: 200px;\r\n    height: 200px;\r\n}\r\n\r\ndiv[data-view-as=\"lage_icons\"]  .as-file-thumbnail-file-name {\r\n    width: 200px;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".kv-comment-item {\r\n    font-size: 1rem;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    position: relative;\r\n\r\n    padding: 0 calc(2em + 7px) 0 calc(2.85em + 20px);\r\n    cursor: pointer;\r\n    background-color: white;\r\n}\r\n\r\n.kv-comment-item:hover{\r\n    background-color: #f2f5fa;\r\n}\r\n\r\n\r\n.kv-comment-avatar-ctn {\r\n    position: absolute;\r\n    left: 10px;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.kv-comment-avatar-ctn::before,\r\n.kv-comment-item-flag-ctn::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    height: 100%;\r\n    vertical-align: middle;\r\n}\r\n\r\n.kv-comment-avatar {\r\n    width: 2.85em;\r\n    height: 2.85em;\r\n    background-size: cover;\r\n    border-radius: 50%;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.kv-comment-item-content {\r\n    padding: 5px 10px;\r\n    border: 1px solid #d6d6d6;\r\n    border-radius: 7px;\r\n    line-height: 1.5;\r\n}\r\n\r\n\r\n.kv-comment-item-flag-ctn {\r\n    position: absolute;\r\n    right: 10px;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.kv-comment-item-flag-unread {\r\n    display: none;\r\n    vertical-align: middle;\r\n    width: 0.75em;\r\n    height: 0.75em;\r\n    background-color: blue;\r\n    border-radius: 50%;\r\n}\r\n\r\n.kv-comment-item.as-unread .kv-comment-item-flag-unread {\r\n    display: inline-block;\r\n}\r\n\r\n.kv-comment-item-time {\r\n    font-weight: bold;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-linear-color-bar {\r\n    position: relative;\r\n    height: 2em;\r\n}\r\n\r\n.as-linear-color-background {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    display: block;\r\n}\r\n\r\n.as-linear-color-value-text {\r\n    position: absolute;\r\n    top: 0;\r\n    font-weight: 900;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-linear-color-min-value-text,\r\n.as-linear-color-max-value-text {\r\n    position: absolute;\r\n    bottom: 0;\r\n    white-space: nowrap;\r\n    font-weight: bold;\r\n}\r\n\r\n\r\n\r\n.as-linear-color-min-value-text {\r\n    left: 0;\r\n}\r\n\r\n.as-linear-color-rect {\r\n    stroke: none;\r\n}\r\n\r\n\r\n.as-linear-color-value-arrow {\r\n    fill: rgb(244, 124, 32);\r\n    stroke: rgb(244, 124, 32);\r\n}\r\n\r\n.as-linear-color-split-line {\r\n    stroke: white;\r\n}\r\n\r\n\r\n.as-linear-color-tiny-bar {\r\n    font-size: 1rem;\r\n    --value: 1;\r\n    --extend: 0.5;\r\n    --color: green;\r\n    position: relative;\r\n\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    white-space: nowrap;\r\n}\r\n\r\n\r\n.as-linear-color-tiny-text {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    padding-right: 0.3em;\r\n    width: 4em;\r\n    text-align: right;\r\n}\r\n\r\n.as-linear-color-tiny-bar-rect {\r\n    height: calc(10em / 14);\r\n    width: calc(10em * var(--value) / 1.4);\r\n    max-width: calc(10em / 1.4 + 10em * var(--extend) / 1.4);\r\n    min-width: 3px;\r\n    background-color: var(--color);\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-location-input-modal {\r\n    z-index: 800001;\r\n}\r\n\r\n\r\n.as-location-picker-control-ctn {\r\n    margin: 10px;\r\n    background-color: white;\r\n    box-shadow: rgb(0 0 0 / 30%) 0px 1px 4px -1px;\r\n    border-radius: 2px;\r\n}\r\n\r\n\r\n.as-location-picker-control-btn {\r\n    width: 40px;\r\n    height: 40px;\r\n    padding: 0;\r\n    box-sizing: border-box;\r\n    background-color: transparent;\r\n    border: none;\r\n    color: rgb(102, 102, 102);\r\n}\r\n\r\n.as-location-picker-control-btn:hover {\r\n    color: black;\r\n}\r\n\r\n.gm-ui-hover-effect {\r\n    outline: none;\r\n}\r\n\r\n.as-location-picker-control-btn > span {\r\n    font-size: 2em;\r\n}\r\n\r\n\r\n.as-location-picker-search-input {\r\n    height: 30px;\r\n    width: 250px;\r\n    border-radius: 2px;\r\n    padding-right: 30px;\r\n    position: relative;\r\n}\r\n\r\n.as-location-picker-search-input > input {\r\n    outline: none;\r\n}\r\n\r\n\r\n.as-location-picker-search-input-search-icon-ctn {\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 30px;\r\n    text-align: center;\r\n    font-size: 20px;\r\n    color: rgb(102, 102, 102);\r\n}\r\n\r\n.as-location-picker-search-input-search-icon-ctn:hover {\r\n    color: black;\r\n}\r\n\r\n.as-location-picker-search-input-search-icon-ctn::before,\r\n.as-location-picker-search-input-search-icon-ctn > span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-location-picker-search-input-search-icon-ctn::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.as-location-picker-control-ctn .as-flexicon-button {\r\n    font-size: 14px;\r\n    min-width: 9em;\r\n    height: calc(2em + 2px);\r\n}\r\n\r\n.as-location-picker-control-ctn .as-flexicon-button:not(:last-child) {\r\n    margin-right: 20px;\r\n}\r\n\r\n\r\n.as-location-picker-control-ctn.as-transparent {\r\n    background-color: transparent;\r\n    box-shadow: none;\r\n}\r\n\r\n.as-location-picker.as-read-only .as-location-picker-cancel-btn,\r\n.as-location-picker.as-read-only .as-location-picker-search-input {\r\n    display: none;\r\n}\r\n\r\n.as-location-picker-control-ctn.as-bottom button{\r\n    box-shadow: 0 0px 2px 4px white;\r\n    -webkit-box-shadow: 0 0 2px 4px white;\r\n    -moz-box-shadow: 0 0 2px 4px white;\r\n}\r\n\r\n\r\n.as-location-input-modal {\r\n\r\n}\r\n\r\n.as-location-input-modal-window {\r\n    padding: 10px;\r\n    width: calc(100vw - 10px);\r\n    height: calc(100vh - 10px);\r\n    box-sizing: border-box;\r\n    max-width: 900px;\r\n    max-height: 600px;\r\n    box-shadow: 0px 1px 4px -1px rgba(0, 0, 0, 0.7);\r\n    -webkit-box-shadow: 0px 1px 4px -1px rgba(0, 0, 0, 0.7);\r\n    border-radius: 5px;\r\n    background-color: white;\r\n}\r\n\r\n\r\n.as-location-input-modal-window > .as-location-picker {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.as-location-input {\r\n    height: var(--as-input-height);\r\n    border-radius: var(--as-input-border-radius);\r\n    border: 1px solid #dddddd;\r\n    box-sizing: border-box;\r\n    width: calc(13em + 50px);\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    position: relative;\r\n    background-color: white;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n}\r\n\r\n\r\n.as-location-input.as-disabled {\r\n    background-color: var(--as-disabled-background-color);\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n.as-location-input-text {\r\n    outline: none;\r\n    width: calc(100% - 2em - 1px);\r\n    height: 100%;\r\n    border: none;\r\n    background-color: transparent;\r\n    display: block;\r\n    padding: 0 0 0 var(--as-input-horizontal-padding);\r\n    font: inherit;\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n.as-location-input-icon-ctn {\r\n    border-left: 1px solid #ddd;\r\n    border-right: none;\r\n    border-top: none;\r\n    border-bottom: none;\r\n    text-align: center;\r\n    position: absolute;\r\n    right: 0;\r\n    width: calc(2rem + 1px);\r\n    box-sizing: border-box;\r\n    top: 0;\r\n    height: 100%;\r\n    background-color: rgba(169, 169, 169, 0.1);\r\n    cursor: pointer;\r\n    font-size: inherit;\r\n}\r\n\r\n\r\n.as-location-input-icon-ctn:hover {\r\n    background-color: rgba(169, 169, 169, 0.25);\r\n}\r\n\r\n.as-location-input-icon-ctn:active {\r\n    background-color: rgba(169, 169, 169, 0.5);\r\n}\r\n\r\n\r\n.as-location-input-icon-ctn > span {\r\n    line-height: 2em;\r\n    font-size: calc(16em / 14);\r\n}\r\n\r\n.as-location-input.as-disabled {\r\n    color: var(--as-disabled-text-color);\r\n    pointer-events: none;\r\n}\r\n\r\n.as-location-input.as-disabled input {\r\n    background-color: var(--as-disabled-background-color);\r\n}\r\n\r\n.as-location-input.as-value-null .as-location-input-clear-btn,\r\n.as-location-input.as-must-not-null .as-location-input-clear-btn {\r\n    display: none;\r\n}\r\n\r\n.as-location-input-clear-btn {\r\n    font-size: inherit;\r\n    position: absolute;\r\n    right: calc(2em + 2px);\r\n    height: calc(2em + 2px);\r\n    top: calc(50% - -1em - 1px);\r\n    box-sizing: border-box;\r\n    background-color: transparent;\r\n    border: none;\r\n    color: #bbb;\r\n    visibility: hidden;\r\n}\r\n\r\n.as-location-input-clear-btn:hover {\r\n    color: rgb(132, 132, 132)\r\n}\r\n\r\n.as-location-input-clear-btn:active {\r\n    color: #525555;\r\n}\r\n\r\n.as-location-input-text:focus + .as-location-input-clear-btn,\r\n.as-location-input:hover .as-location-input-clear-btn {\r\n    visibility: visible;\r\n}\r\n\r\n\r\n@media screen and (max-width: 600px) {\r\n    .as-location-input-modal-window {\r\n        max-width: unset;\r\n        max-height: unset;\r\n\r\n    }\r\n}\r\n\r\n\r\n@media screen  and  (max-width: 500px) {\r\n    .as-location-picker-control-ctn.as-top {\r\n        margin-top: 60px;\r\n        width: calc(100% - 20px);\r\n    }\r\n\r\n    .as-location-picker-control-ctn.as-top .as-location-picker-search-input {\r\n        width: 100%;\r\n    }\r\n\r\n    .as-location-input-modal-window {\r\n        padding: 0;\r\n    }\r\n\r\n    .as-location-picker-control-ctn.as-bottom button{\r\n        margin-top: 20px;\r\n    }\r\n}\r\n\r\n\r\n.as-location-input-modal.as-mobile .as-location-input-modal-window {\r\n    height: calc(100vh - 80px);\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-message-dialog {\r\n    font-size: 1rem;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    box-sizing: border-box;\r\n    background-color: white;\r\n    border-radius: 0.3em;\r\n    border: 1px solid #dddddd;\r\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n}\r\n\r\n.as-message-dialog-header {\r\n    padding: calc(5em / 14) 1em;\r\n    border-bottom: 1px solid #e9ecef;\r\n}\r\n\r\n\r\n.as-message-dialog-title {\r\n    font-size: 1.25em;\r\n    font-weight: 500;\r\n}\r\n\r\n.as-message-dialog-body {\r\n    padding: 1em;\r\n}\r\n\r\n.as-message-dialog-footer {\r\n    text-align: right;\r\n    padding: 10px 20px;\r\n    border-top: 1px solid #e9ecef;\r\n}\r\n\r\n.as-message-dialog-footer:empty,\r\n.as-message-dialog-header:empty {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-message-dialog-footer button {\r\n    margin-left: 1.5em;\r\n}\r\n\r\n\r\n.as-message-dialog-footer button.as-flexicon-button .as-flexicon-button-text-container {\r\n    padding-left: 2em;\r\n    padding-right: 2em;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --control-horizontal-distance-2: 10px;\r\n}\r\n\r\n.mk-nav {\r\n    position: relative;\r\n    --mk-nav-line-top: 0;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 1rem;\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n    -ms-user-select: none;\r\n    -moz-user-select: none;\r\n    --mk-navigator-bound-left: 0;\r\n}\r\n\r\n.mk-nav::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    transition: top 0.2s;\r\n    top: var(--mk-nav-line-top);\r\n    height:  calc(2em + 12px);\r\n    border-right: 4px solid rgb(20, 100, 246);\r\n    right: -3px;\r\n}\r\n\r\n.mk-nav.mk-has-draggable .mk-nav-item {\r\n    padding-left: calc(2em + 2px);\r\n}\r\n\r\n.mk-nav-item {\r\n    height: calc(2em + 12px);\r\n    padding-left: var(--control-horizontal-distance-2);\r\n    padding-right: 20px;\r\n    min-width: 100px;\r\n    cursor: pointer;\r\n    white-space: nowrap;\r\n    position: relative;\r\n    overflow: visible;\r\n    display: flex;\r\n    align-items: center;\r\n    background-color: white;\r\n}\r\n\r\n.mk-nav-item.as-board-moving {\r\n    transform: none;\r\n    left: var(--mk-navigator-bound-left) !important;\r\n    background-color: rgb(169, 169, 172, 0.3);\r\n}\r\n\r\n.mk-nav-item:hover {\r\n    background-color: rgb(169, 169, 172, 0.3);\r\n}\r\n\r\n.mk-nav-item.as-hidden{\r\n    display: none;\r\n}\r\n\r\n.mk-nav-item-text-ctn {\r\n    flex-grow: 1;\r\n    padding-right: var(--control-horizontal-distance-2);\r\n    padding-left: var(--control-horizontal-distance-2)\r\n}\r\n\r\n\r\n.mk-nav-item-switch-ctn {\r\n\r\n}\r\n\r\n/*\r\n.mk-nav-item::after {\r\n    content: \"\";\r\n    border: 1px solid #ddd;\r\n    z-index: 2;\r\n    pointer-events: none;\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: -1px;\r\n}\r\n\r\n.mk-nav-item:hover::after,\r\n.mk-nav-item.mk-current::after{\r\n    border-color: rgb(20, 100, 246);\r\n    z-index: 3;\r\n}\r\n*/\r\n\r\n\r\n.mk-nav-item.mk-current {\r\n    color: rgb(20, 100, 246);\r\n    text-shadow: 1px 0 0 currentColor;\r\n}\r\n\r\n.mk-nav-item-drag-zone {\r\n    position: absolute;\r\n    z-index: 1;\r\n    left: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 30px;\r\n    font-size: inherit;\r\n}\r\n\r\n.mk-nav-item-drag-zone i {\r\n    font-size: 1.7em;\r\n}\r\n\r\n.mk-nav-item-drag-zone::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.mk-nav-item-drag-zone::before,\r\n.mk-nav-item-drag-zone i {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "/**** APP ***************/\r\n\r\n.am-application {\r\n    width: 100%;\r\n    height: 100%;\r\n    position: relative;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n}\r\n\r\n.am-application-frameview {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n\r\n.am-application-tabbar {\r\n    display: none;\r\n}\r\n\r\n.am-application.am-show-tabbar .am-application-tabbar {\r\n    display: block;\r\n}\r\n\r\n.am-application.am-show-tabbar .am-application-frameview {\r\n    height: calc(100% - 3em);\r\n}\r\n\r\n\r\n/*************** HEADER****************************************/\r\n\r\n.am-header-bar {\r\n    display: flex;\r\n    align-items: center;\r\n    background-color: var(--variant-color-primary);\r\n    -webkit-box-shadow: 0px 1px 10px 2px rgba(0, 0, 0, 0.5);\r\n    -moz-box-shadow: 0px 1px 10px 2px rgba(0, 0, 0, 0.5);\r\n    box-shadow: 0px 1px 5px 1px rgba(0, 0, 0, 0.5);\r\n    box-sizing: border-box;\r\n    position: relative;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    color: white;\r\n    height: 3em;\r\n    font-size: 1rem;\r\n}\r\n\r\n\r\n.am-header-bar-left-btn,\r\nbutton.am-header-bar-command {\r\n    display: inline-block;\r\n    text-align: center;\r\n    border: none;\r\n    background-color: transparent;\r\n    height: 3em;\r\n    width: 3em;\r\n    padding: 0;\r\n    margin: 0;\r\n    vertical-align: middle;\r\n    color: white;\r\n    outline: none;\r\n    font-size: inherit;\r\n}\r\n\r\n.am-header-bar-left-btn span,\r\nbutton.am-header-bar-command span,\r\n.am-header-bar-left-btn i,\r\nbutton.am-header-bar-command i {\r\n    font-size: 2em;\r\n}\r\n\r\nbutton.am-header-bar-command:not(:last-child) {\r\n    margin-right: 0.6256em;\r\n}\r\n\r\n\r\n.am-header-bar-left-btn:active,\r\nbutton.am-header-bar-action:active,\r\nbutton.am-header-bar-command:active {\r\n    color: rgb(220, 220, 222);\r\n}\r\n\r\n.am-header-bar-title-ctn {\r\n    flex-grow: 1;\r\n    white-space: nowrap;\r\n    overflow: inherit;\r\n    position: relative;\r\n    height: 3em;\r\n}\r\n\r\n.am-header-bar-no-size-wrapper {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    right: 0;\r\n    white-space: nowrap;\r\n}\r\n\r\n.am-header-bar-no-size-wrapper::before {\r\n    content: \"\";\r\n    height: 100%;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-header-bar-title-wrapper {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    width: 100%;\r\n\r\n}\r\n\r\n.am-header-bar-title-ctn:first-child .am-header-bar-title {\r\n    padding-left: 1.2em;\r\n}\r\n\r\n\r\n.am-header-bar-title {\r\n    font-size: 1.2em;\r\n    color: white;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n\r\n}\r\n\r\n.am-header-bar-title-desc {\r\n    font-size: 0.8em;\r\n    line-height: 2;\r\n}\r\n\r\n.am-header-bar-title-desc:empty {\r\n    display: none;\r\n}\r\n\r\n\r\n.am-header-bar-right {\r\n\r\n}\r\n\r\n.am-header-bar-right::after {\r\n    content: \"\";\r\n    height: 100%;\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n    width: 0.357142857em;\r\n}\r\n\r\n\r\n.am-header-bar-right-item-ctn {\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n}\r\n\r\n\r\nbutton.am-header-bar-action {\r\n    height: 3em;\r\n    width: 3em;\r\n    background-color: transparent;\r\n    color: white;\r\n    border: none;\r\n    font-size: inherit;\r\n    outline: none;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-header-bar-quickmenu-btn.am-status-active .am-header-bar-quickmenu-btn-circle {\r\n    background-color: rgba(169, 169, 169, 0.5);\r\n}\r\n\r\n\r\n.am-header-bar-quickmenu-btn-circle {\r\n    height: 2em;\r\n    width: 2em;\r\n    border-radius: 50%;\r\n    text-align: center;\r\n}\r\n\r\n.am-header-bar-quickmenu-btn-circle span {\r\n    font-size: 1.6em;\r\n    line-height: 1.25em;\r\n}\r\n\r\n.am-header-bar-quickmenu-btn.as-active .mdi-dots-horizontal-circle-outline,\r\n.am-header-bar-quickmenu-btn:not(.as-active) .mdi-dots-horizontal-circle {\r\n    display: none;\r\n}\r\n\r\n\r\n.am-header-bar.am-light-weight,\r\n.am-header-bar.am-light-weight .am-header-bar-title-ctn,\r\n.am-header-bar.am-light-weight .am-header-bar-left-btn,\r\n.am-header-bar.am-light-weight button.am-header-bar-command,\r\n.am-header-bar.am-light-weight button.am-header-bar-action {\r\n    height: calc(2rem + 2px);\r\n}\r\n\r\n\r\n.am-header-bar.am-light-weight .am-header-bar-left-btn span,\r\n.am-header-bar.am-light-weight button.am-header-bar-command span,\r\n.am-header-bar-left-btn i,\r\n.am-header-bar.am-light-weight button.am-header-bar-command i {\r\n    font-size: 1.6em;\r\n}\r\n\r\n.am-application.am-stack > .am-activity {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}\r\n\r\n\r\n.am-activity {\r\n    width: 100%;\r\n    height: 100%;\r\n    background-color: white;\r\n}\r\n\r\n.am-activity.am-grid {\r\n    grid-template-areas: 'header' 'body';\r\n    grid-template-rows: 3em auto;\r\n    display: grid;\r\n}\r\n\r\n\r\n.am-activity.am-grid > .am-header-bar {\r\n    grid-area: header;\r\n}\r\n\r\n.am-activity.am-grid > .am-activity-body {\r\n    grid-area: body;\r\n    padding: 10px 5px;\r\n    overflow: auto;\r\n}\r\n\r\n.am-explore-item-block {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    padding: 5px 18px;\r\n    position: relative;\r\n    user-select: none;\r\n}\r\n\r\n.am-explore-item-block:active::after {\r\n    content: \"\";\r\n    display: block;\r\n    position: absolute;\r\n    left: 10px;\r\n    right: 10px;\r\n    background-color: var(--as-transparent-button-active-color);\r\n    top: 0;\r\n    bottom: 0;\r\n    z-index: 2;\r\n    border-radius: 5px;\r\n\r\n\r\n}\r\n\r\n.am-explore-item-block-icon {\r\n    display: block;\r\n    width: 50px;\r\n    height: 50px;\r\n    text-align: center;\r\n    white-space: nowrap;\r\n    color: var(--variant-color-secondary);\r\n    padding: 0 5px;\r\n}\r\n\r\n.am-explore-item-block-icon::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: 100%;\r\n}\r\n\r\n.am-explore-item-block-icon > span:first-child,\r\n.am-explore-item-block-icon > .mdi {\r\n    display: inline-block;\r\n    font-size: 50px;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.am-explore-item-block-name {\r\n    width: 60px;\r\n    text-align: center;\r\n    padding: 10px 0 5px 0;\r\n}\r\n\r\n\r\n.am-explore-section-break {\r\n    display: flex;\r\n    align-content: center;\r\n    margin-bottom: 10px;\r\n}\r\n\r\n.am-explore-section-break-name {\r\n    padding: 3px 5px 3px 5px;\r\n    background-color: var(--variant-color-link);\r\n    border-radius: 2px;\r\n    color: white;\r\n\r\n}\r\n\r\n.am-explore-section-break-line {\r\n    flex-grow: 1;\r\n    position: relative;\r\n}\r\n\r\n.am-explore-section-break-line::after {\r\n    position: absolute;\r\n    left: 0;\r\n    width: 100%;\r\n    top: calc(50% - 1px);\r\n    display: block;\r\n    content: \"\";\r\n    flex-grow: 1;\r\n    border-top: 2px solid #dddddd;\r\n    vertical-align: center;\r\n}\r\n\r\n.am-float-button {\r\n    position: fixed;\r\n    bottom: 12px;\r\n    right: 12px;\r\n    border-radius: 50%;\r\n    width: 50px;\r\n    height: 50px;\r\n    transition: box-shadow 0.4s ease;\r\n    background: #4610f5;\r\n    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.6);\r\n    color: #fff;\r\n    font-size: 1.7rem;\r\n    font-weight: bold;\r\n    cursor: pointer;\r\n    z-index: 500;\r\n    border: none;\r\n}\r\n\r\n.am-explore-group {\r\n    padding: 5px 5px 10px 5px;\r\n}\r\n\r\n/******************************/\r\n.am-springboard-menu.am-style-simple {\r\n    background-color: rgb(235, 235, 235);\r\n    padding: 10px;\r\n}\r\n\r\n.am-springboard-menu.am-style-simple .am-explore-group {\r\n    background-color: white;\r\n    border-radius: 5px;\r\n    padding: 5px;\r\n\r\n}\r\n\r\n\r\n.am-springboard-menu.am-style-simple .am-explore-group:not(:last-child) {\r\n    margin-bottom: 10px;\r\n}\r\n\r\n.am-springboard-menu.am-style-simple .am-explore-section-break-line {\r\n    display: none;\r\n}\r\n\r\n\r\n.am-springboard-menu.am-style-simple .am-explore-section-break-name {\r\n    background-color: transparent;\r\n    color: black;\r\n    font-weight: bold;\r\n    padding: 5px 15px;\r\n}\r\n\r\n.am-springboard-menu.am-style-simple .am-explore-item-block {\r\n    padding: 5px 16px;\r\n}\r\n\r\n\r\n.am-springboard-menu.am-style-simple .am-explore-section-break {\r\n    margin-bottom: 0;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-modal {\r\n    position: fixed;\r\n    left: 0;\r\n    height: 100%;\r\n    top: 0;\r\n    width: 100%;\r\n    z-index: 1001000;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-modal.as-hidden {\r\n    z-index: -1000;\r\n    visibility: hidden;\r\n    opacity: 0;\r\n}\r\n\r\n.as-modal.as-center {\r\n    text-align: center;\r\n}\r\n\r\n\r\n.as-modal.as-middle::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: 100%;\r\n    width: 0;\r\n}\r\n\r\n.as-modal > .as-modal-content {\r\n    display: inline-block;\r\n    text-align: initial;\r\n    white-space: initial;\r\n}\r\n\r\n/*for content*/\r\n.as-modal.as-middle > .as-modal-content {\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-loading-cube-modal {\r\n    background-color: rgba(169, 169, 169, 0.3);\r\n}\r\n\r\n\r\n.as-loading-cube-modal {\r\n    z-index: 1000000;\r\n    background-color: rgba(169, 169, 169, 0.3);\r\n}\r\n\r\n.as-loading-cube-modal > .as-modal-content {\r\n    background-color: white;\r\n    border-radius: 4px;\r\n    padding: 10px;\r\n    -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    display: inline-block;\r\n}\r\n\r\n.as-loading-cube-modal > .as-modal-content > svg {\r\n    width: 5em;\r\n    height: 5em;\r\n}\r\n\r\n\r\n.am-modal {\r\n    z-index: 100005;\r\n    position: fixed;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    text-align: center;\r\n    box-sizing: border-box;\r\n    padding-top: var(--modal-margin-top);\r\n}\r\n\r\n.am-modal>div{\r\n    text-align: initial;\r\n    display: inline-block;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --multi-select-menu-max-height: 90px;\r\n}\r\n\r\n.as-multi-select-menu {\r\n    --list-min-width: 3em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    position: relative;\r\n    min-height: var(--select-box-min-height);\r\n    min-width: var(--list-min-width);\r\n    border: solid 1px #d6d6d6;\r\n    border-radius: 3px;\r\n    box-sizing: border-box;\r\n    outline: none;\r\n    background-color: white;\r\n    padding-right: 45px;\r\n    white-space: normal;\r\n    --as-width-limit: 100vw;\r\n    max-width: var(--as-width-limit);\r\n}\r\n\r\n.as-multi-select-menu.am-multi-select-menu {\r\n    min-width: unset;\r\n}\r\n\r\n.as-multi-select-menu .absol-selectbox-item-text span{\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    max-width: calc(var(--as-width-limit) - 85px);\r\n}\r\n\r\n.as-multi-select-menu-item-ctn {\r\n    display: block;\r\n    max-height: var(--multi-select-menu-max-height);\r\n    overflow-y: auto;\r\n}\r\n\r\n\r\n.as-multi-select-menu-toggle-btn {\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 30px;\r\n    pointer-events: none;\r\n    border: none;\r\n    background-color: transparent;\r\n}\r\n\r\n.as-multi-select-menu-toggle-btn svg.dropdown {\r\n    width: 10px;\r\n    height: 10px;\r\n    fill: #929292;\r\n}\r\n\r\n.as-multi-select-menu:hover svg.dropdown {\r\n    fill: black;\r\n}\r\n\r\n.as-multi-select-menu.as-disable-click-to-focus .as-multi-select-menu-toggle-btn {\r\n    display: none;\r\n}\r\n\r\n.as-multi-select-menu .absol-selectbox-item {\r\n    margin: calc((var(--select-box-min-height) - 2px - var(--select-box-item-height)) / 2) 2px;\r\n}\r\n\r\n\r\n.as-multi-select-menu.as-item-focusable .absol-selectbox-item.as-active {\r\n    background-color: var(--select-box-focus-item-color);\r\n}\r\n\r\n.as-multi-select-menu.as-disabled {\r\n    background-color: #ebebe4;\r\n}\r\n\r\n.as-multi-select-menu-toggle-btn {\r\n\r\n}\r\n\r\n.as-multi-select-menu.as-disabled .as-multi-select-menu-item-ctn * {\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n.as-multi-select-menu.as-multi-check-tree-leaf-menu {\r\n    min-width: calc(var(--select-list-estimate-width) + 14px);\r\n}\r\n\r\n\r\n.as-multi-select-menu.as-read-only .absol-selectbox-item-close,\r\n.as-multi-select-menu.as-read-only .as-multi-select-menu-toggle-btn,\r\n.as-multi-select-menu.as-disabled .absol-selectbox-item-close,\r\n.as-multi-select-menu.as-disabled .as-multi-select-menu-toggle-btn {\r\n    display: none;\r\n}\r\n\r\n.as-multi-select-menu.as-read-only .absol-selectbox-item-text {\r\n    padding-right: 10px;\r\n}\r\n\r\n.as-multi-select-menu.as-read-only {\r\n    padding-right: 0;\r\n}\r\n\r\n.as-multi-select-menu.as-border-none {\r\n    border: none;\r\n}\r\n\r\n.as-multi-select-menu.as-border-none .as-multi-select-menu-item-ctn {\r\n    max-height: unset;\r\n    overflow-y: auto;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-omt {\r\n    display: block;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    font-size: 1rem;\r\n}\r\n\r\n.as-omt-node {\r\n\r\n}\r\n\r\n\r\n.as-omt-field {\r\n    --level: 0;\r\n    position: relative;\r\n    padding-bottom: 10px;\r\n}\r\n\r\n\r\n.as-omt-field.as-hover::before {\r\n    border-color: rgb(30, 101, 234);\r\n    border-width: 2px;\r\n}\r\n\r\n.as-omt-field::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    top: 15px;\r\n    right: 0;\r\n    bottom: 0;\r\n    border: 1px solid rgb(170, 170, 200);\r\n    z-index: 0;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-omt-field-header {\r\n    padding-left: 10px;\r\n    line-height: 2;\r\n}\r\n\r\n\r\n.as-omt-field-body {\r\n    padding-left: 10px;\r\n    padding-right: 10px;\r\n    min-height: 1em;\r\n}\r\n\r\n\r\n.as-omt-field-raw-ctn,\r\n.as-omt-field.as-mode-raw > .as-omt-field-body {\r\n    display: none;\r\n}\r\n\r\n.as-omt-field.as-mode-raw > .as-omt-field-raw-ctn {\r\n    display: block;\r\n}\r\n\r\n\r\n.as-omt-field-command-ctn {\r\n    position: absolute;\r\n    z-index: 20;\r\n    right: 10px;\r\n    top: 20px;\r\n    background-color: white;\r\n    height: 30px;\r\n    display: none;\r\n}\r\n\r\n.bsc-white .as-omt-field-command-ctn button[data-command=\"view_mode\"] {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-omt-field.as-hover > .as-omt-field-command-ctn {\r\n    display: block;\r\n}\r\n\r\n.as-omt-field-command-ctn > button {\r\n    height: 30px;\r\n}\r\n\r\n.as-omt-field-command-ctn > button:not(:first-child) {\r\n    margin-left: 5px;\r\n}\r\n\r\n.as-omt-field-command-ctn > button span {\r\n    font-size: 24px;\r\n}\r\n\r\n.as-omt-field-name {\r\n    font-weight: bold;\r\n    background-color: white;\r\n    display: inline-block;\r\n    z-index: 3;\r\n    position: relative;\r\n    padding-left: 5px;\r\n    padding-right: 5px;\r\n    margin-right: 10px;\r\n}\r\n\r\n\r\n.as-omt-field-body > .as-omt-field:first-child {\r\n    margin-top: 10px;\r\n}\r\n\r\n.as-omt-field code {\r\n    white-space: pre-wrap;\r\n}\r\n\r\n.as-omt-field-raw-ctn {\r\n    padding-left: 10px;\r\n    padding-right: 10px;\r\n}\r\n\r\n.as-omt-field.as-type-struct > .as-omt-field-body {\r\n    padding-left: 20px;\r\n}\r\n\r\nimg.as-omt-field-value {\r\n    max-width: calc(100vw - 5em);\r\n    max-height: 10em;\r\n}\r\n\r\n.as-omt-dialog .as-message-dialog-body {\r\n    max-height: calc(90vh - 5em);\r\n    max-width: calc(90vw - 5em);\r\n    overflow: auto;\r\n}\r\n\r\n.as-omt-option-row {\r\n    display: flex;\r\n    align-items: center;\r\n}\r\n\r\n.as-omt-option-row:not(:first-child) {\r\n    margin-top: 5px;\r\n}\r\n\r\n.as-omt-field-raw-ctn > div > .as-omt-field-name {\r\n    display: none;\r\n}\r\n\r\n.as-omt-option-row > .as-omt-field {\r\n    flex-grow: 1;\r\n}\r\n\r\n\r\n.as-omt-field-color-value-bg {\r\n    height: 2em;\r\n    width: 5em;\r\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAIAAAAmkwkpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAaSURBVBhXYzh8+PD///8hJAOcBSRxyRw+DABJUCox2kjvSgAAAABJRU5ErkJggg==');\r\n    background-size: 1.5em;\r\n    image-rendering: optimizeSpeed;\r\n    image-rendering: -moz-crisp-edges;\r\n    image-rendering: -o-crisp-edges;\r\n    image-rendering: -webkit-optimize-contrast;\r\n    image-rendering: pixelated;\r\n    image-rendering: optimize-contrast;\r\n    -ms-interpolation-mode: nearest-neighbor;\r\n    --omt-color-value: transparent;\r\n}\r\n\r\n.as-omt-field-color-value {\r\n    width: 100%;\r\n    height: 100%;\r\n    background-color: var(--omt-color-value);\r\n}\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --as-path-menu-max-text-width: 150px;\r\n}\r\n\r\n.am-mobile-theme{\r\n    --as-path-menu-max-text-width: 100px;\r\n}\r\n\r\n\r\n.as-path-menu-item .mdi-chevron-right::before {\r\n    transition: transform 0.1s;\r\n}\r\n\r\n.as-path-menu .as-ribbon-split-button-text {\r\n    max-width: var(--as-path-menu-max-text-width);\r\n    text-overflow: ellipsis;\r\n    overflow: hidden;\r\n    display: inline-block;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-path-menu-item.as-has-no-item .as-ribbon-split-button-extend {\r\n    display: none;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-autocomplete-input-item.as-place-search-auto-complete-item:not(:last-child) {\r\n    border-bottom: 1px solid #dddddd;\r\n\r\n}\r\n\r\n.absol-autocomplete-input-item.as-place-search-auto-complete-item {\r\n    padding: 3px 5px;\r\n    height: auto;\r\n}\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --as-process-l-bar-active-color: rgb(255, 160, 0);\r\n    --as-process-l-bar-item-width: 60px;\r\n}\r\n\r\n.as-process-l-bar {\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    position: relative;\r\n    --as-process-l-bar-item-min-width: 0;\r\n}\r\n\r\n\r\n\r\n.as-process-l-bar-step-ctn {\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-process-l-bar-col:not(:last-child) {\r\n    margin-right: 10px;\r\n}\r\n\r\n.as-process-l-bar-col {\r\n    vertical-align: top;\r\n    display: inline-block;\r\n}\r\n\r\n.as-process-l-bar-step {\r\n    width: var(--as-process-l-bar-item-width);\r\n    min-width: var(--as-process-l-bar-item-min-width);\r\n    height: 15px;\r\n    background-color: #ebebeb;\r\n    border: solid 1px #bfbfbf;\r\n    transition: background-color 0.2s;\r\n    position: relative;\r\n}\r\n\r\n\r\n\r\n.as-process-l-bar-step.as-active {\r\n    background-color: var(--as-process-l-bar-active-color);\r\n    border-color: rgb(20, 100, 246);\r\n}\r\n\r\n.as-process-l-bar-step.as-active::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: calc(100% + 3px);\r\n    border-top: 2px solid rgb(20, 100, 246);\r\n}\r\n\r\n\r\n.as-process-l-bar-step::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.as-process-l-bar.as-disabled .as-process-l-bar-step::before{\r\n    display: none;\r\n}\r\n\r\n.as-process-l-bar-step:hover::before {\r\n    background-color: rgba(169, 169, 172, 0.3);\r\n}\r\n\r\n.as-process-l-bar-step.as-active,\r\n.as-process-l-bar-step:hover {\r\n    background-color: var(--as-process-l-bar-active-color);\r\n}\r\n\r\n\r\n.as-process-l-bar-col .as-process-l-bar-step:not(:last-child) {\r\n    margin-bottom: 10px;\r\n}\r\n\r\n.as-process-l-bar-step-name {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 24px;\r\n    font-weight: bold;\r\n}\r\n\r\n\r\n.as-process-l-bar.as-col-layout .as-process-l-bar-step-name {\r\n    position: relative;\r\n    left: initial;\r\n    top: unset;\r\n}\r\n\r\n\r\n.as-process-l-bar.as-single-line .as-process-l-bar-step-ctn {\r\n    white-space: normal;\r\n}\r\n\r\n\r\n.as-process-l-bar.as-single-line  .as-process-l-bar-col {\r\n    margin-bottom: 10px;\r\n}\r\n\r\n.as-process-l-bar.as-single-line .as-process-l-bar-step-name {\r\n    position: relative;\r\n    display: block;\r\n    left: 0 !important;\r\n    top: 0!important;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-progress-bar {\r\n    height: 1em;\r\n    background-color: #e9ecef;\r\n    border-radius: .25em;\r\n    box-sizing: border-box;\r\n    overflow: hidden;\r\n    --value-color: #007bff;\r\n}\r\n\r\n\r\n.as-progress-bar-value {\r\n    height: 100%;\r\n    width: 0;\r\n    color: #fff;\r\n    text-align: center;\r\n    white-space: nowrap;\r\n    background-color: var(--value-color);\r\n    transition: width .6s ease;\r\n}\r\n\r\n.as-progress-bar.as-variant-success,\r\n.as-progress-circle.as-variant-success {\r\n    --value-color: #28a745;\r\n}\r\n\r\n.as-progress-bar.as-variant-info,\r\n.as-progress-circle.as-variant-info {\r\n    --value-color: #17a2b8;\r\n}\r\n\r\n.as-progress-bar.as-variant-warning,\r\n.as-progress-circle.as-variant-warning {\r\n    --value-color: #ffc107;\r\n}\r\n\r\n.as-progress-bar.as-variant-danger,\r\n.as-progress-circle.as-variant-danger {\r\n    --value-color: #dc3545;\r\n}\r\n\r\n\r\n.as-progress-bar.as-striped .as-progress-bar-value,\r\n.as-progress-bar.as-animated .as-progress-bar-value {\r\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);\r\n    background-size: 1.33333em 1.33333em;\r\n}\r\n\r\n@keyframes as-progress-bar-stripes {\r\n    0% {\r\n        background-position: 1.33333em 0\r\n    }\r\n\r\n    to {\r\n        background-position: 0 0\r\n    }\r\n}\r\n\r\n.as-progress-bar.as-animated .as-progress-bar-value {\r\n    animation: as-progress-bar-stripes 1s linear infinite;\r\n}\r\n\r\n\r\n.as-progress-circle {\r\n    display: inline-block;\r\n    width: 7em;\r\n    height: 7em;\r\n    background-color: #fcfcf6;\r\n    border-radius: 50%;\r\n    position: relative;\r\n    --value-color: #007bff;\r\n\r\n    box-shadow: 3px 2px 12px -1px rgba(0, 0, 0, 0.1) inset;\r\n    overflow: hidden;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.as-progress-circle-inner {\r\n    background-color: white;\r\n    position: absolute;\r\n    border-radius: 50%;\r\n    left: 0.8em;\r\n    right: 0.8em;\r\n    top: 0.8em;\r\n    bottom: 0.8em;\r\n    font-size: 1rem;\r\n    box-shadow: 3px 2px 12px -1px rgba(0, 0, 0, 0.1);\r\n    white-space: nowrap;\r\n    text-align: center;\r\n}\r\n\r\n\r\n.as-progress-circle-inner::before {\r\n    content: \"\";\r\n    height: 100%;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-progress-circle-text {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    white-space: pre-wrap;\r\n    max-width: calc(100% - 0.3em);\r\n    font-size: 1em;\r\n    color: #454c5b;\r\n}\r\n\r\n.as-progress-circle-start,\r\n.as-progress-circle-end {\r\n    border-radius: 50%;\r\n    width: 0.8em;\r\n    height: 0.8em;\r\n    background-color: var(--value-color);\r\n    /*background-color: red;*/\r\n    top: 0;\r\n    left: calc(50% - 0.4em);\r\n    position: absolute;\r\n    /*box-shadow: 3px 2px 12px -1px rgba(0, 0, 0, 0.1);*/\r\n}\r\n\r\n.as-progress-circle-pie {\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    border-radius: 50%;\r\n    background-color: var(--value-color);\r\n}\r\n\r\n\r\n.as-progress-circle-end {\r\n\r\n}\r\n\r\n\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-ribbon-button {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: calc(2em + 2);\r\n    padding-left: 0.5em;\r\n    padding-right: 0.5em;\r\n\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 1rem;\r\n    box-sizing: border-box;\r\n    border-radius: 0;\r\n    outline: none;\r\n    border-style: solid;\r\n    border-color: transparent;\r\n    border-width: 1px 1px 1px 1px;\r\n    background-color: transparent;\r\n}\r\n\r\n.as-ribbon-button div,\r\n.as-ribbon-button span {\r\n    font-weight: inherit;\r\n    font-size: inherit;\r\n}\r\n\r\n.as-ribbon-button:hover {\r\n    background-color: rgba(169, 168, 169, 0.15);\r\n}\r\n\r\n.as-ribbon-button:active {\r\n    background-color: rgba(169, 168, 169, 0.3);\r\n}\r\n\r\n\r\n.as-ribbon-split-button:active:hover .as-ribbon-split-button-content > button,\r\n.as-ribbon-split-button:active .as-ribbon-split-button-content > button {\r\n    border-color: rgba(169, 168, 169, 0.3);\r\n}\r\n\r\n.as-ribbon-split-button:hover .as-ribbon-split-button-content > button {\r\n    border-color: rgba(169, 168, 169, 0.15);\r\n}\r\n\r\n.as-ribbon-button-icon {\r\n    font-size: 1.2em;\r\n    margin-right: 0.5em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\nimg.as-ribbon-button-icon,\r\nsvg.as-ribbon-button-icon {\r\n    width: 1.2em;\r\n    height: 1.2em;\r\n}\r\n\r\n.as-ribbon-button-text {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    font-size: inherit;\r\n}\r\n\r\n.as-ribbon-button-text::before {\r\n    content: attr(data-text);\r\n}\r\n\r\n.as-ribbon-button.as-no-dropdown .mdi.mdi-chevron-down {\r\n    display: none;\r\n}\r\n\r\n.as-ribbon-button.as-big {\r\n    width: 5em;\r\n    height: auto;\r\n    white-space: nowrap;\r\n    padding-left: 0;\r\n    padding-right: 0;\r\n}\r\n\r\n.as-ribbon-button.as-big span.as-ribbon-button-icon {\r\n    font-size: 2em;\r\n}\r\n\r\n.as-ribbon-button.as-big .as-ribbon-button-text {\r\n    white-space: normal;\r\n    max-width: calc(100% - 1em);\r\n}\r\n\r\n.as-ribbon-button.as-big svg.as-ribbon-button-icon,\r\n.as-ribbon-button.as-big img.as-ribbon-button-icon {\r\n    height: 2em;\r\n    display: block;\r\n    margin-left: auto;\r\n    margin-right: auto;\r\n}\r\n\r\n.as-ribbon-button.as-appearance-button {\r\n    height: calc(2rem + 2px);\r\n    box-sizing: border-box;\r\n    border: solid 1px #bfbfbf;\r\n    background-color: #ebebeb;\r\n    border-radius: 0.2em;\r\n    outline: none;\r\n    font-size: 1rem;\r\n}\r\n\r\n\r\n.as-ribbon-button.as-appearance-button:hover {\r\n    background-color: #D3D3D3;\r\n}\r\n\r\n.as-ribbon-button.as-appearance-button:active,\r\n.as-ribbon-button.as-appearance-button.as-quick-menu-attached {\r\n    -webkit-box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\r\n    box-shadow: inset 0 0.2em 0.25em rgba(0, 0, 0, 0.125);\r\n}\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-selectlist {\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.absol-selectlist * {\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-selectlist .absol-selectlist-item:hover {\r\n    background-color: #efefef;\r\n}\r\n\r\n.absol-selectlist .absol-selectlist-item {\r\n    height: calc(20rem / 14);\r\n    font-size: 1rem;\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-selectlist-item.as-selected {\r\n    background-color: #dfdfdf;\r\n}\r\n\r\n\r\n.absol-selectlist-item.as-disabled,\r\n.absol-selectlist-item.as-disabled * {\r\n    color: var(--as-disabled-text-color);\r\n    pointer-events: none;\r\n}\r\n\r\n.absol-selectlist:not(.as-searching) > .absol-selectlist-item.as-last-in-group,\r\n.as-select-list-box:not(.as-searching) .as-last-in-group {\r\n    position: relative;\r\n    overflow: visible;\r\n}\r\n\r\n\r\n.as-select-list-box:not(.as-searching) .as-last-in-group::after,\r\n.absol-selectlist:not(.as-searching) > .absol-selectlist-item.as-last-in-group:not(:last-child)::after {\r\n    content: \"\";\r\n    border-bottom: 1px solid black;\r\n    position: absolute;\r\n    left: 0.2em;\r\n    right: 0.2em;\r\n    bottom: -0.5px;\r\n}\r\n\r\n.absol-selectlist-item-text {\r\n    line-height: inherit;\r\n    white-space: pre;\r\n    padding-left: var(--as-input-horizontal-padding);\r\n    padding-right: var(--as-input-horizontal-padding);\r\n    -webkit-user-select: none;\r\n    -moz-user-select: none;\r\n    -ms-user-select: none;\r\n    user-select: none;\r\n}\r\n\r\n.absol-selectlist-item {\r\n    height: 20px;\r\n    line-height: 20px;\r\n    --level: 0;\r\n    padding-left: calc(0.9em * var(--level));\r\n}\r\n\r\n\r\n.absol-selectlist-item {\r\n    position: relative;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-selectlist-item-desc-container {\r\n    position: absolute;\r\n    right: 0.3em;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.absol-selectlist-item-desc {\r\n    font-style: italic;\r\n    line-height: 20px;\r\n    white-space: nowrap;\r\n    color: rgb(37, 37, 37);\r\n}\r\n\r\n.absol-selectlist-item-desc:empty {\r\n    display: none;\r\n}\r\n\r\n.absol-selectlist-item {\r\n    padding-right: calc(0.35em + var(--select-list-desc-width));\r\n}\r\n\r\n.absol-selectlist-item-desc-container {\r\n    width: var(--select-list-desc-width);\r\n}\r\n\r\n\r\n.as-select-list-icon {\r\n    font-size: 1.5em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    padding-left: var(--as-input-horizontal-padding);\r\n}\r\n\r\n\r\n\r\n/**************** MOBILE ******************************/\r\n\r\n:root {\r\n    --modal-margin-top: 80px;\r\n    --modal-margin-bottom: 80px;\r\n    --modal-max-width: 500px;\r\n    --modal-width: calc(100vw - 80px);\r\n    /*--modal-border-radius: 8px;*/\r\n    --modal-border-radius: 0px;\r\n}\r\n\r\n.am-list-modal {\r\n    z-index: 100005;\r\n    position: fixed;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    text-align: center;\r\n    box-sizing: border-box;\r\n    padding-top: var(--modal-margin-top);\r\n    background-color: rgba(0, 0, 0, 0.1);\r\n}\r\n\r\n.am-list-modal > div {\r\n    display: inline-block;\r\n    text-align: initial;\r\n}\r\n\r\n\r\n.am-list-popup-box {\r\n    max-width: var(--modal-max-width);\r\n    width: var(--modal-width);\r\n    /*-webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);*/\r\n    /*-moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);*/\r\n    /*box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);*/\r\n    box-shadow: 2px 2px 2px 0px #908787;\r\n    -webkit-box-shadow: 2px 2px 2px 0px #908787;\r\n    background-color: #ffffff;\r\n    border-radius: var(--modal-border-radius);\r\n    font-family: Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.am-list-popup-box.am-enable-search .absol-search-text-input {\r\n    visibility: visible;\r\n}\r\n\r\n\r\n.am-list-popup-header {\r\n    height: calc(2em + 10px);\r\n    display: block;\r\n    white-space: nowrap;\r\n    box-sizing: border-box;\r\n    padding-top: 5px;\r\n    padding-bottom: 5px;\r\n    padding-left: 10px;\r\n    border-bottom: solid 1px #dddddd;\r\n    /*background-color: rgba(169, 169, 169, 0.2);*/\r\n}\r\n\r\n.am-list-popup-header .absol-search-text-input {\r\n    display: inline-block;\r\n    width: calc(100% - 2em - 18px);\r\n    vertical-align: middle;\r\n    box-sizing: border-box;\r\n    background-color: white;\r\n}\r\n\r\n.am-list-popup-close-btn {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    border-radius: 50%;\r\n    padding: 0;\r\n    height: 2em;\r\n    width: 2em;\r\n    font-size: inherit;\r\n    border: none;\r\n    outline: none;\r\n    margin-left: 10px;\r\n    background-color: rgb(255, 255, 255);\r\n    color: #7a7a7a;\r\n    white-space: nowrap;\r\n}\r\n\r\n.am-list-popup-close-btn:active {\r\n    color: red;\r\n}\r\n\r\n\r\n.am-list-popup-close-btn:before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    height: 2em;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-list-popup-close-btn span {\r\n    font-size: 24px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: 1;\r\n}\r\n\r\n.am-list-popup-box .absol-search-text-input {\r\n    visibility: hidden;\r\n}\r\n\r\n.am-list-popup-paging {\r\n    display: block;\r\n    height: 2em;\r\n    text-align: center;\r\n    box-sizing: border-box;\r\n    border-bottom: 1px solid #dddddd;\r\n}\r\n\r\n.am-list-popup-paging::before {\r\n    content: \"\";\r\n    height: 100%;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-list-popup-paging-content {\r\n    padding-left: 0.5em;\r\n    padding-right: 0.5em;\r\n}\r\n\r\n.am-list-popup-paging > * {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-list-popup-paging > button {\r\n    padding: 0;\r\n    margin-left: 0.25em;\r\n    margin-right: 0.25em;\r\n    width: 1.75em;\r\n    height: 1.75em;\r\n    display: inline-block;\r\n    background-color: transparent;\r\n    border: none;\r\n    box-sizing: border-box;\r\n    outline: none;\r\n}\r\n\r\n.am-list-popup-paging > button:active {\r\n    background-color: rgba(169, 169, 169, 0.3);\r\n}\r\n\r\n\r\ninput[type=\"number\"].am-list-popup-paging-offset {\r\n    width: 4em;\r\n    outline: none;\r\n    margin-right: 0.2em;\r\n    /*border: solid 1px #a9a9a9;*/\r\n    /*border-radius: 0.3em;*/\r\n    border:none;\r\n    text-align: right;\r\n    font-size: inherit;\r\n    height: 1.25em;\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n.am-list-popup-list-scroller {\r\n    width: 100%;\r\n    overflow: auto;\r\n    --content-height: calc(100vh - 200px);\r\n    -ms-overflow-style: none;  /* IE and Edge */\r\n    scrollbar-width: none;  /* Firefox */\r\n}\r\n\r\n\r\n.am-list-popup-list-scroller::-webkit-scrollbar {\r\n    display: none;\r\n}\r\n\r\n.am-list-popup-content {\r\n    display: block;\r\n    position: relative;\r\n}\r\n\r\n.am-list-popup-list-page{\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: -200vh;\r\n    box-sizing: border-box;\r\n}\r\n\r\n\r\n.am-list-modal .am-selectlist {\r\n    width: 100%;\r\n}\r\n\r\n.am-list-popup-list-page.am-selectlist{\r\n    --desc-width: inherit;\r\n}\r\n\r\n.am-value-hidden .am-selectlist-item.as-selected{\r\n    display: none;\r\n}\r\n\r\n.am-selectlist {\r\n    display: table;\r\n    border-collapse: collapse;\r\n    border-spacing: 0;\r\n}\r\n\r\n.am-selectlist > .am-selectlist-item {\r\n    display: table-row;\r\n\r\n}\r\n\r\n.am-selectlist > .am-selectlist-item:active {\r\n    background-color: rgba(169, 169, 169, 0.4);\r\n}\r\n\r\n.am-selectlist > .am-selectlist-item.as-selected {\r\n    background-color: #dfdfdf;\r\n}\r\n\r\n\r\n.am-selectlist > .am-selectlist-item {\r\n    border-bottom: 0.5px solid #dddddd;\r\n}\r\n\r\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-check-ctn {\r\n    display: table-cell;\r\n    vertical-align: middle;\r\n    padding-left: 0.35em;\r\n}\r\n\r\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-text-ctn,\r\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-desc-ctn {\r\n    display: table-cell;\r\n    padding-top: 0.5em;\r\n    padding-bottom: 0.5em;\r\n}\r\n\r\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-text-ctn {\r\n    padding-right: 5px;\r\n    padding-left: calc(10px + 0.9em * var(--level));\r\n}\r\n\r\n.am-selectlist > .am-selectlist-item > .am-selectlist-item-desc-ctn {\r\n    padding-left: 5px;\r\n    padding-right: 10px;\r\n}\r\n\r\n\r\n.am-selectlist {\r\n    --desc-width: auto;\r\n}\r\n\r\n.am-selectlist .am-selectlist-item-desc-ctn {\r\n    width: var(--desc-width);\r\n}\r\n\r\n/******************************************************/\r\n.am-selectlist-item {\r\n    --level: 0;\r\n}\r\n\r\n.am-selectlist-item-text-ctn {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-selectlist-item-desc-ctn {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n\r\n.am-selectlist-item-desc {\r\n    font-style: italic;\r\n    line-height: 20px;\r\n    color: rgb(80, 80, 82);\r\n}\r\n\r\n\r\n.am-selectlist-item-icon {\r\n    font-size: 1.5em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-selectmenu-anchor-container {\r\n    /* position: fixed; */\r\n\r\n    /* top: 0; */\r\n    /* left: 0; */\r\n    width: 0;\r\n    height: 0;\r\n    overflow: visible;\r\n}\r\n\r\n.absol-selectmenu-anchor {\r\n    position: relative;\r\n}\r\n\r\n.absol-selectmenu-anchor-content-container {\r\n    position: absolute;\r\n    z-index: 1002;\r\n    top: 0;\r\n    left: 0;\r\n}\r\n\r\n.absol-selectmenu-anchor-content-container .absol-bscroller {\r\n    max-height: calc(100vh - 50px);\r\n}\r\n\r\n\r\n.absol-selectmenu-anchor.absol-disabled .absol-selectmenu-anchor-content-container {\r\n    visibility: hidden;\r\n    top: -100000px;\r\n    left: -10000px;\r\n    z-index: -1000;\r\n    opacity: 0;\r\n}\r\n\r\n\r\n.absol-selectmenu-dropdown-box {\r\n    border: solid 1px rgb(100, 100, 255);\r\n    box-sizing: border-box;\r\n    background-color: white;\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n}\r\n\r\n.absol-selectmenu-dropdown-box > .as-bscroller {\r\n    overflow-y: auto;\r\n}\r\n\r\n.absol-selectmenu-dropdown-box .absol-search-text-input {\r\n    margin: 0.2em;\r\n}\r\n\r\n\r\n.absol-selectmenu.absol-hidden {\r\n    display: none !important;\r\n}\r\n\r\n.absol-selectmenu-render-space {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    z-index: -1000;\r\n    visibility: hidden;\r\n    font-size: 14px;\r\n}\r\n\r\n.absol-selectmenu-render-space > div {\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.absol-selectmenu.as-disabled,\r\n.as-select-menu.as-disabled {\r\n    pointer-events: none;\r\n    background-color: var(--as-disabled-background-color);\r\n    color: var(--as-disabled-text-color);\r\n}\r\n\r\n.absol-selectmenu {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    position: relative;\r\n    height: calc(2em + 2px);\r\n    min-width: calc(2em + 2px);\r\n    border: solid 1px #d6d6d6;\r\n    border-radius: 2px;\r\n    box-sizing: border-box;\r\n    font-size: 1rem;\r\n    outline: none;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    background-color: white;\r\n}\r\n\r\n.absol-selectmenu.as-border-none {\r\n    border: none;\r\n}\r\n\r\n.absol-selectmenu.as-border-none .absol-selectlist-item span {\r\n    padding-left: 0;\r\n    user-select: inherit;\r\n    -ms-user-select: inherit;\r\n    -webkit-user-select: inherit;\r\n}\r\n\r\n.absol-selectmenu:not(.as-read-only) {\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-selectmenu.as-read-only .absol-selectlist-item span {\r\n    user-select: inherit;\r\n    -moz-user-select: inherit;\r\n    -webkit-user-select: inherit;\r\n    -ms-user-select: inherit;\r\n}\r\n\r\n\r\n.absol-selectmenu-btn {\r\n    position: absolute;\r\n    top: 0;\r\n    bottom: 0;\r\n    right: 0;\r\n    width: 30px;\r\n    border: none;\r\n    background: transparent;\r\n    z-index: 2;\r\n    pointer-events: none;\r\n}\r\n\r\n.absol-selectmenu-btn:focus {\r\n    outline: none;\r\n}\r\n\r\n.absol-selectmenu-btn svg.dropdown {\r\n    width: 10px;\r\n    height: 10px;\r\n    fill: #929292;\r\n}\r\n\r\n.absol-selectmenu.as-read-only svg.dropdown {\r\n    display: none;\r\n}\r\n\r\n.absol-selectmenu:not(.as-read-only):hover svg.dropdown {\r\n    width: 10px;\r\n    height: 10px;\r\n    fill: black;\r\n}\r\n\r\n.absol-selectmenu .absol-selectlist-item-text {\r\n    display: inline-block;\r\n    overflow: hidden;\r\n    max-width: calc(var(--as-width-limit) - 30px);\r\n    text-overflow: ellipsis;\r\n    vertical-align: middle;\r\n\r\n}\r\n\r\n\r\n.absol-selectmenu-holder-item {\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    /*1px for border*/\r\n    white-space: nowrap;\r\n}\r\n\r\n.absol-selectmenu-holder-item::before {\r\n    content: \"\";\r\n    height: 100%;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.absol-selectmenu-holder-item > .absol-selectlist-item {\r\n    display: inline-block;\r\n    width: 100%;\r\n    vertical-align: middle;\r\n}\r\n\r\n.absol-selectmenu .absol-selectlist-item-text {\r\n    padding-right: 28px;\r\n}\r\n\r\n.absol-selectmenu .absol-scroll-button {\r\n    background-color: rgba(0, 0, 0, 0.1);\r\n    border-radius: 3px;\r\n}\r\n\r\n.absol-selectmenu .absol-scroll-button:hover {\r\n    background-color: rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n.absol-scroll-bar-v-container {\r\n    width: 10px;\r\n}\r\n\r\n.absol-selectmenu .absol-search-text-input {\r\n    margin: 4px;\r\n}\r\n\r\n.absol-selectmenu-render-space .absol-selectlist-item span {\r\n    padding-right: 0;\r\n}\r\n\r\n\r\n.absol-selectmenu .absol-selectlist-item-desc-container {\r\n    right: 30px;\r\n}\r\n\r\n\r\n.absol-selectmenu-dropdown-box .absol-bscroller {\r\n    overflow-y: auto;\r\n}\r\n\r\n\r\n.as-select-anchor {\r\n    position: fixed;\r\n    z-index: 1000001;\r\n}\r\n\r\n\r\n.as-select-anchor.as-hidden {\r\n    left: 0;\r\n    top: 0;\r\n    z-index: -1000;\r\n    visibility: hidden;\r\n    opacity: 0;\r\n}\r\n\r\n\r\n.as-select-menu {\r\n    --select-list-estimate-width: 0px;\r\n    --select-list-desc-width: 0px;\r\n    width: calc(var(--select-list-estimate-width) + 32px);\r\n    min-width: calc(var(--select-list-estimate-width) + 32px);\r\n}\r\n\r\n/***********************************************************************************************************************/\r\n\r\n.am-selectmenu-modal {\r\n    z-index: 100005;\r\n    position: fixed;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    text-align: center;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.am-selectmenu-modal>div{\r\n    display: inline-block;\r\n    text-align: initial;\r\n}\r\n\r\n.am-selectmenu-popup-box {\r\n    max-width: calc(100vw - 60px);\r\n    -webkit-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    -moz-box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    box-shadow: 2px 2px 6px 0px rgba(0, 0, 90, 0.55);\r\n    background-color: #ffffff;\r\n    border-radius: 0.5em;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.am-selectmenu-popup-box-header{\r\n    height: calc(2em + 10px);\r\n    display: block;\r\n    white-space: nowrap;\r\n    box-sizing: border-box;\r\n    padding-top: 5px;\r\n    padding-bottom: 5px;\r\n    padding-left: 10px;\r\n    border-bottom: solid 1px #dddddd;\r\n    background-color: rgba(169, 169, 169,0.2);\r\n}\r\n\r\n.am-selectmenu-popup-box-header .absol-search-text-input{\r\n    display: inline-block;\r\n    width: calc(100% - 2em - 25px);\r\n    vertical-align: middle;\r\n    box-sizing: border-box;\r\n    background-color: white;\r\n}\r\n\r\n.am-selectmenu-popup-box-close-btn{\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    border-radius:50%;\r\n    padding: 0;\r\n    height: 2em;\r\n    width: 2em;\r\n    font-size: inherit;\r\n    border: none;\r\n    outline: none;\r\n    margin-right: 10px;\r\n    background-color: rgb(255, 255, 255);\r\n    color: rgb(190, 30, 30);\r\n}\r\n\r\n.am-selectmenu-popup-box-close-btn:active{\r\n    color: red;\r\n}\r\n\r\n\r\n.am-selectmenu-popup-box-close-btn:before{\r\n    content: \"\";\r\n    display: inline-block;\r\n    height: 2em;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-selectmenu-popup-box-close-btn span{\r\n    font-size: 1.5em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: 1;\r\n}\r\n\r\n.am-selectmenu-scroller {\r\n    max-height: calc(100vh - 140px);\r\n    overflow-y: auto;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.am-selectlist.am-selectmeu-list{\r\n    min-width: 30vw;\r\n}\r\n\r\n.am-selectlist.am-selectmeu-list.as-searching{\r\n    width: 100%;\r\n}\r\n\r\n.am-selectmenu-popup-box .absol-search-text-input{\r\n    display: none;\r\n}\r\n\r\n\r\n.am-selectmenu-popup-box.am-enable-search .absol-search-text-input{\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-selectmenu{\r\n    white-space: nowrap;\r\n    background: white;\r\n    overflow: hidden;\r\n    box-sizing: border-box;\r\n    padding-right: 35px;\r\n    max-width: 95vw;\r\n    width: var(--recommend-width);\r\n}\r\n\r\n.am-selectmenu.disabled .absol-selectmenu-btn{\r\n    background-color: #ebebe4;\r\n}\r\n\r\n.am-selectmenu .absol-selectmenu-btn{\r\n    background: white;\r\n}\r\n\r\n.am-selectmenu::before{\r\n    content: \"\";\r\n    height: 100%;\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.am-selectmenu-holder-item{\r\n    display: inline-table;\r\n    vertical-align: middle;\r\n    width: 100%;\r\n    table-layout: auto;\r\n}\r\n\r\n.am-selectmenu-holder-item>.am-selectlist-item{\r\n    display: table-row;\r\n}\r\n\r\n.am-selectmenu-holder-item .am-selectlist-item-text-ctn,\r\n.am-selectmenu-holder-item .am-selectlist-item-desc-ctn{\r\n    display: table-cell;\r\n    padding-left: 10px;\r\n    white-space: nowrap;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    width: auto;\r\n}\r\n\r\n\r\n.am-selectmenu.disabled {\r\n    pointer-events: none;\r\n    background-color: #ebebe4;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".am-select-tree-leaf-box {\r\n    min-width: 10em;\r\n}\r\n\r\n.am-select-tree-leaf-box-body {\r\n    overflow-y: auto;\r\n    max-height: calc(80vh - 2em);\r\n}\r\n\r\n.am-select-tree-leaf-box.as-enable-search .am-select-tree-leaf-box-body {\r\n    max-height: calc(80vh - 4em - 10px);\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item {\r\n    display: block;\r\n    white-space: nowrap;\r\n    position: relative;\r\n    width: 100%;\r\n    overflow: hidden;\r\n    --level: 0;\r\n    --icon-width: 0px;\r\n}\r\n\r\n.am-select-tree-leaf-item:active {\r\n    background-color: #efefef;\r\n}\r\n\r\n.am-select-tree-leaf-item.as-selected {\r\n    background-color: #dfdfdf;\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item.as-has-icon {\r\n    --icon-width: 2.7em;\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item-toggle-ctn,\r\n.am-select-tree-leaf-item-icon-ctn,\r\n.am-select-tree-leaf-item-checkbox-ctn {\r\n    position: absolute;\r\n    white-space: nowrap;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.am-select-tree-leaf-item-toggle-ctn {\r\n    left: calc(2em * var(--level) + 0.2em);\r\n    width: 1.5em;\r\n    text-align: center;\r\n}\r\n\r\n.am-select-tree-leaf-item-toggle-ctn > svg {\r\n    width: 0.7em;\r\n    height: 0.7em;\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item-icon-ctn {\r\n    left: calc(2em * var(--level) + 1.7em);\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item-icon-ctn > svg {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n\r\n}\r\n\r\n.am-select-tree-leaf-item-icon-ctn {\r\n\r\n}\r\n\r\n.am-select-tree-leaf-item.as-status-open svg .toggle-close,\r\n.am-select-tree-leaf-item.as-status-close svg .toggle-open,\r\n.am-select-tree-leaf-item:not(.as-status-close):not(.as-status-open) .am-select-tree-leaf-item-toggle-ctn {\r\n    display: none;\r\n}\r\n\r\n.am-select-tree-leaf-item-icon-ctn::before,\r\n.am-select-tree-leaf-item-toggle-ctn::before,\r\n.am-select-tree-leaf-item-checkbox-ctn::before {\r\n    content: \"\";\r\n    height: 100%;\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n}\r\n\r\n.am-select-tree-leaf-item-icon-ctn:empty {\r\n    display: none;\r\n}\r\n\r\n.am-select-tree-leaf-item-icon-ctn > span {\r\n    font-size: 1.8em;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item-icon-ctn img,\r\n.am-select-tree-leaf-item-icon-ctn svg {\r\n    width: 1.8em;\r\n    height: 1.8em;\r\n    display: inline-block;\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item-text {\r\n    width: var(--text-width);\r\n    box-sizing: border-box;\r\n    padding: 0.3em 0.5em 0.3em calc(1.2em + 2em * var(--level) + var(--icon-width));\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: 1.5;\r\n    white-space: normal;\r\n}\r\n\r\n\r\n.am-select-tree-leaf-item-desc {\r\n    display: none;\r\n    vertical-align: middle;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-select-tree-leaf-item:not(.as-is-leaf) > .absol-exp-node > .absol-exp-node-name,\r\n.as-select-tree-leaf-item:not(.as-is-leaf) > .absol-exp-node > .absol-exp-node-ext-icon,\r\n.as-select-tree-leaf-item.as-no-select > .absol-exp-node > .absol-exp-node-name,\r\n.as-select-tree-leaf-item.as-no-select > .absol-exp-node > .absol-exp-node-ext-icon\r\n{\r\n    color: #888;\r\n}\r\n\r\n.as-select-tree-leaf-item:not(.as-is-leaf) > .absol-exp-node > .absol-exp-node-desc {\r\n    color: rgb(169, 169, 172)\r\n}\r\n\r\n.as-select-tree-leaf-item > .absol-exp-node:hover,\r\n.as-select-tree-leaf-item > .absol-exp-node:focus,\r\n.as-select-tree-leaf-item > .absol-exp-node:active {\r\n    background-color: transparent;\r\n}\r\n\r\n.as-select-tree-leaf-item.as-is-leaf:not(.as-no-select) > .absol-exp-node:hover {\r\n    background-color: #efefef;\r\n}\r\n\r\n.as-select-tree-leaf-item.as-selected > .absol-exp-node {\r\n    background-color: #dfdfdf;\r\n}\r\n\r\n.am-select-tree-menu.absol-selectmenu {\r\n    width: auto;\r\n}\r\n\r\n.am-select-tree-menu .absol-selectmenu-holder-item {\r\n    position: relative;\r\n    left: unset;\r\n    right: unset;\r\n    top: unset;\r\n    bottom: unset;\r\n    height: 100%;\r\n    max-width: 100%;\r\n}\r\n\r\n\r\n.am-select-tree-menu .absol-selectlist-item-text {\r\n    max-width: calc(100vw - 200px);/**TODO: find better solution*/\r\n    text-overflow: ellipsis;\r\n    overflow: hidden;\r\n}", ""]);



/***/ }),

/***/ 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{\r\n    right: 30px;\r\n}\r\n\r\n\r\n.absol-selectmenu-holder-item .absol-tree-list-item-parent:hover {\r\n    background-color: transparent;\r\n}\r\n\r\n.am-select-tree-menu {\r\n    max-width: var(--as-width-limit);\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "\r\n.as-table-of-text-input-wrapper {\r\n    border: 1px solid #dddddd;\r\n}\r\n\r\n.as-table-of-text-input-content-ctn {\r\n    overflow: auto;\r\n}\r\n\r\n\r\n.as-table-of-text-input {\r\n    width: 100%;\r\n    border-collapse: collapse;\r\n    color: black;\r\n    font-family: 'Aptos Narrow', Calibri, sans-serif, 'Mongolian Baiti', 'Microsoft Yi Baiti', 'Javanese Text', 'Yu Gothic';\r\n    font-size: 11pt;\r\n    margin: 10px;\r\n}\r\n\r\n.as-table-of-text-input-wrapper.as-size-a4 .as-table-of-text-input {\r\n    width: 445pt;\r\n}\r\n\r\n.as-table-of-text-input pre {\r\n    font: inherit;\r\n    line-height: 1.75;\r\n}\r\n\r\n.as-table-of-text-input.as-inline {\r\n    display: inline-table;\r\n}\r\n\r\n.as-table-of-text-input-cell {\r\n    vertical-align: top;\r\n    padding: 0px 5px;\r\n    border: 1px dashed #808080;\r\n    position: relative;\r\n}\r\n\r\n.as-table-of-text-input-cell.as-focus::before {\r\n    pointer-events: none;\r\n    content: \"\";\r\n    position: absolute;\r\n    border: 1px dashed var(--variant-color-primary);\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.as-table-of-text-input-cell .as-preinput {\r\n    outline: none;\r\n    display: block;\r\n}\r\n\r\n.as-table-of-text-input-cell.as-bold {\r\n    font-weight: bold;\r\n}\r\n\r\n.as-table-of-text-input-cell.as-italic {\r\n    font-style: italic;\r\n}\r\n\r\n.as-table-of-text-input-tool {\r\n    background-color: #f8f8f8;\r\n    font-size: 14px;\r\n    /*-webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);*/\r\n    /*-moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);*/\r\n    /*box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);*/\r\n    /*border-radius: 4px;*/\r\n    padding: 3px;\r\n    border-bottom: 1px solid #dddddd;\r\n}\r\n\r\n.as-table-of-text-input-tool > button {\r\n    height: 30px;\r\n    width: 30px;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.as-table-of-text-input-tool > button.as-checked {\r\n    color: #2977ff;\r\n    background-color: rgb(240, 247, 255);\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-table-scroller .absol-table-scroller-viewport {\r\n    width: calc(100% + var(--scrollbar-width));\r\n    height: calc(100% + var(--scrollbar-width));\r\n}\r\n\r\n.absol-table-scroller .absol-table-scroller-header-hscroller-viewport {\r\n    margin-bottom: calc(0px - var(--scrollbar-width))\r\n}\r\n\r\n\r\n.absol-table-scroller {\r\n    --scrollbar-width: 17px;\r\n    --new-pos-y: 0;\r\n    position: relative;\r\n    padding-right: 17px;\r\n    padding-bottom: 17px;\r\n    --tvs-scroll-padding-bottom: 0px;\r\n}\r\n\r\n.absol-table-scroller:not(.as-scroll-vertical) {\r\n    padding-right: 0;\r\n}\r\n\r\n\r\n.absol-table-scroller:not(.as-scroll-horizontal) {\r\n    padding-bottom: 0;\r\n}\r\n\r\n.as-table-scroller-origin-table-ctn{\r\n    padding-bottom: var(--tvs-scroll-padding-bottom);\r\n\r\n}\r\n\r\n\r\n.as-table-scroller-vertical-scroller {\r\n    overflow-y: scroll;\r\n    height: 100%;\r\n    box-sizing: border-box;\r\n    margin-right: calc(0px - var(--scrollbar-width));\r\n}\r\n\r\n.as-table-scroller-fixed-y-header-ctn {\r\n    position: absolute;\r\n    z-index: 4;\r\n    top: 0;\r\n    left: 0;\r\n    right: 0;\r\n    overflow: hidden;\r\n}\r\n\r\n.as-table-scroller-fixed-x-col-ctn {\r\n    position: absolute;\r\n    z-index: 5;\r\n    top: 0;\r\n    left: 0;\r\n    overflow: hidden;\r\n}\r\n\r\n.as-table-scroller-fixed-xy-header-ctn {\r\n    position: absolute;\r\n    z-index: 12;\r\n    top: 0;\r\n    left: 0;\r\n    overflow: hidden;\r\n}\r\n\r\n.as-table-scroller-fixed-y-header-scroller {\r\n    overflow-x: scroll;\r\n    margin-bottom: calc(var(--scrollbar-width) * -1);\r\n}\r\n\r\n\r\n.as-table-scroller-horizontal-scroller-viewport {\r\n    overflow: hidden;\r\n    position: relative;\r\n}\r\n\r\n.as-table-scroller-horizontal-scroller {\r\n    overflow-x: scroll;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    margin-bottom: calc(var(--scrollbar-width) * -1);\r\n}\r\n\r\n.absol-table-scroller-content {\r\n    position: relative;\r\n    overflow: hidden;\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.absol-table-scroller-render-space {\r\n    position: fixed;\r\n    overflow: scroll;\r\n    left: 0;\r\n    top: 0;\r\n    max-width: calc(99vw - 30px);\r\n    max-height: calc(99vh - 30px);\r\n    opacity: 0;\r\n    z-index: -1000;\r\n    visibility: hidden;\r\n}\r\n\r\n\r\n.absol-table-scroller-viewport {\r\n    box-sizing: border-box;\r\n    overflow: scroll;\r\n    width: calc(100% + 17px);\r\n    height: calc(100% + 17px);\r\n    background-color: white;\r\n}\r\n\r\n.absol-table-scroller-fixed-viewport {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    z-index: 10;\r\n    overflow: hidden;\r\n    background-color: white;\r\n    /*pointer-events: none;*/\r\n}\r\n\r\n.absol-table-scroller-fixed-viewport > table > thead,\r\n.absol-table-scroller-fixed-viewport > table {\r\n    /*border-top-color: transparent !important;*/\r\n}\r\n\r\n.absol-table-scroller-fixed-hidden {\r\n    visibility: hidden !important;\r\n    opacity: 0 !important;\r\n    border-color: transparent !important;\r\n\r\n}\r\n\r\n.absol-table-scroller-header-hscroller {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    right: 0;\r\n    z-index: 9;\r\n    overflow: hidden;\r\n    /*pointer-events: none;*/\r\n}\r\n\r\n.absol-table-scroller-header-hscroller-viewport {\r\n    max-width: 100%;\r\n    overflow-x: scroll;\r\n    margin-bottom: -17px; /*default*/\r\n    background-color: white;\r\n}\r\n\r\n.absol-table-scroller-header-hscroller-viewport table {\r\n    table-layout: fixed;\r\n}\r\n\r\n\r\n.absol-table-scroller-left-vscroller {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    bottom: 0;\r\n    z-index: 7;\r\n    /* width: 200px; */\r\n    overflow-x: hidden;\r\n    /*pointer-events: none;*/\r\n}\r\n\r\n.absol-table-scroller-left-vscroller-viewport {\r\n    max-height: 100%;\r\n    overflow-y: scroll;\r\n    min-width: calc(100% + 19px);\r\n    overflow-x: hidden;\r\n    background-color: white;\r\n}\r\n\r\n\r\n.absol-table-scroller-head-line,\r\n.absol-table-scroller-left-line {\r\n    z-index: 30;\r\n    /*pointer-events: none;*/\r\n    position: absolute;\r\n}\r\n\r\n.absol-table-scroller-head-line {\r\n    left: 0;\r\n    border-bottom: solid 2px rgb(169, 169, 170);\r\n    width: 100%;\r\n}\r\n\r\n.absol-table-scroller-left-line {\r\n    top: 0;\r\n    border-right: solid 2px rgb(169, 169, 170);\r\n    height: 100%;\r\n}\r\n\r\n\r\n.absol-table-scroller.as-scroll-vertical .absol-table-scroller-head-line {\r\n    width: 100%;\r\n}\r\n\r\n.absol-table-scroller.as-scroll-horizontal .absol-table-scroller-left-line {\r\n    height: 100%;\r\n}\r\n\r\n\r\n.absol-table-scroller:not(.as-scroll-vertical) .absol-table-scroller-head-line {\r\n    display: none;\r\n}\r\n\r\n.absol-table-scroller:not(.as-scroll-horizontal) .absol-table-scroller-left-line {\r\n    display: none;\r\n}\r\n\r\n\r\n.absol-table-scroller-vscrollbar-container {\r\n    position: absolute;\r\n    top: 0;\r\n    right: 0px;\r\n    width: 17px;\r\n    bottom: 0;\r\n    z-index: 31;\r\n}\r\n\r\n.absol-table-scroller-vscrollbar-container .absol-scrollbar-button {\r\n    left: 1px;\r\n    right: 1px;\r\n}\r\n\r\n\r\n.absol-table-scroller-vscrollbar-container > div,\r\n.absol-table-scroller-hscrollbar-container > div {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.absol-table-scroller-hscrollbar-container {\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    height: 17px;\r\n    bottom: 0;\r\n    z-index: 31;\r\n}\r\n\r\n\r\n.absol-table-scroller-hscrollbar-container .absol-scrollbar-button {\r\n    top: 1px;\r\n    bottom: 1px;\r\n}\r\n\r\n\r\n.absol-table-scroller:not(.as-scroll-vertical) .absol-table-scroller-vscrollbar-container {\r\n    display: none;\r\n}\r\n\r\n.absol-table-scroller:not(.as-scroll-horizontal) .absol-table-scroller-hscrollbar-container {\r\n    display: none;\r\n}\r\n\r\n\r\n.absol-table-scroller.as-scroll-horizontal .absol-table-scroller-vscrollbar-container {\r\n    bottom: 17px;\r\n}\r\n\r\n.absol-table-scroller.as-scroll-vertical .absol-table-scroller-hscrollbar-container {\r\n    right: 17px;\r\n}\r\n\r\n.absol-table-scroller-fixed-table {\r\n    table-layout: fixed;\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n.absol-table-scroller-fixed-table *,\r\n.absol-table-scroller-header-hscroller * {\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-table-scroller .as-drag-zone {\r\n    cursor: move;\r\n}\r\n\r\n\r\n.absol-table-scroller tr.as-dragging {\r\n    position: relative;\r\n    z-index: 1;\r\n    -webkit-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    -moz-box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    box-shadow: 2px 2px 9px 0px rgba(20, 20, 20, 1);\r\n    opacity: 0.8;\r\n}\r\n\r\n.absol-table-scroller td.as-transparent-fix {\r\n    visibility: hidden;\r\n    opacity: 0;\r\n}\r\n\r\n.absol-table-scroller.as-dragging tbody tr:not(.as-dragging) {\r\n    transition: transform 0.1s;\r\n}\r\n\r\n\r\n.absol-table-scroller-viewport thead .as-rotated-text-anchor,\r\n.absol-table-scroller-fixed-viewport thead .as-rotated-text-anchor,\r\n.absol-table-scroller-left-vscroller thead .as-rotated-text-anchor {\r\n    display: none;\r\n}\r\n\r\n.absol-table-scroller .as-rotated-text-anchor {\r\n    white-space: nowrap;\r\n}\r\n\r\n\r\n.as-table-scroller-row-index::before {\r\n    content: attr(data-idx);\r\n}\r\n\r\n/*.absol-table-scroller.as-has-new-pos.as-dragging::before {*/\r\n/*    content: \"\";*/\r\n/*    position: absolute;*/\r\n/*    left: 0;*/\r\n/*    top: var(--new-pos-y);*/\r\n/*    right: 0;*/\r\n/*    border-top: 2px solid blue;*/\r\n/*    z-index: 8;*/\r\n/*    transition: top 0.1s;*/\r\n/*}*/\r\n\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-tabbar {\r\n    height: 2em;\r\n    white-space: nowrap;\r\n}\r\n\r\n\r\n.absol-tabbar .absol-hscroller-viewport {\r\n    overflow-y: hidden;\r\n}\r\n\r\n.absol-tabbar .absol-tabbar-button,\r\n.absol-tabbar .as-tab-bar-add-btn {\r\n    height: 100%;\r\n}\r\n\r\n/* .absol-tabbar .absol-scrollbar-container {\r\n    height: 5px;\r\n} */\r\n\r\n.absol-tabbar .absol-scrollbar-container.horizontal {\r\n    bottom: -2px;\r\n}\r\n\r\n.absol-tabbar .absol-scrollbar-container {\r\n    opacity: 0;\r\n    transition: opacity 0.2s;\r\n    background: rgba(169, 169, 169, 0.1);\r\n}\r\n\r\n.absol-tabbar:hover .absol-scrollbar-container,\r\n.absol-tabbar:active .absol-scrollbar-container {\r\n    opacity: 1;\r\n}\r\n\r\n.absol-tabbar .absol-scrollbar-button {\r\n    background-color: rgba(33, 33, 40, 0.1);\r\n}\r\n\r\n.absol-tabbar .absol-scrollbar-button:hover {\r\n    background-color: rgba(33, 33, 40, 0.3);\r\n}\r\n\r\n\r\n.absol-tabbar .absol-scrollbar-button:active,\r\n.absol-tabbar .absol-hscrollbar.absol-active .absol-scrollbar-button {\r\n    background-color: rgba(47, 47, 55, 0.4);\r\n\r\n}\r\n\r\n\r\n.absol-tabbar-button {\r\n    padding-left: 1em;\r\n    padding-right: 1em;\r\n    background-color: rgb(45, 45, 45);\r\n    color: rgb(200, 200, 200);\r\n    margin-right: 1px;\r\n    border: none;\r\n    outline: none;\r\n    font-size: 1em;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-tab-bar-add-btn {\r\n    padding-left: 0.5em;\r\n    padding-right: 0.5em;\r\n    background-color: rgb(45, 45, 45);\r\n    color: rgb(200, 200, 200);\r\n    margin-right: 1px;\r\n    border: none;\r\n    outline: none;\r\n    font-size: 1em;\r\n    white-space: nowrap;\r\n}\r\n\r\n\r\n.as-tab-bar-button-ext-icon-ctn:empty {\r\n    display: none\r\n}\r\n\r\n.as-tab-bar-button-ext-icon-ctn {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    padding-right: 0.35em;\r\n    margin-left: -0.5em;\r\n}\r\n\r\n.absol-tabbar-button-text {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    max-width: 300px;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n}\r\n\r\n.as-tab-bar-button-ext-icon-ctn span {\r\n    font-size: 1.2em;\r\n}\r\n\r\n\r\n.absol-tabbar .absol-tabbar-button-active {\r\n    background-color: rgb(30, 30, 30);\r\n    color: rgb(250, 250, 252);\r\n}\r\n\r\n.absol-tabbar-button-text,\r\n.absol-tabbar-button-icon-container > span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    font-size: 1em;\r\n}\r\n\r\n.absol-tabbar-button .absol-tabbar-button-close,\r\n.absol-tabbar-button .absol-tabbar-button-close-circle {\r\n    visibility: hidden;\r\n    color: rgb(190, 190, 190);\r\n}\r\n\r\n.absol-tabbar-button.as-prevent-closing .absol-tabbar-button-close,\r\n.absol-tabbar-button.as-prevent-closing .absol-tabbar-button-close-circle {\r\n    visibility: hidden;\r\n}\r\n\r\n.absol-tabbar-button.as-prevent-closing .absol-tabbar-button-icon-container {\r\n    pointer-events: none;\r\n}\r\n\r\n.absol-tabbar-button-icon-container {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    margin-left: 0.5em;\r\n}\r\n\r\n\r\n.absol-tabbar-button:not(.as-prevent-closing):hover .absol-tabbar-button-close,\r\n.absol-tabbar-button-active:not(.as-prevent-closing) .absol-tabbar-button-close,\r\n.absol-tabbar-button:hover:not(.as-prevent-closing) .absol-tabbar-button-close-circle,\r\n.absol-tabbar-button-active:not(.as-prevent-closing) .absol-tabbar-button-close-circle {\r\n    visibility: visible;\r\n    color: red;\r\n}\r\n\r\n.absol-tabbar-button-active .absol-tabbar-button-modified-flag {\r\n    color: lightblue;\r\n}\r\n\r\n.absol-tabbar-button-modified-flag {\r\n    color: mediumaquamarine;\r\n}\r\n\r\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-modified-flag,\r\n.absol-tabbar-button.absol-tabbar-button-modified:not(.active) .absol-tabbar-button-icon-container:hover .absol-tabbar-button-modified-flag,\r\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close,\r\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close-circle,\r\n.absol-tabbar-button:not(.absol-tabbar-button-modified) .absol-tabbar-button-icon-container:hover .absol-tabbar-button-close,\r\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-close-circle,\r\n.absol-tabbar-button.absol-tabbar-button-modified .absol-tabbar-button-icon-container:not(:hover) .absol-tabbar-button-close {\r\n    display: none;\r\n}\r\n\r\n\r\n.absol-button-range {\r\n}\r\n\r\n\r\n.absol-tabview {\r\n    position: relative;\r\n}\r\n\r\n\r\n.absol-tabview-container {\r\n    position: absolute;\r\n    top: 2em;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    overflow: auto;\r\n    background-color: white;\r\n}\r\n\r\n\r\n.absol-tabview-container.absol-tabview-container-hidden {\r\n    z-index: -9999;\r\n    visibility: hidden;\r\n    opacity: 0;\r\n\r\n}\r\n\r\n.absol-tabview-container.absol-tabview-container-hidden *,\r\n.absol-tabview-container.absol-tabview-container-hidden {\r\n    pointer-events: none;\r\n    user-select: none;\r\n    -webkit-user-select: none;\r\n    -moz-user-select: none;\r\n}\r\n\r\n\r\n.absol-tabview-container > div,\r\n.absol-tabview-container > pre {\r\n    width: 100%;\r\n    height: 100%;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-tabview-container > pre {\r\n    margin: 0;\r\n}\r\n\r\n.absol-frame > iframe {\r\n    border: none;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-tabview .absol-tabbar-button {\r\n    border-radius: 0.7em 0.7em 0 0;\r\n    height: 2em;\r\n    box-sizing: border-box;\r\n    border: solid 1px #ccc;\r\n    background-color: white;\r\n    color: black;\r\n    padding-left: 1em;\r\n    padding-right: 0.357em;\r\n    margin-right: 0.357em;\r\n}\r\n\r\n.absol-tabview .as-tab-bar-add-btn {\r\n    border-radius: 0.7em 0.7em 0 0;\r\n    height: 2em;\r\n    box-sizing: border-box;\r\n    border: solid 1px #ccc;\r\n    background-color: white;\r\n    color: black;\r\n}\r\n\r\n.absol-tabview .absol-tabbar {\r\n    height: 2em;\r\n    overflow-y: hidden;\r\n    border-bottom: 1px solid #ccc;\r\n    box-sizing: border-box;\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n}\r\n\r\n.absol-tabview .absol-tabbar-button-active {\r\n    background-color: #5bc0de;\r\n    border-color: #46b8da;\r\n    color: white;\r\n}\r\n\r\n/* .absol-tabview .absol-tabbar-button-close {\r\n    color: rgb(170, 170, 170);\r\n    line-height: 1.5em;\r\n    margin-left: 1em;\r\n    font-size: 1.3em;\r\n} */\r\n\r\n.absol-tabview .absol-tabbar-button-close:hover {\r\n    color: red;\r\n}\r\n\r\n\r\n/************** Mini version - like window form ***********************/\r\n\r\n.absol-tabview.xp-tiny .absol-tabbar {\r\n    height: 1.5em;\r\n    border-bottom: none;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tabbar-button,\r\n.absol-tabview.xp-tiny .as-tab-bar-add-btn {\r\n    height: 1.4em;\r\n    padding-left: 5px;\r\n    padding-right: 5px;\r\n    border-radius: 0;\r\n    vertical-align: bottom;\r\n    margin: 0.1em 0 0 0;\r\n    background-color: rgb(242, 242, 242);\r\n    color: black;\r\n    position: relative;\r\n}\r\n\r\n.absol-tabview.xp-tiny::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    top: calc(1.5em - 4px);\r\n    z-index: 0;\r\n    left: 0;\r\n    right: 0;\r\n    height: 4px;\r\n    border-bottom: solid 1px #ccc;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tabbar-button.absol-tabbar-button-active {\r\n    height: 1.5em;\r\n    margin-top: 0;\r\n    background-color: white;\r\n    border-top-color: #ccc;\r\n    border-left-color: #ccc;\r\n    border-right-color: #ccc;\r\n    border-bottom-color: white;\r\n}\r\n\r\n\r\n.absol-hscroller.absol-tabbar.disabled .absol-scrollbar-container {\r\n    visibility: hidden;\r\n}\r\n\r\n.absol-tabview.absol-tabview.xp-tiny .absol-tabbar-button-close {\r\n    line-height: 1.4em;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tabbar-button-icon-container {\r\n    display: none;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tabview-container {\r\n    top: 1.5em;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tab-absol {\r\n    border-left: solid 1px #ccc;\r\n    border-right: solid 1px #ccc;\r\n    border-bottom: solid 1px #ccc;\r\n    box-sizing: border-box;\r\n}\r\n\r\n\r\n.absol-tabview.as-without-close-button > .absol-tabbar .absol-tabbar-button .absol-tabbar-button-icon-container {\r\n    display: none;\r\n}\r\n\r\n.absol-tabview.as-without-close-button > .absol-tabbar .absol-tabbar-button {\r\n    padding-right: 1em;\r\n}\r\n\r\n.absol-tabview > .absol-tabbar .as-tab-bar-add-btn {\r\n    display: none;\r\n}\r\n\r\n.absol-tabview.as-has-add-btn > .absol-tabbar .as-tab-bar-add-btn {\r\n    display: inline-block;\r\n}\r\n\r\n\r\n/************************ Like Metro theme *********************/\r\n\r\n.absol-tabview.metro-flat > .absol-tabbar .absol-tabbar-button,\r\n.absol-tabview.metro-flat > .absol-tabbar .as-tab-bar-add-btn {\r\n    border-radius: 0;\r\n    margin-right: 0;\r\n    margin-left: 0;\r\n    border-left: none;\r\n    border-top: none;\r\n    border-bottom: none;\r\n    border-right: solid 1px rgba(169, 169, 169, 0.3);\r\n    font-size: 1em;\r\n}\r\n\r\n.absol-tabview.metro-flat > .absol-tabbar {\r\n    box-shadow: 0px -1px 0px 0px #ccc;\r\n}\r\n\r\n/************************ Round Out theme *********************/\r\n\r\n/*.absol-tabview.rond-out > .absol-tabbar .absol-tabbar-button*/\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar {\r\n    border-bottom: calc(0.1em + 1px) solid #3B4453;;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabview-container {\r\n    top: 2.1em;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar {\r\n    height: 2.1em;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active {\r\n    background-color: #3B4453;\r\n    color: white;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button {\r\n    background-color: #313946;\r\n    color: rgb(169, 169, 170);\r\n\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::before,\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    bottom: 0;\r\n    width: 1em;\r\n    height: 1em;\r\n    z-index: 1;\r\n    background-size: cover;\r\n    background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMTYiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDguNDY2NjY2NCA0LjIzMzMzMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMTMzOTAzNjQgMCAwIC4yNzU0NTg5MSAtLjAzMjY2NDYxIC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzMTM5NDYiLz4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgtLjEzMzkwMzY0IDAgMCAuMjc1NDU4OTEgOC40OTkzMzE1IC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzMTM5NDYiLz4KIDwvZz4KPC9zdmc+Cg==');\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::before,\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::after,\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active {\r\n    z-index: 3;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::before,\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button.absol-tabbar-button-active::after {\r\n    background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMTYiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDguNDY2NjY2NCA0LjIzMzMzMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIj4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCguMTMzOTAzNjQgMCAwIC4yNzU0NTg5MSAtLjAzMjY2NDYxIC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzQjQ0NTMiLz4KICA8cGF0aCB0cmFuc2Zvcm09Im1hdHJpeCgtLjEzMzkwMzY0IDAgMCAuMjc1NDU4OTEgOC40OTkzMzE1IC0uMDgwNjM0OTIpIiBkPSJNIDMxLjg1ODcxNiwwLjI5MjcyOTQxIFYgMTUuNjYxMDIzIEggMC4yNDM5NDExNyBDIDE1LjI0NzAyOCwxNS43NzU5MjkgMzEuMzU0NDkzLDExLjExODk1NiAzMS44NTg3MTYsMC4yOTI3Mjk0MSBaIiBzdHlsZT0icGFpbnQtb3JkZXI6ZmlsbCBtYXJrZXJzIHN0cm9rZTtmaWxsOiMzQjQ0NTMiLz4KIDwvZz4KPC9zdmc+Cg==');\r\n}\r\n\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button {\r\n    position: relative;\r\n    margin-right: 0;\r\n    border: none;\r\n    border-radius: 0.8em 0.8em 0 0;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-hscroller-viewport {\r\n    padding-left: 1.2em;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::before {\r\n    left: -0.98em;\r\n    background-position: left;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .absol-tabbar-button::after {\r\n    right: -0.98em;\r\n    background-position: right;\r\n\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .as-tab-bar-add-btn {\r\n    background-color: #313946;\r\n    color: rgb(169, 169, 170);\r\n    font-weight: bold;\r\n    border: 4px solid #222933;\r\n    border-radius: 0.8em 0.8em 0 0.8em;\r\n}\r\n\r\n.absol-tabview.cad-dark > .absol-tabbar .as-tab-bar-add-btn:active {\r\n    color: white;\r\n    background-color: #3B4453;\r\n    font-weight: bold;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".absol-textarea2 {\r\n    overflow: hidden;\r\n    resize: none;\r\n    box-sizing: border-box;\r\n    --content-height: 1.425em;\r\n    height: var(--content-height);\r\n    font: inherit;\r\n}\r\n\r\n.absol-textarea2.as-border-none {\r\n    border: none;\r\n    outline: none;\r\n}\r\n\r\n.absol-textarea2:disabled {\r\n    background-color: var(--as-disabled-background-color);\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-time-range-24-input {\r\n    white-space: nowrap;\r\n    display: inline-block;\r\n    min-width: 318px;\r\n}\r\n\r\n.as-time-range-24-input > div:first-child {\r\n    margin-right: 10px;\r\n}\r\n\r\n\r\n.as-time-range-24-input.as-read-only.as-border-none .ac-time-input {\r\n    display: none;\r\n}\r\n\r\n.as-time-range-24-input.as-read-only.as-border-none::after{\r\n    content: attr(data-text);\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n}\r\n\r\n.as-time-range-24-input.as-read-only.as-border-none::before{\r\n    content: \"\";\r\n    vertical-align: middle;\r\n    display: inline-block;\r\n    height: calc(2em + 2px);\r\n}\r\n\r\n\r\n.as-chrome-time-24-picker-follower .as-chrome-time-24-picker {\r\n    border: none;\r\n    box-shadow: none;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-toc-list {\r\n\r\n}\r\n\r\n.as-toc-list.as-searching .as-toc-list-body,\r\n.as-toc-list:not(.as-searching) .as-toc-list-searching {\r\n    display: none;\r\n}\r\n\r\n.as-toc-item {\r\n    font-size: 14px;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    display: flex;\r\n    height: 30px;\r\n    align-items: stretch;\r\n    --level: 0;\r\n}\r\n\r\n.as-toc-item:not(.as-status-close) .as-toc-item-toggle-ico-ctn .toggle-close,\r\n.as-toc-item:not(.as-status-open) .as-toc-item-toggle-ico-ctn .toggle-open {\r\n    display: none;\r\n}\r\n\r\n.as-toc-item.as-status-none .as-toc-item-toggle-ico-ctn {\r\n    visibility: hidden;\r\n}\r\n\r\n.as-toc-item.as-active {\r\n    background-color: var(--as-transparent-button-active-color);\r\n}\r\n\r\n\r\n.as-toc-item:hover {\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.as-toc-item > div {\r\n    white-space: nowrap;\r\n    width: 30px;\r\n}\r\n\r\n.as-toc-item > div::before,\r\n.as-toc-item > div > * {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-toc-item > div::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.as-toc-item-name-ctn {\r\n    flex-grow: 1;\r\n\r\n}\r\n\r\n.as-toc-item-name {\r\n    user-select: none;\r\n    max-width: 100%;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n}\r\n\r\ndiv.as-toc-item-toggle-ico-ctn {\r\n    padding-left: calc(20px * var(--level));\r\n    box-sizing: content-box !important;\r\n}\r\n\r\n.as-toc-item-toggle-ico-ctn .toggler-ico {\r\n    width: 0.7em;\r\n    height: 0.7em;\r\n}\r\n\r\n.as-toc-item-toggle-ico-ctn .toggler-ico path {\r\n    fill: rgb(104, 104, 104);\r\n}\r\n\r\n.as-toc-item-ext-icon-ctn:empty {\r\n    display: none;\r\n}\r\n\r\n.as-toc-item-ext-icon-ctn > img,\r\n.as-toc-item-ext-icon-ctn > svg {\r\n    width: 20px;\r\n    height: 20px;\r\n}\r\n\r\n.as-toc-item-ext-icon-ctn > span {\r\n    font-size: 20px;\r\n}\r\n\r\n\r\n.as-toc-item-toggle-ico-ctn,\r\n.as-toc-item-check-ctn,\r\n.as-toc-item-quick-menu-ctn,\r\n.as-toc-item-ext-icon-ctn {\r\n    text-align: center;\r\n    width: 30px;\r\n}\r\n\r\n.as-toc-item-quick-menu-ctn span {\r\n    font-size: 20px;\r\n}\r\n\r\n.as-toc-item-quick-menu-ctn button {\r\n    border: none;\r\n    background-color: transparent;\r\n    padding: 0;\r\n    width: 24px;\r\n    height: 24px;\r\n}\r\n\r\n.as-toc-item-quick-menu-ctn button.as-quick-menu-attached {\r\n    background-color: var(--as-transparent-button-active-color);\r\n}\r\n\r\n.as-toc-item-quick-menu-ctn button:hover {\r\n    background-color: var(--icon-background-cover-hover);\r\n}\r\n\r\n.as-toc-item:not(.as-has-quick-menu) .as-toc-item-quick-menu-ctn {\r\n    visibility: hidden;\r\n    pointer-events: none;\r\n    opacity: 0;\r\n}\r\n\r\n.as-toc-item-name-ctn input {\r\n    font: inherit;\r\n    border: none;\r\n    /*background-color: transparent;*/\r\n    width: 8px;\r\n    padding-left: 2px;\r\n    padding-right: 2px;\r\n    margin-left: -2px;\r\n    margin-right: -2px;\r\n    outline: none;\r\n    box-sizing: content-box;\r\n    background-color: #5bc0de;\r\n    max-width: 100%;\r\n}\r\n\r\n.as-toc-item:not(.as-renaming) .as-toc-item-name-ctn input,\r\n.as-toc-item.as-renaming .as-toc-item-name {\r\n    display: none;\r\n}\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-tokenize-hyper-input {\r\n    margin: 0;\r\n    padding: 0;\r\n    white-space: pre-wrap;\r\n    -moz-user-modify: read-write;\r\n    -webkit-user-modify: read-write;\r\n    word-break: normal;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n}\r\n\r\n\r\n.as-emoji-token{\r\n    font-size: inherit;\r\n    overflow: hidden;\r\n    box-sizing: border-box;\r\n    display: inline;\r\n    white-space: pre;\r\n    background-size: 1.2em;\r\n    background-position:left;\r\n    background-repeat: no-repeat;\r\n}\r\n\r\n.as-tag-token{\r\n    font-size: inherit;\r\n    display: inline;\r\n    white-space: pre;\r\n    font-weight: bold;\r\n    color: #1e1ec8;\r\n}\r\n\r\n\r\n\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ".as-tree-chart * {\r\n    box-sizing: border-box;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n\r\n}\r\n\r\n.as-tree-chart {\r\n    --root-background-color: #ED7D31;\r\n    --root-text-color: white;\r\n\r\n    --vert-node-background-color: #4472C4;\r\n    --vert-node-text-color: white;\r\n\r\n    --horz-node-background-color: #A9D18E;\r\n    --horz-node-text-color: black;\r\n\r\n    --leaf-node-background-color: #F8CBAD;\r\n    --leaf-node-text-color: black;\r\n\r\n\r\n    font-size: 1rem;\r\n    display: inline-block;\r\n}\r\n\r\n.as-tree-chart-node {\r\n    display: inline-block;\r\n    white-space: normal;\r\n    vertical-align: top;\r\n    position: relative;\r\n}\r\n\r\n.as-tree-chart-content-ctn {\r\n    text-align: center;\r\n    position: relative;\r\n}\r\n\r\n.as-tree-chart-node[data-level=\"0\"] >.as-tree-chart-content-ctn> .as-tree-chart-content {\r\n    background-color: var(--root-background-color);\r\n    color: var(--root-text-color);\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn .as-tree-chart-content{\r\n    background-color: var(--horz-node-background-color);\r\n    color: var(--horz-node-text-color);\r\n}\r\n\r\n.as-tree-chart-node.as-is-leaf >.as-tree-chart-content-ctn> .as-tree-chart-content {\r\n    background-color: var(--leaf-node-background-color);\r\n    color: var(--leaf-node-text-color);\r\n}\r\n\r\n\r\n\r\n.as-tree-chart-content {\r\n    padding: 5px;\r\n    border-radius: 4px;\r\n    border: 1px solid black;\r\n    text-align: center;\r\n    position: relative;\r\n    display: inline-block;\r\n    background-color: var(--vert-node-background-color);\r\n    color: var(--vert-node-text-color);\r\n}\r\n\r\n.as-tree-chart-icon,\r\n.as-tree-chart-text {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-tree-chart-icon {\r\n    font-size: 1.25em;\r\n    padding-right: 0.25em;\r\n}\r\n\r\n.as-tree-chart-node.as-has-children > .as-tree-chart-content-ctn {\r\n    padding-bottom: 10px;\r\n}\r\n\r\n.as-tree-chart-node.as-has-children > .as-tree-chart-content-ctn::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    bottom: 0;\r\n    left: 50%;\r\n    height: 10px;\r\n    border-left: 1px solid black;\r\n}\r\n\r\n.as-tree-chart-child-ctn {\r\n    white-space: nowrap;\r\n    padding-top: 10px;\r\n    text-align: center;\r\n    vertical-align: top;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-tree-chart-node:not(.as-horizontal) > .as-tree-chart-child-ctn > .as-tree-chart-node:not(:last-child) {\r\n    margin-right: 10px;\r\n}\r\n\r\n.as-tree-chart-child-ctn > .as-tree-chart-node:not(:first-child):not(:last-child)::before {\r\n    content: \"\";\r\n    border-top: 1px solid black;\r\n    position: absolute;\r\n    left: 0;\r\n    right: -10px;\r\n    top: -10px;\r\n}\r\n\r\n.as-tree-chart-child-ctn > .as-tree-chart-node:first-child:not(:last-child)::before {\r\n    content: \"\";\r\n    border-top: 1px solid black;\r\n    position: absolute;\r\n    left: 50%;\r\n    right: -10px;\r\n    top: -10px;\r\n}\r\n\r\n.as-tree-chart-child-ctn > .as-tree-chart-node > .as-tree-chart-content-ctn .as-tree-chart-content::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 50%;\r\n    height: 10px;\r\n    top: -11px;\r\n    border-left: 1px solid black;\r\n}\r\n\r\n.as-tree-chart-child-ctn > .as-tree-chart-node:not(:first-child):last-child > .as-tree-chart-content-ctn::before {\r\n    content: \"\";\r\n    border-top: 1px solid black;\r\n    position: absolute;\r\n    left: 0;\r\n    width: calc(50% + 1px);\r\n    top: -10px;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn .as-tree-chart-content {\r\n    text-align: left;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal > .as-tree-chart-content-ctn .as-tree-chart-content {\r\n    display: block;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-node {\r\n    display: block;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn {\r\n    padding-left: 20px;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn .as-tree-chart-content-ctn {\r\n    text-align: left;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-content-ctn::after {\r\n    left: 10px;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-node:not(:last-child)::before {\r\n    right: unset;\r\n    bottom: 0;\r\n    border-top: none;\r\n    border-left: 1px solid black;\r\n    left: -10px;\r\n    height: unset;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-child-ctn > .as-tree-chart-node > .as-tree-chart-content-ctn .as-tree-chart-content::before {\r\n    border-left: none;\r\n    border-top: 1px solid black;\r\n    left: -10px;\r\n    width: 10px;\r\n    top: 50%;\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-node:last-child > .as-tree-chart-content-ctn::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    left: -10px;\r\n    top: -10px;\r\n    height: calc(50% + 10px);\r\n    border-top: none;\r\n    border-left: 1px solid black;\r\n    /*width: unset;*/\r\n}\r\n\r\n.as-tree-chart-node.as-horizontal .as-tree-chart-node.as-has-children:last-child > .as-tree-chart-content-ctn::before {\r\n    height: calc(50% + 5px);\r\n    /*width: unset;*/\r\n}\r\n", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "\r\n.as-tree-table {\r\n    font-size: 1rem;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    border-collapse: collapse;\r\n}\r\n\r\n.as-tree-table-toggle {\r\n    position: absolute;\r\n    left: 5px;\r\n    top: 0;\r\n    bottom: 0;\r\n    vertical-align: middle;\r\n    padding-right: 0.3em;\r\n    white-space: nowrap;\r\n    user-select: none;\r\n}\r\n\r\n\r\n\r\n.as-tree-table-toggle::before {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.as-tree-table-head {\r\n    background-color: #d6d6d6;\r\n}\r\n\r\n\r\n.as-tree-table-head-cell {\r\n    font-weight: bold;\r\n    padding: 10px;\r\n    border: 1px solid #ddd;\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-tree-table-row {\r\n    height: calc(40em / 14);\r\n}\r\n\r\n.as-tree-table-row:nth-child(odd) {\r\n    background-color: rgb(245, 245, 245);\r\n}\r\n\r\n.as-tree-table-row:nth-child(even) {\r\n    background-color: white;\r\n}\r\n\r\n.as-tree-table-cell {\r\n    padding: 5px;\r\n    border: 1px solid #ddd;\r\n    position: relative;\r\n}\r\n\r\n.as-tree-table-cell[data-type=\"number\"] {\r\n    text-align: right;\r\n}\r\n\r\n.as-tree-table-row.as-is-opened .as-tree-table-toggle .toggle-close,\r\n.as-tree-table-row:not(.as-is-opened) .as-tree-table-toggle .toggle-open {\r\n    display: none;\r\n}\r\n\r\n.as-tree-table-toggle .toggler-ico {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n\r\n.as-tree-table-row:not(.as-has-sub-row) .as-tree-table-toggle .toggler-ico {\r\n    visibility: hidden;\r\n}\r\n\r\n/*.as-tree-table-row {*/\r\n/*    height: var(--table-row-height);*/\r\n/*}*/\r\n\r\n.as-printer-content .as-tree-table-toggle svg{\r\n    display: none;\r\n}\r\n\r\n.as-printer-content .as-tree-table-head-cell,\r\n.as-printer-content .as-tree-table-cell{\r\n    border-color: black;\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, ":root {\r\n    --as-vertical-timeline-item-height: 40px;\r\n}\r\n\r\n.as-vertical-timeline {\r\n    display: inline-block;\r\n    color: white;\r\n    font-size: 14px;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    text-align: left;\r\n    padding: 5px;\r\n}\r\n\r\n.as-vertical-timeline-item {\r\n    height: var(--as-vertical-timeline-item-height);\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-vertical-timeline-item.as-inactive {\r\n    color: rgba(200, 200, 200, 0.5);\r\n}\r\n\r\n.as-vertical-timeline-item.as-active .as-vertical-timeline-tile {\r\n    text-shadow: 1px 0 0 currentColor;\r\n}\r\n\r\n.as-vertical-timeline-item:not(:first-child) .as-vertical-timeline-icon-ctn::before {\r\n    content: \"\";\r\n    display: inline-block;\r\n    height: calc(var(--as-vertical-timeline-item-height) - 30px);\r\n    border-left: 2px solid currentColor;\r\n    position: absolute;\r\n    left: calc(50% - 1px);\r\n    bottom: calc(100% + 2px);\r\n}\r\n\r\n\r\n.as-vertical-timeline-icon-ctn {\r\n    display: inline-block;\r\n    margin-right: 20px;\r\n    position: relative;\r\n    vertical-align: middle;\r\n\r\n}\r\n\r\n.as-vertical-timeline-icon-ctn span {\r\n    font-size: 24px;\r\n}\r\n\r\n\r\n.as-vertical-timeline-tile {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n\r\n}\r\n\r\n\r\n/*//check-circle*/", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(5788)(false);
// Module
exports.push([module.id, "\r\n.as-video-url-dialog-url {\r\n    max-width: calc(100vw - 8em - 40px);\r\n    width: 500px;\r\n    min-height: 30px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-video-url-dialog input[type=\"number\"] {\r\n    width: 5em;\r\n}\r\n\r\n.as-video-url-dialog-row> label {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    width: 6em;\r\n}\r\n\r\n.as-video-url-dialog-row {\r\n    padding-bottom: 10px;\r\n    white-space: pre;\r\n}\r\n\r\n.as-video-url-dialog-row > * {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-video-url-dialog-video-image{\r\n    max-width: 200px;\r\n    max-height: 200px;\r\n\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

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

/***/ }),

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


var content = __webpack_require__(6457);

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) {}

/***/ }),

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


var content = __webpack_require__(5118);

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) {}

/***/ }),

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


var content = __webpack_require__(5132);

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) {}

/***/ }),

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


var content = __webpack_require__(2526);

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) {}

/***/ }),

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


var content = __webpack_require__(7338);

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) {}

/***/ }),

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


var content = __webpack_require__(5406);

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) {}

/***/ }),

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


var content = __webpack_require__(6189);

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) {}

/***/ }),

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


var content = __webpack_require__(4492);

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) {}

/***/ }),

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


var content = __webpack_require__(4487);

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) {}

/***/ }),

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


var content = __webpack_require__(131);

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) {}

/***/ }),

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


var content = __webpack_require__(9931);

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) {}

/***/ }),

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


var content = __webpack_require__(893);

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) {}

/***/ }),

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


var content = __webpack_require__(4237);

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) {}

/***/ }),

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


var content = __webpack_require__(6209);

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) {}

/***/ }),

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


var content = __webpack_require__(5498);

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) {}

/***/ }),

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


var content = __webpack_require__(6394);

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) {}

/***/ }),

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


var content = __webpack_require__(8375);

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) {}

/***/ }),

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


var content = __webpack_require__(8491);

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) {}

/***/ }),

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


var content = __webpack_require__(7965);

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) {}

/***/ }),

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


var content = __webpack_require__(6951);

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) {}

/***/ }),

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


var content = __webpack_require__(2720);

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) {}

/***/ }),

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


var content = __webpack_require__(6972);

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) {}

/***/ }),

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


var content = __webpack_require__(646);

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) {}

/***/ }),

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


var content = __webpack_require__(1610);

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) {}

/***/ }),

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


var content = __webpack_require__(6322);

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) {}

/***/ }),

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


var content = __webpack_require__(6923);

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) {}

/***/ }),

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


var content = __webpack_require__(6778);

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) {}

/***/ }),

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


var content = __webpack_require__(9910);

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) {}

/***/ }),

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


var content = __webpack_require__(4679);

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) {}

/***/ }),

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


var content = __webpack_require__(5575);

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) {}

/***/ }),

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


var content = __webpack_require__(238);

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) {}

/***/ }),

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


var content = __webpack_require__(4771);

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) {}

/***/ }),

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


var content = __webpack_require__(194);

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) {}

/***/ }),

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


var content = __webpack_require__(9496);

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) {}

/***/ }),

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


var content = __webpack_require__(1652);

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) {}

/***/ }),

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


var content = __webpack_require__(5930);

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,
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* 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))
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// startup
/******/ 	// Load entry module and return exports
/******/ 	// This entry module doesn't tell about it's top-level declarations so it can't be inlined
/******/ 	var __webpack_exports__ = __webpack_require__(4657);
/******/ 	
/******/ })()
;

VaKeR 2022