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/libs/absol-vchart/dist/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/libs/absol-vchart/dist/vchart.js
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ 6657:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ absol_acomp_AComp)
});

// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(3855);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/MultiLanguageCSS.js
var MultiLanguageCSS = __webpack_require__(1812);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var Dom = __webpack_require__(6628);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DebugTask.js



var _ = ACore/* default._ */.Z._;
var $ = ACore/* default.$ */.Z.$;

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 = _({
        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 = $('.absol-debug-task-value.settimeout', res);
    res.$setIntervalValue = $('.absol-debug-task-value.setinterval', res);
    res.$setWorkValue = $('.absol-debug-task-value.work', res);
    return res;
}

DebugTask.property = {};

DebugTask.property.timeout = {
    set: function (value) {
        this._timeout = value;
        this.$setTimeOutValue.innerHTML = value + '';
    },
    get: function () {
        return this._timeout;
    }
};

DebugTask.property.interval = {
    set: function (value) {
        this._interval = value;
        this.$setIntervalValue.innerHTML = value + '';
    },
    get: function () {
        return this._interval;
    }
};

DebugTask.property.work = {
    set: function (value) {
        this._work = value;
        value = (value * 100).toFixed(1);
        this.$setWorkValue.innerHTML = value + '%';
    },
    get: function () {
        return this._work;
    }
};


DebugTask.start = function () {
    if (DebugTask.started) return;
    if (!DebugTask.$view) {
        DebugTask.$view = _('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 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);
            }
            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);

    };

    Dom/* default.documentReady.then */.ZP.documentReady.then(function () {
        DebugTask.$view.addTo(document.body);
    });
};

ACore/* default.install */.Z.install('debugtask', DebugTask);



/* harmony default export */ const js_DebugTask = (DebugTask);


// EXTERNAL MODULE: ./node_modules/absol-acomp/css/debugtask.css
var debugtask = __webpack_require__(7388);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/common.css
var common = __webpack_require__(8826);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Draggable.js
var Draggable = __webpack_require__(5611);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiChars.js
var EmojiChars = __webpack_require__(7712);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiAnims.js
var EmojiAnims = __webpack_require__(4670);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/dom/install.js + 242 modules
var install = __webpack_require__(6369);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/tool/BlurTrigger.js
var BlurTrigger = __webpack_require__(9346);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/AComp.js














var AComp = {
    core: ACore/* default */.Z,
    $: ACore/* default.$ */.Z.$,
    _: ACore/* default._ */.Z._,
    creator: ACore/* default.creator */.Z.creator,
    buildDom: ACore/* default.buildDom */.Z.buildDom,
    runDebugTask: js_DebugTask.start.bind(js_DebugTask),
    Draggable: Draggable/* default */.Z,
    EmojiChars: EmojiChars/* default */.Z,
    EmojiAnims: EmojiAnims/* default */.Z,
    install: install/* default */.Z,
    BlurTrigger: BlurTrigger/* default */.Z
};

window.runDebugTask = js_DebugTask.start.bind(js_DebugTask);

/* harmony default export */ const absol_acomp_AComp = (AComp);

/***/ }),

/***/ 3855:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "_": () => (/* binding */ _),
/* harmony export */   "$": () => (/* binding */ $),
/* harmony export */   "$$": () => (/* binding */ $$),
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_default_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4630);
/* harmony import */ var _css_default_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_default_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6628);



var ACore = new absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .ZP({ creator: Object.assign({}, absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* ["default"].ShareInstance.creator */ .ZP.ShareInstance.creator) });
var _ = ACore._;
var $ = ACore.$;
var $$ = ACore.$$;

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ACore);

/***/ }),

/***/ 9782:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6628);
/* harmony import */ var _ContextMenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7054);
/* harmony import */ var absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(557);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(863);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3349);
/* harmony import */ var absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9399);







/***
 * simple way, to replace old ContextCapture version
 ***/

function BContextCapture() {
    absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__/* ["default"].call */ .ZP.call(this);
    this.sync = Promise.resolve();
    this.$root = null;
    this._pointerSession = 0;
    this.ev_contextMenu = this.ev_contextMenu.bind(this);
}

absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_4__/* ["default"].mixClass */ .ZP.mixClass(BContextCapture, absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .ZP);

BContextCapture.prototype.attachTo = function (elt) {
    if (this.$root) this.$root.removeEventListener('contextmenu', this.ev_contextMenu, false);
    this.$root = elt;
    if (this.$root) this.$root.addEventListener('contextmenu', this.ev_contextMenu, false);
}

BContextCapture.prototype.auto = function () {
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].documentReady.then */ .ZP.documentReady.then(function () {
        this.attachTo(document.body);
    }.bind(this));
};


BContextCapture.prototype.showContextMenu = _ContextMenu__WEBPACK_IMPORTED_MODULE_1__/* ["default"].prototype.showContextMenu */ .Z.prototype.showContextMenu;
BContextCapture.prototype._fireContextMenuEvent = _ContextMenu__WEBPACK_IMPORTED_MODULE_1__/* ["default"].prototype._fireContextMenuEvent */ .Z.prototype._fireContextMenuEvent;
BContextCapture.prototype._checkNeedHandle = _ContextMenu__WEBPACK_IMPORTED_MODULE_1__/* ["default"].prototype._checkNeedHandle */ .Z.prototype._checkNeedHandle;
/***
 *
 * @param {PointerEvent} event
 */
BContextCapture.prototype.ev_contextMenu = function (event) {
    this._pointerSession++;
    this._posCurrent = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(event.clientX, event.clientY);
    this.$target = event.target;
    if (this._checkNeedHandle(event.target)) {
        if (this._fireContextMenuEvent()) {
            event.preventDefault();
        }
    }
};

var instance = new BContextCapture();
if ((!absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_5__/* ["default"].isMobile */ .Z.isMobile || !absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_5__/* ["default"].isSafari */ .Z.isSafari) && (absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_5__/* ["default"].os.type */ .Z.os.type !== 'ios')) {
    absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_5__/* ["default"].nativeContextMenuSupport */ .Z.nativeContextMenuSupport = true;
    _ContextMenu__WEBPACK_IMPORTED_MODULE_1__/* ["default"].auto */ .Z.auto = instance.auto.bind(instance);//override old version
}
else {
    absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_5__/* ["default"].nativeContextMenuSupport */ .Z.nativeContextMenuSupport = false;
}


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (instance);

/***/ }),

/***/ 7537:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_boardtable_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9936);
/* harmony import */ var _css_boardtable_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_boardtable_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7951);




var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


/***
 * @extends AElement
 * @constructor
 */
function Board() {
}


Board.tag = "board";
Board.render = function () {
    return _({
        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;
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(Board);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Board);

/***/ }),

/***/ 7548:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports EFFECT_ZONE_CLASS_NAME, DRAG_ZONE_CLASS_NAME, FREE_ZONE_CLASS_NAME */
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var _css_boardtable_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9936);
/* harmony import */ var _css_boardtable_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_boardtable_css__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _Board__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7537);
/* harmony import */ var absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(557);
/* harmony import */ var absol_src_HTML5_Element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1487);
/* harmony import */ var absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2759);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(863);
/* harmony import */ var _Hanger__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(655);











var _ = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].$ */ .Z.$;


/***
 * @extends AElement
 * @constructor
 */
function BoardTable() {
    var events = {
        touchstart: this.eventHandler.mousedown,
        mousedown: this.eventHandler.mousedown
    };
    _Hanger__WEBPACK_IMPORTED_MODULE_8__/* ["default"].prototype.on2.call */ .Z.prototype.on2.call(this, events);
    this._childHolders = [];
    this._dragEventData = null;
    this._friends = [];
    this._longPressEventData = null;
}

BoardTable.tag = 'boardtable';
BoardTable.render = function () {
    return _({
        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 = _({
    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) {
    //todo: testing
    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 (atIndex === -1) {
            this.insertBefore(elt, afterAt || this.firstChild);
        }
        else 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 absol_src_HTML5_Element__WEBPACK_IMPORTED_MODULE_4__/* ["default"].prototype.clearChild.call */ .Z.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
            $(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 absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(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 = absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_5__/* ["default"].fromClientRect */ .Z.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 absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(touch.clientX, touch.clientY);
    }
    else {
        mousePos = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(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 absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(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 = absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_7__/* ["default"].copyEvent */ .ZP.copyEvent(event);

        if (isTouch) {
            _Hanger__WEBPACK_IMPORTED_MODULE_8__/* ["default"].prototype.on2.call */ .Z.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 (thisBT._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;
    _Hanger__WEBPACK_IMPORTED_MODULE_8__/* ["default"].prototype.off2.call */ .Z.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 = (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_7__/* .findChangedTouchByIdent */ .VY)(event, dragEventData.pointerIdent);
    if (!touch) return;
    var mousePos = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(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;
    }

    _Hanger__WEBPACK_IMPORTED_MODULE_8__/* ["default"].prototype.on2.call */ .Z.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 = $(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);
                _Hanger__WEBPACK_IMPORTED_MODULE_8__/* ["default"].prototype.on2.call */ .Z.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";
        $(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 = absol_src_HTML5_Element__WEBPACK_IMPORTED_MODULE_4__/* ["default"].prototype.findChildAfter.call */ .Z.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 = absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_5__/* ["default"].fromClientRect */ .Z.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 = absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_6__/* ["default"].getScreenSize */ .ZP.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 () {/* 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 = (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_7__/* .findChangedTouchByIdent */ .VY)(event, dragEventData.pointerIdent);
        if (touch) {
            pointerIdent = touch.identifier;
            mousePos = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(touch.clientX, touch.clientY);
        }
    }
    else {
        pointerIdent = -1;
        mousePos = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(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 = (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_7__/* .findChangedTouchByIdent */ .VY)(event, dragEventData.pointerIdent);
        if (touch) {
            pointerIdent = touch.identifier;
            mousePos = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(touch.clientX, touch.clientY);
        }
    }
    else {
        pointerIdent = -1;
        mousePos = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(event.clientX, event.clientY);
    }
    if (dragEventData.pointerIdent !== pointerIdent) return;
    dragEventData.mousePos = mousePos;

    var changed;
    if (dragEventData.state == 'DRAG') {
        setTimeout(function () {
            $(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) {
                _Hanger__WEBPACK_IMPORTED_MODULE_8__/* ["default"].prototype.off2.call */ .Z.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 = absol_src_HTML5_Element__WEBPACK_IMPORTED_MODULE_4__/* ["default"].prototype.findChildAfter.call */ .Z.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;
    }
    _Hanger__WEBPACK_IMPORTED_MODULE_8__/* ["default"].prototype.off2.call */ .Z.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 (value) {
        value = value || [];
        if (!(value instanceof Array))
            value = [value];
        this._friends = value;
    },
    get: function () {
        return this._friends;
    }
};

_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(BoardTable);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BoardTable);

/***/ }),

/***/ 1728:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_checkboxinput_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3144);
/* harmony import */ var _css_checkboxinput_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_checkboxinput_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7951);






var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

var tickIcon = _(['<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 = $('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 _({
            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 (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
        this.$input.disabled = !!value;
    },
    get: function () {
        return this.$input.disabled;
    }
};

CheckboxInput.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
}

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

/***
 *
 * @type {CheckboxInput}
 */
CheckboxInput.property.minus = {
    set: function (value) {
        if (value) {
            this.addClass('as-has-minus');
        }
        else {
            this.removeClass('as-has-minus');
        }
    },
    get: function () {
        return this.hasClass('as-has-minus');
    }
};

CheckboxInput.attribute = {
    checked: {
        set: function (value) {
            if (value === 'false' || value === null) {
                this.checked = false;
            }
            else {
                this.checked = true;
            }
        },
        get: function () {
            return this.checked ? 'true' : 'false'
        },
        remove: function () {
            this.checked = false;
        }
    },
    disabled: {
        set: function (value) {
            if (value === 'false' || value === null) {
                this.disabled = false;
            }
            else {
                this.disabled = true;
            }
        },
        get: function () {
            return this.disabled ? 'true' : 'false'
        },
        remove: function () {
            this.disabled = false;
        }
    }
};

/***
 *
 * @type {CheckboxInput}
 */
CheckboxInput.eventHandler = {};

CheckboxInput.eventHandler.click = function (event) {
    if (this.readOnly) {
        event.preventDefault();
    }
    this._updateCheckedClass();
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.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 = _({
            tag: this.tag,
            attr: attrs,
            class: classList,
            style: style,
            props: props
        });
        $(ph).selfReplace(newElt);
    }
};

CheckboxInput.initAfterLoad = function () {
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].documentReady.then */ .ZP.documentReady.then(function () {
        CheckboxInput.autoReplace();
    })
};


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CheckboxInput);

/***/ }),

/***/ 4654:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_checkboxbutton_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2435);
/* harmony import */ var _css_checkboxbutton_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_checkboxbutton_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _CheckBoxInput__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1728);




_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install('checkboxbutton', _CheckBoxInput__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_CheckBoxInput__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z);

/***/ }),

/***/ 4845:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_chromecalendar_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9708);
/* harmony import */ var _css_chromecalendar_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_chromecalendar_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7807);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(863);
/* harmony import */ var _Scroller__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9246);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3349);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1477);
/* harmony import */ var absol_src_HTML5_DelaySignal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8098);
/* harmony import */ var _Follower__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7094);












var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


var calendarLangMap = {
    'en': {
        monthNames: [
            'January', 'February', 'March', 'April', 'May', 'June',
            'July', 'August', 'September', 'October', 'November', 'December'
        ],
        shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
        dayOfWeekNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
        shortDayOfWeekNames: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
        quarterNames: ['Q1', 'Q2', 'Q3', 'Q4']
    },
    'vi': {
        monthNames: [
            'Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
            'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'
        ],
        shortMonthNames: ['Thg 1', 'Thg 2', 'Thg 3', 'Thg 4', 'Thg 5', 'Thg 6', 'Thg 7', 'Thg 8', 'Thg 9', 'Thg 10', 'Thg 11', 'Thg 12'],
        dayOfWeekNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
        shortDayOfWeekNames: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
        quarterNames: ['Q1', 'Q2', 'Q3', 'Q4']
    }
};

var getCalendarSupportedLanguage = () => {
    var res = null;
    if (window['LanguageModule']) res = window['LanguageModule'].defaultcode;
    if (!res) res = navigator.language || navigator.userLanguage;
    res = res || 'en';
    res = res.toLowerCase();
    if (res === 'vn') res = 'vi';
    if (!calendarLangMap[res]) res = 'en';
    return res;
}

/**
 * get multi language text
 * @param {string} key
 * @returns {*}
 */
var getCMLText = key => {
    return calendarLangMap[getCalendarSupportedLanguage()][key];
};

var EV_CONTENT_CHANGE = 'ev_content_change';

/**
 * @extends AElement
 * @constructor
 */
function ChromeCalendar() {
    var thisCal = this;
    this.dayInWeekTexts = getCMLText('shortDayOfWeekNames');

    this._startDayOfWeek = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.getDefaultFirstDayOfWeek)();
    this._level = "day";
    this.$years = $('.absol-chrome-calendar-years', this);
    this.$title = $('.absol-chrome-calendar-title', this)
    this.$titleTime = $('.title-time', this.$title);

    this.$instance = $('.absol-chrome-calendar-instance', this);
    this.$era = $('.absol-chrome-calendar-era', this)
    this.$month = $('.absol-chrome-calendar-month', this);
    this.$dayOfWeek = $('.absol-chrome-calendar-dayofweek', this);
    this._min = new Date(1890, 0, 1);
    this._max = new Date(2090, 0, 1);

    this._selectedDates = [absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfDay(new Date())];
    this._viewDate = new Date();

    this.$prevBtn = $('.absol-chrome-calendar-header-buttons > button.prev-btn', this)
    this.$todayBtn = $('.absol-chrome-calendar-header-buttons > button.today-btn', this)
    this.$nextBtn = $('.absol-chrome-calendar-header-buttons > button.next-btn', this)

    /***
     *
     * @type {VScroller}
     */
    this.$yearScroller = $('vscroller.absol-chrome-calendar-years', this);
    this.$yearItems = [];

    $('.absol-chrome-calendar-year', this.$yearScroller, function (e) {
        thisCal.$yearItems.push(e);
    });

    this.$attachHook = _('attachhook').addTo(this);

    this.domSignal = new absol_src_HTML5_DelaySignal__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z()
        .on(EV_CONTENT_CHANGE, () => {
            switch (this.level) {
                case 'day':
                case 'week':
                    this.startViewer('month');
                    this.viewer.updateContent();
                    break;
                case 'month':
                case 'quarter':
                    this.startViewer('year');
                    this.viewer.updateContent();
                    break;
                case 'year':
                    this.startViewer('era');
                    break;
                default:
                    break;
            }
            this.viewer.updateContent();
            this.headerCtrl.updateTitle();
            this.headerCtrl.updateButtons();
        })


    this.sync = new Promise(function (rs) {
        thisCal.$attachHook.on('attached', rs);
    });

    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__/* ["default"].drillProperty */ .ZP.drillProperty(this, this, 'minLimitDate', 'min');
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__/* ["default"].drillProperty */ .ZP.drillProperty(this, this, 'minDateLimit', 'min');
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__/* ["default"].drillProperty */ .ZP.drillProperty(this, this, 'maxLimitDate', 'max');
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__/* ["default"].drillProperty */ .ZP.drillProperty(this, this, 'maxDateLimit', 'max');


    this.headerCtrl = new CCHeaderController(this);
    this.viewers = {
        month: new CCMonthViewer(this),
        year: new CCYearViewer(this),
        era: new CCEraViewer(this)
    };
    /**
     *
     * @type {CCViewerAbstract}
     */
    this.viewer = this.viewers['month'];
    this.viewer.start();

    /**
     * @type {number}
     * @name startDayOfWeek
     * @memberOf ChromeCalendar#
     */

    /**
     * @type {Date[]}
     * @name selectedDates
     * @memberOf ChromeCalendar#
     */

    /**
     * @type {'day'|'week'|'month'|'quarter'|'year'}
     * @name level
     * @memberOf ChromeCalendar#
     */

    /**
     * @type {Date}
     * @name viewDate
     * @memberOf ChromeCalendar#
     */
}


ChromeCalendar.tag = 'ChromeCalendar'.toLowerCase();
ChromeCalendar.render = function () {
    return _({
        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: getCMLText('shortDayOfWeekNames').map(function (text) {
                            return {
                                child: { text: text }
                            }
                        })
                    },
                    {
                        class: 'absol-chrome-calendar-month',
                    },
                    {
                        tag: 'vscroller',
                        class: 'absol-chrome-calendar-years',
                    },
                    {
                        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 ((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(date, this._selectedDates[i]) === 0) return true;
    }
    return false;
};

ChromeCalendar.prototype.isSelectedWeek = function (date) {
    return this._selectedDates.some(it => {
        if (date.getFullYear() !== it.getFullYear()) return false;
        var weekIdx = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.weekIndexOf)(date, false, this.startDayOfWeek);
        var itWeekIdx = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.weekIndexOf)(it, false, this.startDayOfWeek);
        return weekIdx === itWeekIdx;
    });
};


/**
 * @param {Date} date
 * @returns {Boolean}
 */
ChromeCalendar.prototype.isSelectedMonth = function (date) {
    for (var i = 0; i < this._selectedDates.length; ++i) {
        if ((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.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 ((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareMonth)((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfQuarter)(date), (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.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 ((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(date, this._min) < 0) return -1;
    if ((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(date, this._max) > 0) return 1;
    return 0;
};


ChromeCalendar.prototype.monthCmpLimit = function (date) {
    var startOfMonth = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfMonth)(date);
    var endOfMonth = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextMonth)(date);
    var minMil = Math.max(startOfMonth.getTime(), this._min.getTime());
    var maxMil = Math.min(endOfMonth.getTime(), (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextDate)(this._max).getTime());
    if (minMil < maxMil) return 0;
    return this.dayCmpLimit(date);
};

ChromeCalendar.prototype.yearCmpLimit = function (date) {
    var startOfYear = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.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(), (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextDate)(this._max).getTime());
    if (minMil < maxMil) return 0;
    return this.dayCmpLimit(date);
};

ChromeCalendar.prototype.quarterCmpLimit = function (date) {
    var startOfQuarter = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfQuarter)(date);
    var endOfQuarter = new Date(date.getFullYear(), date.getMonth() + 3, 1);
    var minMil = Math.max(startOfQuarter.getTime(), this._min.getTime());
    var maxMil = Math.min(endOfQuarter.getTime(), (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextDate)(this._max).getTime());
    if (minMil < maxMil) return 0;
    return this.dayCmpLimit(date);
}


/**
 *
 * @param {"month"|"year"|"era"} key
 */
ChromeCalendar.prototype.startViewer = function (key) {
    if (!this.viewers[key]) return;
    if (this.viewers[key] === this.viewer) {
        this.viewer.start();
        this.headerCtrl.updateTitle();
    }
    else {
        this.viewer.stop();
        this.viewer = this.viewers[key];
        this.viewer.start();
        this.headerCtrl.updateTitle();
    }
};


ChromeCalendar.property = {};

ChromeCalendar.property.selectedDates = {
    set: function (value) {
        value = value || [];
        if (!(value instanceof Array)) value = [value];
        value = value.map(d => (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.implicitDate)(d)).filter(d => !!d);
        this._selectedDates = value;
        this._viewDate = this._selectedDates[0] || new Date();
        this.domSignal.emit(EV_CONTENT_CHANGE);
    },
    get: function () {
        var level = this._level;
        var res = this._selectedDates.map(d => {
            var res = d;
            switch (level) {
                case 'day':
                    res = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfDay)(d);
                    break;
                case 'week':
                    res = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfWeek)(d, this.startDayOfWeek);
                    if (res.getFullYear() < d.getFullYear()) res = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfYear)(d);
                    break;
                case 'month':
                    res = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfMonth)(d);
                    break;
                case 'quarter':
                    res = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfQuarter)(d);
                    break;
                case 'year':
                    res = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfYear)(d);
                    break;
            }
            return res;
        });

        res = res.reduce((ac, d) => {
            var key = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.keyStringOf)(d);
            if (ac.has[key]) return ac;
            ac.has[key] = d;
            ac.arr.push(d);
            return ac;
        }, { has: {}, arr: [] }).arr;

        res.sort((a, b) => {
            return a.getTime() - b.getTime();
        });

        return res;
    }
};


ChromeCalendar.property.min = {
    set: function (value) {
        if (!value) value = new Date(1890, 0, 1);
        if (typeof value == 'number') value = new Date(value);
        value = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfDay)(value);
        value = new Date(Math.max(new Date(1890, 0, 1).getTime(), value.getTime()));
        this._min = value;
        this.domSignal.emit(EV_CONTENT_CHANGE);

    },
    get: function () {
        return this._min;
    }
};

//include maxLimitDate
ChromeCalendar.property.max = {
    set: function (value) {
        if (!value) value = new Date(2090, 0, 1);
        if (typeof value == 'number') value = new Date(value);
        if (value.getTime() > (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfDay)(value).getTime()) value = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextDate)((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfDay)(value));
        value = new Date(Math.min(new Date(2090, 0, 1).getTime(), value.getTime()));
        this._max = value;
        this.domSignal.emit(EV_CONTENT_CHANGE);

    },
    get: function () {
        return this._max;
    }
};


ChromeCalendar.property.multiSelect = {
    set: function (value) {
        value = false;
        // throw new Error('Not support yet!')
        var lastValue = this.multiSelect;
        value = !!value;
        if (lastValue !== value) {
            if (value) {
                this.addClass('as-multi-select')
            }
            else {
                this.removeClass('as-multi-select');
            }
        }
        this.domSignal.emit(EV_CONTENT_CHANGE);
    },
    get: function () {
        return this.hasClass('as-multi-select');
    }
};


ChromeCalendar.property.level = {
    set: function (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(EV_CONTENT_CHANGE);
    },
    get: function () {
        return this._level;
    }
};

ChromeCalendar.prototype.dayInWeekTexts = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];

ChromeCalendar.property.startDayOfWeek = {
    set: function (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.viewers.month.updateContent();
    },
    get: function () {
        return this._startDayOfWeek;
    }
};


ChromeCalendar.property.viewDate = {
    set: function (date) {
        this._viewDate = date;
        this.domSignal.emit(EV_CONTENT_CHANGE);
    },
    get: function () {
        return this._viewDate;
    }
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(ChromeCalendar);

/**
 *
 * @param {ChromeCalendar} elt
 * @constructor
 */
function CCViewerAbstract(elt) {
    this.elt = elt;
    this.$instance = elt.$instance;
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }
}

CCViewerAbstract.prototype.getTitle = function () {
    return '';
};

CCViewerAbstract.prototype.updateContent = function () {

};

CCViewerAbstract.prototype.prev = function () {

};

CCViewerAbstract.prototype.next = function () {

};

CCViewerAbstract.prototype.canPrev = function () {
};
CCViewerAbstract.prototype.canNext = function () {
};


CCViewerAbstract.prototype.viewToday = function () {
};

CCViewerAbstract.prototype.canViewToday = function () {
};


CCViewerAbstract.prototype.start = function () {

};

CCViewerAbstract.prototype.stop = function () {

};

CCViewerAbstract.prototype.onSelectedDatesChange = function () {

};


/**
 * @extends CCViewerAbstract
 * @param elt
 * @constructor
 */
function CCMonthViewer(elt) {
    CCViewerAbstract.call(this, elt);
    this.$month = elt.$month;
    this.$dayOfWeek = elt.$dayOfWeek;
    this.$instance = elt.$instance;

    this.$month.on('click', this.ev_click)
        .on('mouseenter', this.ev_mouseEnter);
    // this.startingDate = null;

    this.animationSync = Promise.resolve();

    this.isListening = false;
    this.$hoverRow = null;
}

(0,absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__/* .mixClass */ .Jx)(CCMonthViewer, CCViewerAbstract);


CCMonthViewer.prototype.updateContent = function () {
    var viewDate = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfMonth)(this.elt._viewDate);
    var viewMonth = viewDate.getMonth();
    var viewYear = viewDate.getFullYear();

    var bg = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfMonth)(viewDate);
    var startDayOfWeek = this.elt.startDayOfWeek;
    bg = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfWeek)(bg, false, startDayOfWeek);
    var weekIdx;
    var shortDayOfWeekNames = getCMLText('shortDayOfWeekNames');
    Array.prototype.forEach.call(this.$dayOfWeek.childNodes, (elt, i) => {
        elt.firstChild.data = shortDayOfWeekNames[(i + startDayOfWeek) % 7];
    });
    var now = new Date();
    var rowElt, cellElt;
    while (this.$month.childNodes.length < 6) {
        rowElt = _({
            class: 'absol-chrome-calendar-week-in-month',
            child: Array(7).fill('div')
        });
        this.$month.addChild(rowElt);
    }
    var i, j;
    var isSelectedRow;
    for (i = 0; i < 6; ++i) {
        rowElt = this.$month.childNodes[i];
        isSelectedRow = false;
        weekIdx = bg.getFullYear() < viewDate.getFullYear() ? 0 : (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.weekIndexOf)(bg, false, startDayOfWeek);
        rowElt.attr('data-week-idx-text', (0,_utils__WEBPACK_IMPORTED_MODULE_6__.zeroPadding)(weekIdx + 1, 2) + '');
        // if (this.elt.isSel)
        for (j = 0; j < rowElt.childNodes.length; ++j) {
            cellElt = rowElt.childNodes[j];
            cellElt.attr('data-date', bg.getDate());
            cellElt.attr('data-time', bg.getTime());
            if (bg.getFullYear() !== viewYear) {
                cellElt.addClass('as-not-in-year');
            }
            else {
                cellElt.removeClass('as-not-in-year');
            }
            if (bg.getMonth() === viewMonth) {
                cellElt.removeClass('absol-chrome-calendar-not-in-month');
            }
            else {
                cellElt.addClass('absol-chrome-calendar-not-in-month');
            }

            if (this.elt.level === 'day' && this.elt.isSelectedDate(bg)) {
                cellElt.addClass('absol-chrome-calendar-selected');
            }
            else if (this.elt.level === 'week' && this.elt.isSelectedWeek(bg)) {
                cellElt.addClass('absol-chrome-calendar-selected');
                if (!isSelectedRow && bg.getFullYear() === this.elt._viewDate.getFullYear()) {
                    isSelectedRow = true;
                }
            }
            else {
                cellElt.removeClass('absol-chrome-calendar-selected');
            }

            if ((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(bg, now) === 0) {
                cellElt.addClass('absol-chrome-calendar-today');
            }
            else {
                cellElt.removeClass('absol-chrome-calendar-today');
            }
            if (this.elt.dayCmpLimit(bg) === 0) {
                cellElt.removeClass('as-disabled');
            }
            else {
                cellElt.addClass('as-disabled');
            }

            bg = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextDate)(bg);
        }
        if (isSelectedRow) {
            rowElt.addClass('as-selected');
        }
        else {
            rowElt.removeClass('as-selected');
        }
    }
};

CCMonthViewer.prototype.animation = function (delta) {
    var oldViewDate = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfMonth)(this.elt._viewDate);

    var newViewDate = delta < 0 ? (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.prevMonth)(oldViewDate) : (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextMonth)(oldViewDate);
    var startDayOfWeek = this.elt.startDayOfWeek;
    var oldBg = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfWeek)(oldViewDate, false, startDayOfWeek);
    var newBg = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfWeek)(newViewDate, false, startDayOfWeek);
    var curDate;
    var additionalRow = Math.round((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(oldBg, newBg) / 7);
    if (delta > 0) {
        additionalRow = -additionalRow;
    }

    var now = new Date();

    var aniMonth = _({
        class: ['absol-chrome-calendar-month', 'as-animation']
    });
    if (delta < 0) {
        aniMonth.addStyle('top', -1.2 * (additionalRow - 1) + 'em');
    }
    else {
        aniMonth.addStyle('top', '1.2em');
    }

    var updateCellClassByViewDate = (viewDate) => {
        curDate = delta < 0 ? newBg : oldBg;
        var isSelectedRow;
        for (i = 0; i < aniMonth.childNodes.length; ++i) {
            rowElt = aniMonth.childNodes[i];
            isSelectedRow = false;
            for (j = 0; j < rowElt.childNodes.length; ++j) {
                cellElt = rowElt.childNodes[j];
                if (curDate.getMonth() !== viewDate.getMonth()) {
                    cellElt.addClass('absol-chrome-calendar-not-in-month');
                }
                else {
                    cellElt.removeClass('absol-chrome-calendar-not-in-month');
                }
                if (!isSelectedRow && this.elt.level === 'week' && curDate.getFullYear() === viewDate.getFullYear() && this.elt.isSelectedWeek(curDate)) {
                    isSelectedRow = true;
                }
                curDate = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextDate)(curDate);
            }
            if (isSelectedRow) {
                rowElt.addClass('as-selected');
            }
            else {
                rowElt.removeClass('as-selected');
            }
        }
    }


    var rowElt, cellElt;
    var i, j;

    curDate = delta < 0 ? newBg : oldBg;
    var weekIdx;
    for (i = 0; i < 6 + additionalRow; ++i) {
        rowElt = _({
            class: 'absol-chrome-calendar-week-in-month',
            child: Array(7).fill('div')
        });
        aniMonth.addChild(rowElt);
        for (j = 0; j < rowElt.childNodes.length; ++j) {
            cellElt = rowElt.childNodes[j];
            weekIdx = curDate.getFullYear() < newViewDate.getFullYear() ? 0 : (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.weekIndexOf)(curDate, false, startDayOfWeek);
            rowElt.attr('data-week-idx-text', (0,_utils__WEBPACK_IMPORTED_MODULE_6__.zeroPadding)(weekIdx + 1, 2) + '');
            cellElt.attr('data-date', curDate.getDate());
            cellElt.attr('data-time', curDate.getTime());
            if ((0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(curDate, now) === 0) {
                cellElt.addClass('absol-chrome-calendar-today');
            }
            if (this.elt.level === 'day' && this.elt.isSelectedDate(curDate)) {
                cellElt.addClass('absol-chrome-calendar-selected');
            }
            else if (this.elt.level === 'week' && this.elt.isSelectedWeek(curDate)) {
                cellElt.addClass('absol-chrome-calendar-selected');
            }
            if (this.elt.dayCmpLimit(curDate) === 0) {
                cellElt.removeClass('as-disabled');
            }
            else {
                cellElt.addClass('as-disabled');
            }
            curDate = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextDate)(curDate);
        }
    }

    updateCellClassByViewDate(oldViewDate);
    this.$instance.addChild(aniMonth);
    requestAnimationFrame(() => {
        if (delta < 0) {
            aniMonth.addStyle('top', '1.2em');
        }
        else {
            aniMonth.addStyle('top', -1.2 * (additionalRow - 1) + 'em');
        }
        updateCellClassByViewDate(newViewDate);

        setTimeout(() => {
            aniMonth.remove();
        }, 200)
    });

};

CCMonthViewer.prototype.canPrev = function () {
    return (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareMonth)(this.elt._viewDate, this.elt._min) > 0;
};

CCMonthViewer.prototype.canNext = function () {
    return (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareMonth)(this.elt._viewDate, this.elt._max) < 0;
};

CCMonthViewer.prototype.canViewToday = function () {
    var now = new Date();
    return (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(now, this.elt._min) >= 0 && (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate)(now, this.elt._max) <= 0;
};


CCMonthViewer.prototype.prev = function () {
    this.animation(-1);
    this.elt._viewDate = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.prevMonth)(this.elt._viewDate);
    this.updateContent();
    this.elt.headerCtrl.updateTitle();
    this.elt.headerCtrl.updateButtons();

};

CCMonthViewer.prototype.next = function () {
    this.animation(1);
    this.elt._viewDate = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextMonth)(this.elt._viewDate);
    this.updateContent();
    this.elt.headerCtrl.updateTitle();
    this.elt.headerCtrl.updateButtons();

};


CCMonthViewer.prototype.viewToday = function () {
    this.elt._viewDate = new Date();
    this.updateContent();
    this.elt.headerCtrl.updateTitle();
    this.elt.headerCtrl.updateButtons();
};

CCMonthViewer.prototype.start = function () {
    this.elt.attr('data-view', 'month');
    this.updateContent();
};

CCMonthViewer.prototype.stop = function () {

};

CCMonthViewer.prototype.getTitle = function () {
    var viewDate = this.elt._viewDate;
    var res = '' + getCMLText('monthNames')[viewDate.getMonth()];
    res += ', ' + viewDate.getFullYear();
    return res;
};


CCMonthViewer.prototype.ev_click = function (event) {
    var dateBtn = event.target;
    var date;
    while (dateBtn && dateBtn !== this.$month) {
        if (dateBtn.attr && dateBtn.attr('data-time')) {
            date = new Date(parseInt(dateBtn.attr('data-time')));
            date = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfDay)(date);
            this.elt._selectedDates = [date];
            this.onSelectedDatesChange();
            this.elt.emit('pick', {
                type: 'pick', value: date,
                isTrusted: event && event.isTrusted,
                originEvent: event,
                selectedDates: this.elt.selectedDates
            }, this.elt);
            if (dateBtn.hasClass('absol-chrome-calendar-not-in-month')) {
                if (parseInt(dateBtn.attr('data-date')) < 15) {
                    this.next();
                }
                else {
                    this.prev();
                }
            }
            break;
        }
        dateBtn = dateBtn.parentElement;
    }
};

CCMonthViewer.prototype.ev_mouseEnter = function (event) {
    if (this.isListening) return;
    if (this.elt.level !== 'week') return;
    this.isListening = true;
    if (this.$hoverRow) {
        this.$hoverRow.removeClass('as-hover-in-year')
            .removeClass('as-hover-not-in-year');
        this.$hoverRow = null;
    }
    document.addEventListener('mousemove', this.ev_mouseMove);
};

CCMonthViewer.prototype.ev_mouseMove = function (event) {
    if (!(0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__/* .hitElement */ .EY)(this.$month, event)) {
        this.isListening = false;
        document.removeEventListener('mousemove', this.ev_mouseMove);

    }
    var viewDate = this.elt._viewDate;

    var target = event.target;
    var date = null;
    var rowElt;
    if (target.attr) {
        if (target.attr('data-time')) {
            date = new Date(parseInt(target.attr('data-time')));
            date = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfDay)(date);
            rowElt = target.parentElement;
        }
        else if (target.attr('data-week-idx-text')) {
            rowElt = target;
            date = new Date(parseInt(rowElt.childNodes[0].attr('data-time')));
            if (date.getFullYear() !== viewDate.getFullYear()) {
                date = new Date(viewDate.getFullYear(), 0, 1, 0, 0, 0);
            }
        }
    }

    if (this.$hoverRow && this.$hoverRow !== rowElt) {
        this.$hoverRow.removeClass('as-hover-in-year')
            .removeClass('as-hover-not-in-year');
        this.$hoverRow = null;
    }
    if (!date) return;
    this.$hoverRow = rowElt;
    if (viewDate.getFullYear() !== date.getFullYear()) {
        rowElt.removeClass('as-hover-in-year')
            .addClass('as-hover-not-in-year');
    }
    else {
        rowElt.removeClass('as-hover-not-in-year')
            .addClass('as-hover-in-year');
    }

};


CCMonthViewer.prototype.onSelectedDatesChange = function () {
    var rowElt, cellElt;
    var i, j;
    var bg;
    var isSelectedRow;
    for (i = 0; i < this.$month.childNodes.length; ++i) {
        rowElt = this.$month.childNodes[i];
        isSelectedRow = false;
        for (j = 0; j < rowElt.childNodes.length; ++j) {
            cellElt = rowElt.childNodes[j];
            bg = new Date(parseInt(cellElt.attr('data-time')));
            if (this.elt.level === 'day' && this.elt.isSelectedDate(bg)) {
                cellElt.addClass('absol-chrome-calendar-selected');
            }
            else if (this.elt.level === 'week' && this.elt.isSelectedWeek(bg)) {
                cellElt.addClass('absol-chrome-calendar-selected');
                if (!isSelectedRow && bg.getFullYear() === this.elt._viewDate.getFullYear()) {
                    isSelectedRow = true;
                }
            }
            else {
                cellElt.removeClass('absol-chrome-calendar-selected');
            }

        }
        if (isSelectedRow) {
            rowElt.addClass('as-selected');
        }
        else {
            rowElt.removeClass('as-selected');
        }
    }
};


/**
 * @extends CCViewerAbstract
 * @param {ChromeCalendar}elt
 * @constructor
 */
function CCYearViewer(elt) {
    CCViewerAbstract.call(this, elt);
    this.$years = elt.$years;
    this.$yearScroller = elt.$yearScroller;
    this.$lastOpenYearItem = null;
    this.mouseListening = false;
}

(0,absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__/* .mixClass */ .Jx)(CCYearViewer, CCViewerAbstract);

CCYearViewer.prototype.start = function () {
    this.elt.attr('data-view', 'year');
    this.updateContent();
};

CCYearViewer.prototype.updateOpenYear = function () {
    if (this.$lastOpenYearItem) {
        this.$lastOpenYearItem.$months.updateActiveMonth();
    }
};


CCYearViewer.prototype.updateContent = function () {
    if (!this.$yearsContent) {
        this.$yearsContent = _({
            class: 'absol-chrome-calendar-years-content',
            child: Array(200).fill(0).map((u, i) => {
                return {
                    class: 'absol-chrome-calendar-year',
                    attr: { 'data-year': i + 1890 },
                    child: [
                        {
                            class: 'absol-chrome-calendar-year-head',
                            child: { text: i + 1890 + '' },
                        }
                    ],
                    props: {
                        __year__: i + 1890
                    },
                    on: {
                        click: () => {
                            this.viewYear(i + 1890);
                            // thisCal.expandYear(this.__year__);
                        },
                        mouseenter: this.ev_mouseEnter
                    }
                };
            })
        });
        this.$years.addChild(this.$yearsContent);
        this.$yearItems = Array.prototype.slice.call(this.$yearsContent.childNodes);
    }

    this.viewYear(this.elt._viewDate.getFullYear());
};

CCYearViewer.prototype.createMonths = function (year) {
    var now = new Date();
    var shortMonthNames = getCMLText('shortMonthNames');
    var res = _({
        class: 'absol-chrome-calendar-year-months',
        child: Array(3).fill('').map((u, i) => {
            return {
                class: 'absol-chrome-calendar-year-row-months',
                child: Array(4).fill(0).map((v, j) => {
                    var date = new Date(year, i * 4 + j, 1, 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(this.elt.isSelectedMonth(date) ? ['absol-chrome-calendar-selected'] : [])
                        ,
                        attr: {
                            'data-quarter': quarter + '',
                            'data-date': date.getTime() + '',
                            'data-month': i * 4 + j + ''
                        },
                        child: { text: shortMonthNames[i * 4 + j] },
                        on: {
                            click: function () {

                            }
                        },
                        props: {
                            __date__: date,
                            __quarter__: quarter
                        }
                    }
                })
            }
        }),
        on: {
            click: this.ev_clickMonth
        }
    });
    res.$monthList = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__.$$)('.absol-chrome-calendar-year-month', res)


    res.updateActiveMonth = () => {
        res.$monthList.forEach((e) => {
            now = new Date();
            if (absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareMonth(e.__date__, now) === 0) {
                e.addClass('absol-chrome-calendar-today');
            }
            else {
                e.removeClass('absol-chrome-calendar-today');
            }

            if (this.elt.isSelectedMonth(e.__date__)) {
                e.addClass('absol-chrome-calendar-selected');
            }
            else {
                e.removeClass('absol-chrome-calendar-selected');
            }


            if (this.elt.isSelectedQuarter(e.__date__)) {
                e.addClass('as-quarter-selected');
            }
            else {
                e.removeClass('as-quarter-selected');
            }


            var beginOfMonth = absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.beginOfMonth(e.__date__);
            var endOfMonth = absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.prevDate(absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.nextMonth(e.__date__));
            if (absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate(this.elt._min, endOfMonth) > 0 || absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_2__.compareDate(beginOfMonth, this.elt._max) > 0) {
                e.addClass('absol-chrome-calendar-date-disabled');
            }
            else {
                e.removeClass('absol-chrome-calendar-date-disabled');
            }
        });
    }
    return res;
};

CCYearViewer.prototype.viewYear = function (year) {
    var viewDate = this.elt._viewDate;
    if (viewDate.getFullYear() !== year) {
        viewDate = new Date(year, 0, 1, 0, 0, 0, 0);
        this.elt._viewDate = viewDate;
    }

    //todo: update button, title
    var fontSize = this.elt.getFontSize() || 14;
    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 - this.$yearScroller.getBoundingClientRect().top - fontSize * 0.45;
    if (itemElt.__year__ > lastYear) {
        dy -= 6 * fontSize + 1;
    }

    this.$yearScroller.scrollBy(dy, 100);
    this.$lastOpenYearItem = itemElt;
    itemElt.$months.updateActiveMonth();
    this.elt.headerCtrl.updateTitle();
    this.elt.headerCtrl.updateButtons();
};

CCYearViewer.prototype.stop = function () {
};

CCYearViewer.prototype.canNext = function () {
    return this.elt._viewDate.getFullYear() < this.elt._max.getFullYear();
};

CCYearViewer.prototype.canPrev = function () {
    return this.elt._viewDate.getFullYear() > this.elt._min.getFullYear();
};

CCYearViewer.prototype.canViewToday = function () {
    var viewDate = new Date();
    var year = viewDate.getFullYear();
    return year >= this.elt._min.getFullYear() && year <= this.elt._max.getFullYear();
}

CCYearViewer.prototype.prev = function () {
    this.elt._viewDate = new Date(this.elt._viewDate.getFullYear() - 1, 0, 1);
    this.viewYear(this.elt._viewDate.getFullYear());
};


CCYearViewer.prototype.next = function () {
    this.elt._viewDate = new Date(this.elt._viewDate.getFullYear() + 1, 0, 1);
    this.viewYear(this.elt._viewDate.getFullYear());
};

CCYearViewer.prototype.viewToday = function () {
    this.elt._viewDate = new Date();
    this.viewYear(new Date().getFullYear());
};

CCYearViewer.prototype.getTitle = function () {
    var viewDate = this.elt._viewDate;
    return '' + viewDate.getFullYear();
};


CCYearViewer.prototype.onSelectedDatesChange = function () {
    console.log(this.elt.selectedDates);

};

CCYearViewer.prototype.ev_clickMonth = function (event) {
    var monthElt = event.target;
    var date;
    if (monthElt && monthElt.attr)
        date = monthElt.attr('data-date');
    if (!date) return;
    date = new Date(parseInt(date));
    var level = this.elt.level;
    switch (level) {
        case 'month':
        case 'quarter':
            this.elt._selectedDates = [date];
            this.updateOpenYear();
            this.elt.emit('pick', {
                type: 'pick', value: date,
                isTrusted: event && event.isTrusted,
                originEvent: event
            }, this.elt);
            break;
        case 'year':
            break;
        case 'day':
        case 'week':
            this.elt._viewDate = date;
            this.elt.startViewer('month');
            break;
    }
};

CCYearViewer.prototype.ev_mouseEnter = function (event) {
    if (this.mouseListening) return;
    this.mouseListening = true;
    document.addEventListener('mousemove', this.ev_mouseMove);
};

CCYearViewer.prototype.ev_mouseMove = function (event) {
    if (!(0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__/* .hitElement */ .EY)(this.$yearsContent, event)) {
        this.mouseListening = false;
        document.removeEventListener('mousemove', this.ev_mouseMove);
        this.$yearsContent.attr('data-hover-quarter', undefined);

        return;
    }

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

};


function CCEraViewer(elt) {
    CCViewerAbstract.call(this, elt);
    this.$era = elt.$era;
    this.$yearScroller = elt.$yearScroller;
    this.$instance = elt.$instance;

    this._lastStartDecade = -1;
    this._decadeScrollTimeout = -1;
    this.scrollIntoDecadeResolve = null;
    this.title = '1980-2089';
    this.$era.on('scroll', this.ev_scroll)
        .on('click', this.ev_click);
}

(0,absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_5__/* .mixClass */ .Jx)(CCEraViewer, CCViewerAbstract);

CCEraViewer.prototype.start = function () {
    this.elt.attr('data-view', 'era');
    this.updateContent();
    this.viewEra(false);
    this.updatePickedYear();
};

CCEraViewer.prototype.canNext = function () {
    var viewDate = this.elt._viewDate;
    var year = viewDate.getFullYear();
    var eraIdx = Math.floor(year / 10);
    var maxEraIdx = Math.floor(this.elt._max.getFullYear() / 10);
    return (eraIdx < maxEraIdx);
};

CCEraViewer.prototype.canPrev = function () {
    var viewDate = this.elt._viewDate;
    var year = viewDate.getFullYear();
    var eraIdx = Math.floor(year / 10);
    var minEraIdx = Math.floor(this.elt._min.getFullYear() / 10);
    return eraIdx > minEraIdx;
};

CCEraViewer.prototype.canViewToday = function () {
    var viewDate = this.elt._viewDate;
    var year = viewDate.getFullYear();
    var eraIdx = Math.floor(year / 10);
    var minEraIdx = Math.floor(this.elt._min.getFullYear() / 10);
    var maxEraIdx = Math.floor(this.elt._max.getFullYear() / 10);
    return eraIdx >= minEraIdx && eraIdx <= maxEraIdx;
};


CCEraViewer.prototype.prev = function () {
    this.elt._viewDate = new Date(this.elt._viewDate.getFullYear() - 10, 0, 1);
    this.scrollIntoDecade(Math.floor(this.elt._viewDate.getFullYear() / 10) * 10, true)
};

CCEraViewer.prototype.next = function () {
    this.elt._viewDate = new Date(this.elt._viewDate.getFullYear() + 10, 0, 1);
    this.scrollIntoDecade(Math.floor(this.elt._viewDate.getFullYear() / 10) * 10, true);
};

CCEraViewer.prototype.viewToday = function () {
    this.elt._viewDate = new Date();
    this.scrollIntoDecade(Math.floor(this.elt._viewDate.getFullYear() / 10) * 10, true);
};


CCEraViewer.prototype.updateContent = function () {
    if (this.$era.childNodes.length === 0) {
        var now = new Date();
        var cYear = now.getFullYear();
        var rows = Array(50).fill(0).map(function (u, i) {
            return _({
                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);
    }


    this.updateDisabledYearInEra();
};

CCEraViewer.prototype.viewEra = function (animation) {
    this.elt.removeClass('view-month')
        .removeClass('view-year')
        .addClass('view-era');
    this.scrollIntoDecade(Math.floor(this.elt._viewDate.getFullYear() / 10) * 10, animation)
};

CCEraViewer.prototype.getTitle = function () {
    return this.title;
};

CCEraViewer.prototype.updatePickedYear = function () {
    var yearElt;
    while (this.$lastPickYears && this.$lastPickYears.length > 0) {
        yearElt = this.$lastPickYears.pop();
        yearElt.removeClass('absol-chrome-calendar-selected');
    }
    this.$lastPickYears = this.elt._selectedDates.map((date) => {
        var yearElt = this.yearInEra(date.getFullYear());
        yearElt.addClass('absol-chrome-calendar-selected');
        return yearElt;
    });
};


CCEraViewer.prototype.updateDisabledYearInEra = function () {
    var i, j;
    var rowElt, cellElt, date;
    for (i = 0; i < this.$era.childNodes.length; ++i) {
        rowElt = this.$era.childNodes[i];
        for (j = 0; j < rowElt.childNodes.length; ++j) {
            cellElt = rowElt.childNodes[j];
            date = new Date(cellElt.__year__, 0, 1);
            if (this.elt.yearCmpLimit(date) === 0) {
                cellElt.removeClass('absol-chrome-calendar-date-disabled');
            }
            else {
                cellElt.addClass('absol-chrome-calendar-date-disabled');
            }
        }
    }
};

CCEraViewer.prototype.scrollIntoDecade = function (startYear, animation) {
    if (!this.elt.isDescendantOf(document.body)) {
        return this;
    }
    return new Promise((resolve) => {
        var eraBound = this.$era.getBoundingClientRect();
        var rowIdx = Math.floor((startYear - 1890) / 4);
        if (this._decadeScrollTimeout > 0) {
            clearTimeout(this._decadeScrollTimeout);
            this._decadeScrollTimeout = -1;
        }
        if (this.scrollIntoDecadeResolve) {
            this.scrollIntoDecadeResolve();
            this.scrollIntoDecadeResolve = null;
        }
        this.scrollIntoDecadeResolve = resolve;

        var t0 = new Date().getTime();
        var t1 = t0 + 250;
        var y0 = this.$era.scrollTop;
        var y1 = rowIdx * eraBound.height / 4;
        var tick;
        if (animation) {
            tick = () => {
                var tc = new Date().getTime();
                var yc = Math.min(1, Math.pow((tc - t0) / (t1 - t0), 2)) * (y1 - y0) + y0;
                this.$era.scrollTop = yc;
                if (tc < t1) {
                    this._decadeScrollTimeout = setTimeout(tick, 1000 / 30);
                }
                else {
                    this._decadeScrollTimeout = -1;
                    this.scrollIntoDecadeResolve = null;
                    resolve();
                }
            };
            this._decadeScrollTimeout = setTimeout(tick, 100);
        }
        else {
            this.$era.scrollTop = y1;
        }
    });
};

CCEraViewer.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.clearYearInEra(this._lastStartDecade);
        }
        this._lastStartDecade = startDecade;
        this.activeYearInEra(startDecade);
        this.title = startDecade + '-' + (startDecade + 10);

        if (this.elt._level === 'year') {
            //todo
            if (!this._decadeScrollTimeout || this._decadeScrollTimeout < 0) {
                if (this.elt.yearCmpLimit(new Date(startDecade, 0, 1)) === 0)
                    this.elt._viewDate = new Date(startDecade, 0, 1);
            }
        }
        this.elt.headerCtrl.updateTitle();
        this.elt.headerCtrl.updateButtons();
    }
};

CCEraViewer.prototype.clearYearInEra = function (startYear) {
    var cellElt;
    for (var i = 0; i < 10; ++i) {
        cellElt = this.yearInEra(startYear + i);
        if (cellElt) cellElt.removeClass('absol-chrome-calendar-in-decade');
    }
};

CCEraViewer.prototype.yearInEra = 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];
};

CCEraViewer.prototype.activeYearInEra = function (startYear) {
    var cellElt;
    for (var i = 0; i < 10; ++i) {
        cellElt = this.yearInEra(startYear + i);
        if (cellElt) cellElt.addClass('absol-chrome-calendar-in-decade');
    }
}

CCEraViewer.prototype.ev_scroll = function (event) {
    this.updateYearInEra();
};

CCEraViewer.prototype.ev_click = function (event) {
    var yearElt = event.target;
    var year = yearElt.__year__;
    if (typeof year !== "number") return;

    var date = new Date(year, 0, 1, 0, 0, 0, 0);
    if (this.elt.level === 'year') {
        this.elt._selectedDates = [date];
        this.updatePickedYear();
        this.scrollIntoDecade(Math.floor(year / 10) * 10, true);
        this.elt.emit('pick', {
            type: 'pick', value: date,
            isTrusted: event && event.isTrusted,
            originEvent: event,
        });
    }
    else {
        this.elt._viewDate = date;
        this.elt.startViewer('year');
    }
};

/**
 *
 * @param {ChromeCalendar} elt
 * @constructor
 */
function CCHeaderController(elt) {
    this.elt = elt;
    this.$prevBtn = elt.$prevBtn;
    this.$nextBtn = elt.$nextBtn;
    this.$todayBtn = elt.$todayBtn;
    this.$titleTime = elt.$titleTime;
    this.$title = elt.$title;
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }

    this.$prevBtn.on('click', this.ev_clickPrev);
    this.$nextBtn.on('click', this.ev_clickNext);
    this.$todayBtn.on('click', this.ev_clickToday);
    this.$title.on('click', this.ev_clickTitle);
}

CCHeaderController.prototype.updateTitle = function () {
    this.$titleTime.innerHTML = this.elt.viewer.getTitle();
};

CCHeaderController.prototype.updateButtons = function () {
    this.$prevBtn.disabled = !this.elt.viewer.canPrev();
    this.$nextBtn.disabled = !this.elt.viewer.canNext();
    this.$todayBtn.disabled = !this.elt.viewer.canViewToday();
}

CCHeaderController.prototype.ev_clickPrev = function () {
    this.elt.viewer.prev();
};

CCHeaderController.prototype.ev_clickNext = function () {
    this.elt.viewer.next();
};

CCHeaderController.prototype.ev_clickToday = function () {
    this.elt.viewer.viewToday();
};

CCHeaderController.prototype.ev_clickTitle = function () {
    var curViewer = this.elt.viewer;
    curViewer.stop();
    if (curViewer === this.elt.viewers.month) {
        this.elt.startViewer('year');
    }
    else if (curViewer === this.elt.viewers.year) {
        this.elt.startViewer('era');
    }

};

/**
 *
 * @param {AElement|HTMLElement} element
 * @param calendarProps
 * @param anchor
 * @param {function} calendarPickListener
 * @param {boolean=} darkTheme
 * @returns {CCShareDropDownInstance}
 */
ChromeCalendar.showWhenClick = function (element, calendarProps, anchor, calendarPickListener, darkTheme) {
    var opt = {
        props: calendarProps,
        anchor: anchor,
        onPick: calendarPickListener,
        darkTheme: darkTheme,
        triggerElt: element
    };

    return new CCShareDropDownInstance(element, opt);
};


ChromeCalendar.show = function (element, calendarProps, anchor, calendarPickListener, darkTheme) {
    var opt = {
        props: calendarProps,
        anchor: anchor,
        onPick: calendarPickListener,
        darkTheme: darkTheme,
    };

    var instance = new CCShareDropDownInstance(element, opt);
    return instance.id;
};


ChromeCalendar.close = function (session) {
    var share = CCShareDropDownInstance.prototype.share;
    var instance = share.instances[session];
    if (instance) {
        instance.close();
        if (!instance.opt.triggerElt) instance.remove();
    }
};


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ChromeCalendar);


/**
 *
 * @param {AElement} elt
 * @param {{props?:object, anchor?: number[], onPick?: function, darkTheme?: boolean, triggerElt?:AElement }} opt
 * @constructor
 */
function CCShareDropDownInstance(elt, opt) {
    this.id = Math.random() * 10000000000 >> 0;
    this.elt = elt;
    this.opt = Object.assign({}, opt);
    this.ev_clickOut = this.ev_clickOut.bind(this);
    this.ev_click = this.ev_click.bind(this);

    if (this.opt.triggerElt) {
        this.opt.triggerElt.on('click', this.ev_click);
    }
    this.share.instances[this.id] = this;
}

CCShareDropDownInstance.prototype.share = {
    $follower: null,
    $picker: null,
    session: null,
    onPick: null,
    holder: null,
    instances: {}
};

CCShareDropDownInstance.prototype.prepare = function () {
    var share = this.share;
    if (share.$follower) return;
    /**
     *
     * @type {Follower|AElement}
     */
    share.$follower = _({
        tag: _Follower__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z
    });
    share.$follower.cancelWaiting();
    share.$picker = _({
        tag: ChromeCalendar,
        on: {
            pick: (event) => {
                if (typeof share.onPick === "function") share.onPick(event.value, event, this);
            }
        }
    }).addTo(share.$follower);
    share.session = Math.random() * 10000000000 >> 0;
    share.onPick = null;
}

/**
 *

 */
CCShareDropDownInstance.prototype.show = function () {
    this.prepare();
    var share = this.share;
    if (share.holder) share.holder.close();
    share.holder = this;
    var props = this.opt.props;
    if (props instanceof Date) props = { selectedDates: [props] };
    if (props instanceof Array) props = { selectedDates: props };
    props.maxDateLimit = props.maxDateLimit || null;
    props.minDateLimit = props.minDateLimit || null;
    share.$follower.addTo(document.body);
    Object.assign(share.$picker, props);
    share.$follower.addStyle('visibility', 'hidden');
    if (this.opt.darkTheme) {
        share.$picker.addClass('dark');
    }
    else {
        share.$picker.removeClass('dark');
    }
    if (this.opt.triggerElt) {
        setTimeout(() => {
            document.addEventListener('click', this.ev_clickOut, false);
        }, 30);
    }
    share.$follower.sponsorElement = this.opt.triggerElt || this.elt;
    share.$follower.anchor = this.opt.anchor;
    share.$follower.followTarget = this.elt;
    share.$follower.updatePosition();
    share.onPick = ()=>{
        var value = share.$picker.selectedDates[0];
        if (value && this.opt.onPick) {
            this.opt.onPick(value);
            if (this.opt.triggerElt) {
                this.close();
            }
        }
    }
    setTimeout(() => {
        if (share.holder === this) {
            share.$follower.removeStyle('visibility', 'hidden');
        }
    }, 10);
};


CCShareDropDownInstance.prototype.close = function () {
    var share = this.share;
    if (!share.$follower) return;
    if (share.holder !== this) return;
    share.holder = null;
    if (this.opt.triggerElt) {
        document.removeEventListener('click', this.ev_clickOut, false);
    }
    share.onPick = null;
    share.$follower.selfRemove();
};

/**
 *
 * @param {Date} value
 */
CCShareDropDownInstance.prototype.setDateValue = function (value) {
    var share = this.share;
    if (share.holder === this) {
        share.$picker.selectedDates = [value];
    }
};

CCShareDropDownInstance.prototype.cancel = function () {
    this.close();
};

CCShareDropDownInstance.prototype.remove = function () {
    this.close();
    if (this.opt.triggerElt) {
        this.opt.triggerElt.removeEventListener('click', this.ev_click);
    }
    delete this.share.instances[this.id];
};

CCShareDropDownInstance.prototype.ev_clickOut = function (event) {
    if (!(0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__/* .hitElement */ .EY)(this.elt, event))
        this.close();
};


CCShareDropDownInstance.prototype.ev_click = function (event) {
    this.show();
};






/***/ }),

/***/ 7054:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony export ContextCaptor */
/* harmony import */ var _css_contextmenu_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7994);
/* harmony import */ var _css_contextmenu_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_contextmenu_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(863);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6628);
/* harmony import */ var absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(557);
/* harmony import */ var _Menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(407);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7951);
/* harmony import */ var _BoardTable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7548);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(1477);
/* harmony import */ var absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9399);











var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

var supportContextEvent = false;
var isMobile = absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_9__/* ["default"].isMobile */ .Z.isMobile;


/**
 * @extends AElement
 * @constructor
 */
function ContextCaptor() {
    this.attachedElt = null;
    this.$textarea = $('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 _({
        class: ['absol-context-menu-anchor'],
        extendEvent: 'requestcontextmenu',
        child: [
            'textarea'
        ]
    });
};

ContextCaptor.prototype.showContextMenu = function (x, y, props, onSelectItem) {
    var self = this;
    var anchor = _('.as-context-menu-ctn.absol-context-menu-anchor' + (isMobile ? '.as-anchor-modal' : '')).addTo(document.body);
    var finish = function (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 = _({
        tag: 'vmenu',
        props: props,
        on: {
            press: onSelectItem || function () {
            }
        }
    }).addTo(anchor);


    setTimeout(function () {
        if (!isMobile) {
            var screenSize = absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* ["default"].getScreenSize */ .ZP.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');
        (0,_ACore__WEBPACK_IMPORTED_MODULE_1__.$$)('VMenuItem'.toLowerCase(), vmenu).forEach(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 (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 () {
            propagation = false;
        }
    }, baseEventData);

    Object.defineProperty(localEvent, 'selectedText', {
        get: function () {
            return (0,_utils__WEBPACK_IMPORTED_MODULE_8__.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 absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z(pointer.clientX, pointer.clientY);

    if (isTouch) {
        var dragzone = _BoardTable__WEBPACK_IMPORTED_MODULE_7__/* ["default"].prototype._findDragZone */ .ZP.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 (absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__/* ["default"].isMouseRight */ .ZP.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 absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z(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 = _('contextcaptor');
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* ["default"].documentReady.then */ .ZP.documentReady.then(function () {
        ContextCaptor.$elt.addTo(document.body);
        ContextCaptor.$elt.attachTo(document.body);
    });
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(ContextCaptor);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ContextCaptor);

/***/ }),

/***/ 5611:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);


function Draggable(element) {
    if (!element) element = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"]._ */ .Z._('div');
    else _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].$ */ .Z.$(element);
    element.defineEvent(['predrag', 'drag', 'begindrag', 'enddrag']);
    var body = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].$ */ .Z.$('body');
    var isMoving = false;
    var firstMove = false;
    var offsetX;
    var offsetY;
    var fontSize;
    var left0em, top0em, left0, top0;
    var finishMoving = function (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 (event) {
        finishMoving(event);
    };

    var mouseMoveEventHandler = function (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 (event) {
        finishMoving(event);
    };


    var mouseDownEventHandler = function (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 __WEBPACK_DEFAULT_EXPORT__ = (Draggable);

/***/ }),

/***/ 1577:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_dropzone_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6950);
/* harmony import */ var _css_dropzone_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_dropzone_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7951);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(863);






var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

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

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(DropZone);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DropZone);

/***/ }),

/***/ 4670:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */   "M": () => (/* binding */ EmojiAnimByIdent)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (EmojiAnims);

var EmojiAnimByIdent = EmojiAnims.reduce((ac, cr) => {
    ac[cr[0]] = cr;
    return ac;
}, {});

/***/ }),

/***/ 7712:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (EmojiChars); 

/***/ }),

/***/ 2948:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_emojipicker_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6683);
/* harmony import */ var _css_emojipicker_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_emojipicker_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _EmojiAnims__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4670);
/* harmony import */ var _Sprite__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9950);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7951);






var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

/***
 * @extends AElement
 * @constructor
 */
function EmojiPicker() {
    var thisPicker = this;
    this._aliveTimeout = 90;
    this._assetRoot = this.attr('data-asset-root');
    /***
     *
     * @type {Sprite}
     */
    this.$previewAnim = $('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/' + _EmojiAnims__WEBPACK_IMPORTED_MODULE_2__/* ["default"][0][1] */ .Z[0][1];
    this.$previewAnim.fps = 30;
    this.$desc = $('.as-emoji-picker-preview-desc', this);
    this.$shortcut = $('.as-emoji-picker-preview-shortcut', this);
    this.$desc.clearChild().addChild(_({ text: _EmojiAnims__WEBPACK_IMPORTED_MODULE_2__/* ["default"][0][2] */ .Z[0][2] }));
    this.$shortcut.clearChild().addChild(_({ text: _EmojiAnims__WEBPACK_IMPORTED_MODULE_2__/* ["default"][0][0] */ .Z[0][0] }));
    this.$list = $('.as-emoji-picker-list', this);
    this.$items = _EmojiAnims__WEBPACK_IMPORTED_MODULE_2__/* ["default"].reduce */ .Z.reduce(function (ac, it) {
        var itemElt = _({
            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 = _('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 _({
        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(_({ text: itemData[2] }));
    this.$shortcut.clearChild().addChild(_({ text: itemData[0] }));
};

EmojiPicker.eventHandler.clickItem = function (itemData, event) {
    this.emit('pick', { name: 'pick', key: itemData[0], target: this }, this);
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(EmojiPicker);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EmojiPicker);


/***/ }),

/***/ 2917:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "$P": () => (/* binding */ ExpNode),
/* harmony export */   "yb": () => (/* binding */ ExpTree),
/* harmony export */   "uz": () => (/* binding */ ExpGroup),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony export ExpSearcher */
/* harmony import */ var _css_exptree_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3234);
/* harmony import */ var _css_exptree_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_exptree_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1477);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3349);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(863);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7951);
/* harmony import */ var absol_src_String_stringGenerate__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1334);
/* harmony import */ var _list_search__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2551);
/* harmony import */ var absol_src_String_stringUtils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2973);











var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install('toggler-ico', function () {
    var res = _(
        '<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;
});

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install('remove-ico', function () {
    return _('<svg class="remove-ico" width="24" height="24" viewBox="0 0 24 24">\
                <rect style="fill: transparent; stroke: none" x="0" y="0" width="24" height="24"></rect>\
                <path class="close" d="M3,16.74L7.76,12L3,7.26L7.26,3L12,7.76L16.74,3L21,7.26L16.24,12L21,16.74L16.74,21L12,16.24L7.26,21L3,16.74" />\
                <circle class="modified" cx="12" cy="12" r="10" />\
            </svg>');
});

/***
 * @extends AElement
 * @constructor
 */
function ExpNode() {
    var thisEN = this;
    this.$level = $('.absol-exp-node-level', this);
    this.$removeIcon = $('remove-ico', this)
        .on('click', function (event) {
            thisEN.emit('pressremove', { target: thisEN, type: 'pressremove' }, this);
        });
    this.on('keydown', this.eventHandler.buttonKeydown);

    this.$toggleIcon = $('toggler-ico', this);

    this.on('click', (event) => {
        var toggleBound = this.$toggleIcon.getBoundingClientRect();
        if (toggleBound.width > 0 && event.clientX <= toggleBound.right) {
            this.emit('presstoggle', (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* .copyEvent */ .FG)(event, { target: thisEN, type: 'pressremove' }), this);
        }
        else if (!absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].hitElement */ .ZP.hitElement(thisEN.$removeIcon, event)) {
            this.emit('press', (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* .copyEvent */ .FG)(event, { target: thisEN, type: 'press' }), this);
        }
    });

    this.$iconCtn = $('div.absol-exp-node-ext-icon', this);
    this.$extIcon = $('img.absol-exp-node-ext-icon', this);
    this.$name = $('span.absol-exp-node-name', this);
    this.$desc = $('span.absol-exp-node-desc', this);
    (0,_utils__WEBPACK_IMPORTED_MODULE_2__.contenteditableTextOnly)(this.$name, function (text) {
        return text.replace(/[\\\/\|\?\:\<\>\*\r\n]/, '').trim();
    });
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(thisEN, thisEN.$extIcon, 'extSrc', 'src');
    this._level = 0;
    this.__isExpNode__ = true;
    return thisEN;
}


ExpNode.tag = 'expnode';

ExpNode.render = function () {
    return _({
        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 (value) {
        if (this.$iconP) {
            this.$iconP.remove();
            this.$iconP = undefined;
        }
        if (value) {
            var newE;
            if (absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_5__/* ["default"].isDomNode */ .ZP.isDomNode(value)) {
                newE = value;
            }
            else {
                newE = _(value);
            }
            this.$iconP = newE;
            this.$iconCtn.addChild(newE);
            this._icon = value;
        }
        else {
            this._icon = undefined;
        }
    },
    get: function () {
        return this._icon;
    }
};

ExpNode.property.level = {
    set: function (value) {
        value = value || 0;
        if (value !== this.level) {
            this._level = value || 0;

            this.$level.innerHTML = '&nbsp;'.repeat(this._level * 6);
        }
    },
    get: function () {
        return this._level || 0;
    }
};


ExpNode.property.name = {
    set: function (value) {
        value = value + '';
        this._name = value;
        this.$name.clearChild();
        if (value && value.length > 0)
            this.$name.addChild(_({ text: value }));
    },
    get: function () {
        return this._name || '';
    }
};
ExpNode.property.desc = {
    set: function (value) {
        this._desc = (value || '') + '';
        this.$desc.clearChild();
        this.$desc.addChild(_({ text: this._desc }));
    },
    get: function () {
        return this._desc || '';
    }
};


ExpNode.property.status = {
    set: function (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 () {
        return this._status;
    }
}

ExpNode.property.active = {
    set: function (value) {
        if (value) {
            this.addClass('as-active');
            this.addClass('active');
        }
        else {
            this.removeClass('as-active');
            this.removeClass('active');
        }
    },
    get: function () {
        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);
        $(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 = $('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 = $('.absol-exp-items', thisET);
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$node, ['desc', 'name', 'title', 'extSrc', 'active', 'icon']);
    this.__isExpTree__ = true;
    this._level = 0;
}


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

ExpTree.render = function () {
    return _({
        class: 'absol-exp-tree',
        extendEvent: ['press', 'pressremove', 'statuschange'],
        child: [
            'expnode',
            '.absol-exp-items'
        ]
    });
};

ExpTree.property = {};

ExpTree.property.level = {
    set: function (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 () {
        return this.$node.level;
    }
};


ExpTree.property.status = {
    set: function (value) {
        this.$node.status = value;
        if (value != 'open') {
            this.addClass('hide-children');
        }
        else {
            this.removeClass('hide-children');
        }
    },
    get: function () {
        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 _('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;
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(ExpNode);
_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(ExpTree);
_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(ExpGroup);


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExpTree);


/**
 *
 * @param {ExpTree|AElement} elt
 * @param {{inputElt: SearchTextInput}=} opt
 * @constructor
 */
function ExpSearcher(elt, opt) {
    this.elt = elt;
    this.cache = {};
    this.prevHash = null;
    this.searching = false;
    this.state = {};
    this.ev_stopTyping = this.ev_stopTyping.bind(this);
    this.inputElt = opt && opt.inputElt;
}

ExpSearcher.prototype.reset = function () {
    if (!this.searching) return;
    this.cache = {};
    this.searching = false;
    this.elt.removeClass('as-searching')

    var visit = treeNode => {
        treeNode.removeClass('as-in-search-result').removeStyle('order');
        if (this.state[treeNode.id]) {
            if (treeNode.status === 'open' || treeNode.status === 'close' && this.state[treeNode.id] !== 'none') {
                treeNode.status = this.state[treeNode.id];
            }
        }
        this.getChildrenOf(treeNode).forEach(c => visit(c));
    }
    visit(this.elt);
};


ExpSearcher.prototype.backupState = function () {
    this.state = {};
    var visit = treeNode => {
        if (!treeNode.id) treeNode.id = (0,absol_src_String_stringGenerate__WEBPACK_IMPORTED_MODULE_7__.randomIdent)(5);
        this.state[treeNode.id] = treeNode.status;
        this.getChildrenOf(treeNode).forEach(c => visit(c));
    }
    visit(this.elt);

};

/**
 *
 * @param {ExpTree|AElement} nd
 * @returns {Array<ExpTree|AElement>}
 */
ExpSearcher.prototype.getChildrenOf = function (nd) {
    if (nd.getChildren) return nd.getChildren();
    return Array.prototype.slice.call(nd.childNodes);
};


/**
 *
 * @param {ExpTree|AElement} nd
 * @returns {ExpTree|AElement}
 */
ExpSearcher.prototype.getParentOf = function (nd) {
    if (nd.getParent) return nd.getParent();
    return nd.parentElement;
};


ExpSearcher.prototype.query = function (text) {
    text = text || '';
    text = text.trim();
    if (text.length === 0) {
        this.reset();
        return;
    }
    if (!this.searching) {
        this.backupState();
        this.searching = true;
    }

    var newHash = 0;
    var makeItem = treeNode => {
        if (!treeNode.id) treeNode.id = (0,absol_src_String_stringGenerate__WEBPACK_IMPORTED_MODULE_7__.randomIdent)(5);
        if (!treeNode.__searchItem__) {
            treeNode.__searchItem__ = {
                text: treeNode.name.replace(/[_-]/g, ' '),
                value: treeNode.id
            };
            (0,_list_search__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .ZP)(treeNode.__searchItem__);
        }
        var item = treeNode.__searchItem__;
        newHash = (0,absol_src_String_stringUtils__WEBPACK_IMPORTED_MODULE_9__/* .stringHashCode */ .$)(newHash + item.text);

        var children = this.getChildrenOf(treeNode);
        if (children.length > 0) {
            item.items = children.map(c => makeItem(c));
        }
        else {
            delete item.items;
        }
        return item;
    }
    var items = [makeItem(this.elt)];
    if (newHash !== this.prevHash) {
        this.prevHash = newHash;
        this.cache = {};
    }
    var searchRes = this.cache[text] || (0,_list_search__WEBPACK_IMPORTED_MODULE_8__/* .searchTreeListByText */ .$l)(text, items);

    var dict = searchRes.reduce(function cb(ac, cr, i) {
        ac[cr.value] = i;
        if (cr.items) cr.items.reduce(cb, ac);
        return ac;
    }, {});

    var visit = treeNode => {
        if (treeNode.id in dict) {
            treeNode.addClass('as-in-search-result').addStyle('order', dict[treeNode.id]);

        }
        else {
            treeNode.removeClass('as-in-search-result').removeStyle('order');
        }
        this.getChildrenOf(treeNode).forEach(c => visit(c));
    };
    visit(this.elt);
    this.elt.addClass('as-searching');
};

ExpSearcher.prototype.ev_stopTyping = function () {
    this.query(this.inputElt.value);
};

ExpSearcher.prototype.destroy = function () {
    this.inputElt = null;
    this.query('');
}

Object.defineProperty(ExpSearcher.prototype, 'inputElt', {
    set: function (elt) {
        if (this._inputElt) {
            this._inputElt.off('stoptyping', this.ev_stopTyping);
            this._inputElt = null;
        }
        if (elt) {
            this._inputElt = elt;
            elt.on('stoptyping', this.ev_stopTyping);
        }
    },
    get: function () {
        return this._inputElt;
    }
})

/***/ }),

/***/ 3929:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_flexiconbutton_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(279);
/* harmony import */ var _css_flexiconbutton_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_flexiconbutton_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7951);




var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

/**
 * @extends AElement
 * @constructor
 */
function FlexiconButton() {
    this._icon = null;
    this.$content = $('.as-flexicon-button-content', this);
    this.$iconCtn = $('.as-flexicon-button-icon-container', this);
    this.$textCtn = $('.as-flexicon-button-text-container', this);
}

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

FlexiconButton.render = function () {
    return _({
        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 (value) {
        value = value || null;
        this._icon = value;
        this.$iconCtn.clearChild();
        if (value !== null) {
            this.$iconCtn.addChild(_(value));
        }
    },
    get: function () {
        return this._icon;
    }
};

FlexiconButton.property.text = {
    /***
     *
     * @param {string| {mlKey:string}|*} value
     */
    set: function (value) {
        value = value || null;
        this._text = value;
        this.$textCtn.clearChild();
        this.$textCtn.attr('data-ml-key', undefined);
        if (value === null || value === undefined) {

        }
        else if (typeof value === "object") {
            if (value.mlKey) {
                this.$textCtn.attr('data-ml-key', value.mlKey);
            }
        }
        else {
            this.$textCtn.addChild(_({ text: value + '' }));
        }
    },
    get: function () {
        return this._text;
    }
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(FlexiconButton);


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FlexiconButton);

/***/ }),

/***/ 7094:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_follower_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1415);
/* harmony import */ var _css_follower_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_follower_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6628);
/* harmony import */ var absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2759);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7951);
/* harmony import */ var absol_src_HTML5_AttachHook__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5675);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1477);









var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


/***
 * @extends AElement
 * @constructor
 */
function Follower() {
    this.$attachhook = _('attachhook', this)
        .addTo(this)
        .on('attached', function () {
            this.requestUpdateSize();
            absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].addToResizeSystem */ .ZP.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()) {
            elt.cancelWaiting();
        }
    });
};

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

Follower.tag = 'Follower'.toLowerCase();
Follower.render = function () {
    return _('.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();
    });
    return this;
};


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);
    if (!this.$followTarget) return;// target is removed
    var targetBound = this.$followTarget.getBoundingClientRect();
    var screenSize = absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].getScreenSize */ .ZP.getScreenSize();
    var outRect = new absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(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 absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z(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) {
        (0,_utils__WEBPACK_IMPORTED_MODULE_6__.revokeResource)(this.lastChild);
        this.removeChild(this.lastChild);
    }
};

Follower.property = {};

Follower.property.followTarget = {
    set: function (elt) {
        if (elt === null || elt === undefined || !elt) {
            this.unfollow();
            this.$followTarget = undefined;
            return;
        }
        else if (typeof elt == 'string') {
            elt = $(elt) || document.getElementById(elt);
        }

        if (absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].isDomNode */ .ZP.isDomNode(elt)) {
            this.$followTarget = elt;
            this._lastAnchor = undefined;
            this.refollow();
        }
        else throw new Error("Invalid element");
    },
    get: function () {
        return this.$followTarget;
    }
}

Follower.property.anchor = {
    set: function (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 () {
        return this._anchor;
    }
}


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(Follower);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Follower);

/***/ }),

/***/ 655:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_hanger_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8859);
/* harmony import */ var _css_hanger_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_hanger_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(557);
/* harmony import */ var absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9399);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(863);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7951);







var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

/****
 * @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 _('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], absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_3__/* ["default"].supportPassiveEvent */ .Z.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], absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_3__/* ["default"].supportPassiveEvent */ .Z.supportPassiveEvent ? { passive: false } : true);
    }
};


Hanger.property = {};

/**
 * @type {Hanger}
 */
Hanger.property.hangOn = {
    set: function (value) {
        if (!(value > 0)) value = 0;
        this._hangOn = value;
    },
    get: function () {
        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 absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(touch.clientX, touch.clientY);
    }
    else {
        startingPoint = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(event.clientX, event.clientY);
        target = event.target;
    }
    var offsetVec = startingPoint.sub(new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(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 () {
            this.canceled = true;
        },
        clientX: startingPoint.x,
        clientY: startingPoint.y,
        target: target,
        preventDefault: function () {
            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 pointerData = this._hangerPointerData;
    var isTouch = pointerData.isTouch;
    var pointerIdent = -2;
    var currentPoint;
    if (isTouch) {
        var touch = (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* .findChangedTouchByIdent */ .VY)(event, pointerData.pointerIdent);
        if (touch) {
            pointerIdent = touch.identifier;
            currentPoint = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(touch.clientX, touch.clientY);
        }
    }
    else {
        currentPoint = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(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 () {
                    event.preventDefault();
                }
            };

            pointerData.trackedScrollers = (() => {
                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 () {
                event.preventDefault();
            }
        };
        this.emit('drag', dragEvent, this);
    }
};

Hanger.eventHandler.hangerPointerFinish = function (event) {
    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 = (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* .findChangedTouchByIdent */ .VY)(event, pointerData.pointerIdent);
        if (touch) {
            pointerIdent = touch.identifier;
            currentPoint = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(touch.clientX, touch.clientY);
        }
    }
    else {
        currentPoint = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z(event.clientX, event.clientY);
        pointerIdent = -1;
    }
    if (pointerIdent !== pointerData.pointerIdent) return;
    if (pointerData.state === 1) {
        pointerData.trackedScrollers.forEach(elt => elt.removeEventListener('scroll', this.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 () {
                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 () {
            // event.preventDefault();
        }
    };
    this.emit('drag', dragEvent, this);
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(Hanger);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Hanger);


/***/ }),

/***/ 2380:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Ty": () => (/* binding */ EmojiMutedIcon),
  "Tj": () => (/* binding */ FontColorIcon),
  "Bm": () => (/* binding */ ImportantOutlineIcon),
  "CY": () => (/* binding */ MdiStoreMarkerOutline),
  "V4": () => (/* binding */ ProcedureOutlineIcon),
  "Vt": () => (/* binding */ ProcessOutlineIcon),
  "i_": () => (/* binding */ SpinnerIco)
});

// UNUSED EXPORTS: CityIcon, ConfigurationFormOutlineIcon, CountryIcon, DataTypeConfiguratorOutlineIcon, FunctionManagerIcon, InputFormOutlineIcon, InsertColLeftIcon, InsertColRightIcon, MobileFormEditOutlineIcon, MobileInputFormOutlineIcon, MobileOutputFormOutlineIcon, OutputFormOutlineIcon, TemplateIcon, TimeBasedPayrollReportIcon, WindowsFormEditOutlineIcon

// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(3855);
;// 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>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/process_outline.tpl
/* harmony default export */ const process_outline = ("<svg class=\"process-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\">\r\n<path style=\"stroke:none;fill:currentColor\" d=\"M12,15.9h-.4c-2.2,0-4-1.8-4-4s1.8-4,4-4,4.2,1.9,4,4.4c-1.7.6-3,1.9-3.6,3.6M13.6,11.9c0-1.1-.9-2-2-2s-2,.9-2,2,.9,2,2,2,2-.9,2-2M22.6,19.3c0,0,.1.2,0,.3l-1,1.8c0,0-.2.1-.3,0l-1.2-.5c-.3.2-.6.4-.9.5l-.2,1.3c0,.1-.1.2-.2.2h-2.1c-.1,0-.2,0-.2-.2l-.2-1.3c-.3-.1-.7-.3-.9-.6l-1.2.5c0,0-.2,0-.3,0l-1-1.8c0,0,0-.2,0-.3l1.1-.8c0-.2,0-.3,0-.5s0-.4,0-.6l-1-.8c0,0-.1-.2,0-.3l1.1-1.8c0,0,.2-.1.3,0l1.2.5h0c.3-.2.5-.4.9-.5h0s.2-1.3.2-1.3c0-.1.1-.2.2-.2h2.1c.1,0,.2,0,.2.2l.2,1.3h0c.3.1.6.3.9.5h0s1.2-.5,1.2-.5c0,0,.2,0,.3,0l1,1.8c0,0,0,.2,0,.3l-1.1.8h0c0,.2,0,.4,0,.5s0,.3,0,.5h0s1.1.8,1.1.8ZM17.8,16.5c-.8,0-1.5.7-1.5,1.5s.7,1.5,1.5,1.5,1.5-.7,1.5-1.5-.7-1.5-1.5-1.5ZM21.4,8.7l-2-3.5c-.1-.2-.4-.2-.6-.2l-2.5,1c-.5-.4-1.1-.8-1.7-1l-.4-2.7c0-.2-.3-.4-.5-.4h-4c-.3,0-.5.2-.5.4l-.4,2.7c-.6.3-1.2.6-1.7,1l-2.5-1c-.2,0-.5,0-.6.2l-2,3.5c0,.2,0,.5,0,.6l2.1,1.6v2l-2.1,1.7c0,.1-.2.4,0,.6l2,3.5c0,.2.4.2.6.2l2.5-1c.5.4,1.1.8,1.7,1l.4,2.6c0,.2.3.4.5.4h3.4c-.5-.6-.8-1.1-1.1-1.9h-1.1l-.4-2.6c-1.2-.3-2.2-.9-3-1.8l-2.4,1-.8-1.3,2.1-1.6c-.4-1.2-.4-2.4,0-3.6l-2.1-1.6.8-1.3,2.4,1c.7-.9,1.8-1.6,3-1.8l.4-2.6h1.5l.4,2.6c1.2.3,2.2.9,3,1.8l2.4-1,.8,1.3-2.1,1.6c.2.6.3,1.2.3,1.8h.5c.5,0,1,0,1.5.2v-1.2l2.1-1.6c.1,0,.2-.4.1-.6Z\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/procedure_outline.tpl
/* harmony default export */ const procedure_outline = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<path d=\"M183.9,209.9h-72.5l35.9-89.9L111.4,30h72.5l35.9,89.9-35.9,89.9ZM140.9,189.9h29.4l27.9-69.9-27.9-69.9h-29.4l27.9,69.9-27.9,69.9ZM89.8,209.9H17.3l35.9-89.9L17.3,30h72.5l35.9,89.9-35.9,89.9ZM46.8,189.9h29.4l27.9-69.9-27.9-69.9h-29.4l27.9,69.9-27.9,69.9Z\" style=\"stroke:none;fill:currentColor\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/mobile_form_edit_outline.tpl
/* harmony default export */ const mobile_form_edit_outline = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<path d=\"M225.5,147.3l-12.8-12.8c-1.9-1.9-5.1-1.9-7,0l-9.5,9.5,19.8,19.8,9.5-9.5c1.9-1.8,1.9-5,0-7h0ZM209.2,170.6l-39.4,39.4-20,20h-19.8v-19.8l.2-.2,19.6-19.6,39.6-39.6,10.5,10.6,9.2,9.3ZM160,20H60c-11-.1-20,8.8-20,19.9v159.9c0,11,8.9,20,20,20h40c0,0,0-29.7,0-29.7h-40V49.9l100,.2v69.7h20c0,0,0-79.7,0-79.7,0-11-8.9-20-20-20ZM65,39.7c-2.8,0-5-2.2-5-5s2.2-5,5-5,5,2.2,5,5-2.2,5-5,5ZM140,34.6c0,2.8-2.3,5.1-5.1,5.1h-49.9c-2.8,0-5.1-2.3-5.1-5.1v-5.1h60v5.1ZM120,169.9\" style=\"stroke:none;fill:currentColor\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/windows_form_edit_outline.tpl
/* harmony default export */ const windows_form_edit_outline = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<path d=\"M225.5,144.3l-9.5,9.5-19.8-19.8,9.5-9.5c1.8-1.9,5-1.9,7,0l12.8,12.8c1.9,1.9,1.9,5.1,0,7ZM60,180.4h50v19.6H40c-11,0-20-9-20-20V49.9c0-11,9-20,20-20h160c11,0,20,9,20,20v60h-20v-40H40v90.5c0,11,9,20,20,20ZM170,50c0,5.5,4.5,10,10,10s10-4.5,10-10-4.5-10-10-10-10,4.5-10,10ZM140,50c0,5.5,4.5,10,10,10s10-4.5,10-10-4.5-10-10-10-10,4.5-10,10ZM110,50c0,5.5,4.5,10,10,10s10-4.5,10-10-4.5-10-10-10-10,4.5-10,10ZM189.5,140.8l-39.6,39.6-19.6,19.6-.2.2v19.8h19.8l20-20,39.4-39.4-9.2-9.3-10.5-10.6Z\" style=\"stroke:none;fill:currentColor\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/input_form_outline.tpl
/* harmony default export */ const input_form_outline = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<path d=\"M200,19.9H40c-11,0-20,9-20,20v160.1c0,11,9,20,20,20h90v-20.1H40v-110.1h160v110.1h-10v20.1h10c11,0,20-9,20-20V39.9c0-11-9-20-20-20ZM200,70H40v-30.1h160v30.1ZM140,139.9h40v10.1h-10v70h10v9.9h-40v-9.9h10v-70h-10v-10.1Z\" style=\"stroke:none;fill:currentColor\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/output_form_outline.tpl
/* harmony default export */ const output_form_outline = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<path d=\"M200,19.6H40c-11,0-20,8.9-20,20v160.1c0,11,9,20,20,20h89.6c-8.7-5.1-16.2-12-22.2-20.1H40v-110.1h160v66.7c7.4,3.6,14.2,8.5,20,14.3V39.6c0-11.1-9-20-20-20ZM200,69.7H40v-30.1h160v30.1ZM167.4,158.6c-21.8,0-40.7,12.5-50,30.7,9.3,18.2,28.2,30.7,50,30.7s40.7-12.5,50-30.7c-9.3-18.2-28.2-30.7-50-30.7ZM167.4,208c-10.3,0-18.7-8.4-18.7-18.7s8.4-18.7,18.7-18.7,18.7,8.4,18.7,18.7-8.4,18.7-18.7,18.7ZM176.2,189.3c0,4.8-3.9,8.7-8.7,8.7s-8.7-3.9-8.7-8.7,3.9-8.7,8.7-8.7,8.7,3.9,8.7,8.7Z\" style=\"stroke:none;fill:currentColor\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/template.tpl
/* harmony default export */ const template = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<path d=\"M200.1,20H39.9c-11,0-19.9,8.9-19.9,19.9v160.2c0,11,8.9,19.9,19.9,19.9h160.1c11,0,19.9-8.9,19.9-19.9V39.9c0-11-8.9-19.9-19.9-19.9ZM120,190c0,5.5-4.5,10-10,10h-60c-5.5,0-10-4.5-10-10v-80c0-5.5,4.5-10,10-10h60c5.5,0,10,4.5,10,10v80ZM200,190c0,5.5-4.5,10-10,10h-50c-5.5,0-10-4.5-10-10v-30c0-5.5,4.5-10,10-10h50c5.5,0,10,4.5,10,10v30ZM200,130c0,5.5-4.5,10-10,10h-50c-5.5,0-10-4.5-10-10v-20c0-5.5,4.5-10,10-10h50c5.5,0,10,4.5,10,10v20ZM200,80c0,5.5-4.5,10-10,10H50c-5.5,0-10-4.5-10-10v-30c0-5.5,4.5-10,10-10h140c5.5,0,10,4.5,10,10v30Z\" style=\"stroke:none;fill:currentColor\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/mobile_input_form_outline.tpl
/* harmony default export */ const mobile_input_form_outline = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<polygon xmlns=\"http://www.w3.org/2000/svg\" points=\"190 130 190 119.9 150 119.9 150 130 160 130 160 200 150 200 150 209.9 190 209.9 190 200 180 200 180 130 190 130\" style=\"fill:currentColor; stroke: none\"/>\r\n<path xmlns=\"http://www.w3.org/2000/svg\" d=\"M60,180V39.9l100,.2v69.7h20c0,0,0-79.7,0-79.7,0-11-8.9-20-20-20H60c-11-.1-20,8.8-20,19.9v159.9c0,11,8.9,20,20,20h40c0,0,40,0,40,0v-29.8H60ZM80,20h60v5.1c0,2.8-2.3,5.1-5.1,5.1h-49.9c-2.8,0-5.1-2.3-5.1-5.1v-5.1ZM65,20c2.8,0,5,2.2,5,5s-2.2,5-5,5-5-2.2-5-5,2.2-5,5-5Z\" style=\"fill:currentColor; stroke: none\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/mobile_output_form_outline.tpl
/* harmony default export */ const mobile_output_form_outline = ("<svg class=\"procedure-outline-icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24px\" height=\"24px\">\r\n<path d=\"M160,20.3H60c-11-.1-20,8.8-20,19.9v159.9c0,11,8.9,20,20,20h40c0,0,22.9,0,22.9,0-12.1-7-22.1-17.4-28.7-29.8h-34.3V50.1l100,.2v98.3c6.9,0,13.6,1,20,2.7V40.3c0-11-8.9-20-20-20ZM65,40.2c-2.8,0-5-2.2-5-5s2.2-5,5-5,5,2.2,5,5-2.2,5-5,5ZM140,35.3c0,2.8-2.3,5.1-5.1,5.1h-49.9c-2.8,0-5.1-2.3-5.1-5.1v-5.1h60v5.1ZM160,158.6c-21.8,0-40.7,12.5-50,30.7,9.3,18.2,28.2,30.7,50,30.7s40.7-12.5,50-30.7c-9.3-18.2-28.2-30.7-50-30.7ZM160,208c-10.3,0-18.7-8.4-18.7-18.7s8.4-18.7,18.7-18.7,18.7,8.4,18.7,18.7-8.4,18.7-18.7,18.7ZM160,180.6c-4.8,0-8.7,3.9-8.7,8.7s3.9,8.7,8.7,8.7,8.7-3.9,8.7-8.7-3.9-8.7-8.7-8.7Z\" style=\"fill:currentColor; stroke: none\"/></svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/city.tpl
/* harmony default export */ const city = ("<svg id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24\" height=\"24\" >\r\n<path style=\"fill:currentColor\" d=\"M172.4,229.7c-4.3,0-11.8-1.9-33.7-14.3-3.8-2.1-8.7-1.4-11.6,1.9-7.5,8.3-12.3,11.7-17.4,12.3-5.5.6-10.2-1.5-15.2-3.8-4.1-1.9-8.8-4-15.3-5.4-1.6-.4-3.3-.6-4.8-.9-15.8-2.8-27.6-7.3-36.2-39.7-2.1-7.8-5.2-9.3-10.5-11.9-4.9-2.4-11.5-5.7-15-14.2-3.1-7.6-2.9-18,.5-33.6,8.2-37,29.3-38.6,39.4-39.3.2,0,.4,0,.6,0-.7-10,1.5-17.4,6.6-22.2,5.1-4.8,11.1-5,13.7-4.8h31.6l23.1-8.9c2.3-.9,4.1-2.6,5.1-4.8l1.4-3.1c4.7-10.2,15.1-16.9,26.4-16.9h5.9l28.4,7.7c12.3,3.3,21.1,14.6,21.4,27.3l.4,20.6c0,3.1-.4,6.2-1.3,9.2l-6.3,20.3c-.8,2.6-.4,5.3,1,7.6l4.9,7.8c5.5,8.9,5.8,20.1.8,29.3l-17,30.7c-1.4,2.5-1.5,5.4-.4,8,5.4,12.9.8,27.8-10.9,35.4-5.5,3.6-10,5.4-14.1,5.7-.4,0-.9,0-1.4,0ZM172.9,210.1h0ZM108,210h0ZM134.2,194.6c4.9,0,9.8,1.2,14.2,3.7,16.4,9.3,22.5,11.2,24.1,11.6.6-.2,2.2-.8,4.8-2.6,3.7-2.4,5.1-7.1,3.4-11.3-3.4-8.2-2.9-17.4,1.4-25.1l17-30.7c1.6-2.9,1.5-6.5-.2-9.3l-4.9-7.8c-4.5-7.1-5.6-15.9-3.1-23.9l6.3-20.3c.3-1,.4-1.9.4-2.9l-.4-20.6c0-4.1-2.9-7.7-6.9-8.7l-25.9-7h-3.3c-3.7,0-7,2.1-8.5,5.4l-1.4,3.1c-3.2,6.9-8.8,12.2-15.9,14.9l-26.5,10.2h-35.6c-.3,1.1-.6,3.4-.2,7.3.6,5.6-.5,10.2-3.4,13.6-4.3,5.2-10.5,5.7-15.5,6-8.6.6-16.7,1.3-21.7,24-3.2,14.5-2.3,20-1.5,22,.5,1.3,1.4,1.9,5.5,4,6.5,3.2,16.4,8.1,20.8,24.5,3,11.1,6.2,18.3,9.7,21.5,2.4,2.2,5.3,2.8,11,3.8,1.8.3,3.6.6,5.6,1.1,8.5,1.9,14.7,4.6,19.2,6.7,1.4.6,3.1,1.4,4.3,1.8,1-.8,2.8-2.5,5.6-5.6,5.6-6.2,13.6-9.6,21.7-9.6ZM53.4,83.8h0ZM71.3,73.3s0,0,0,0h0Z\"/>\r\n<circle style=\"fill:currentColor\" cx=\"143.5\" cy=\"150\" r=\"19.9\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/country.tpl
/* harmony default export */ const country = ("<svg id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\" width=\"24\" height=\"24\" >\r\n<path d=\"M173.4,159.1c0,11-8.9,19.9-19.9,19.9s-19.9-8.9-19.9-19.9,8.9-19.9,19.9-19.9,19.9,8.9,19.9,19.9ZM201.4,174c-1.3,2.4-1.5,5.2-.4,7.8,5.2,12.5.8,26.9-10.5,34.2-5.3,3.4-9.7,5.2-13.7,5.6-.4,0-.9,0-1.4,0-4.2,0-11.5-1.8-32.6-13.8-3.7-2.1-8.4-1.3-11.2,1.8-7.2,8-11.9,11.3-16.8,11.9-5.3.6-9.9-1.5-14.7-3.6-4-1.8-8.5-3.8-14.9-5.2-1.6-.3-3.1-.6-4.7-.9-15.3-2.7-26.7-7.1-35.1-38.4-2-7.5-5.1-9-10.1-11.5-4.7-2.3-11.2-5.5-14.5-13.8-3-7.4-2.8-17.4.5-32.5,7.9-35.8,28.3-37.3,38.1-38.1.2,0,.4,0,.6,0-.7-9.6,1.4-16.9,6.4-21.5,5-4.7,10.7-4.8,13.3-4.6h30.6l22.4-8.6c2.2-.8,4-2.5,5-4.6l1.4-3c4.6-9.9,14.6-16.3,25.5-16.3h5.7l27.5,7.5c12,3.2,20.5,14.1,20.7,26.4l.4,20c0,3-.4,6-1.3,8.9l-6.1,19.7c-.8,2.5-.4,5.2.9,7.4l4.7,7.5c5.4,8.6,5.7,19.5.8,28.3l-16.4,29.7ZM173.4,159.1c0-11-8.9-19.9-19.9-19.9s-19.9,8.9-19.9,19.9,8.9,19.9,19.9,19.9,19.9-8.9,19.9-19.9ZM153.4,139.2c-11,0-19.9,8.9-19.9,19.9s8.9,19.9,19.9,19.9,19.9-8.9,19.9-19.9-8.9-19.9-19.9-19.9Z\" style=\"fill:currentColor\"/>\r\n</svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/configuration_form_outline.tpl
/* harmony default export */ const configuration_form_outline = ("<svg id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 240 240\"><path style=\"fill:currentColor\" d=\"M200,20.1H40c-11,0-20,8.9-20,20v160.1c0,11,9,20,20,20h80.8c-5.6-5.8-10.1-12.6-13.2-20.1H40v-110.1h160v31.9c8.1,5,14.9,11.8,20,19.8V40.1c0-11.1-9-20-20-20ZM200,70.3H40v-30.1h160v30.1ZM216.6,189.7l-11.2-8.9c0-1.3.2-2.7.2-4,0-2.1,0-4.2-.3-6.3l11.1-8.8c.5-.9,1.3-2.3.7-3.2l-10.7-18.2c-.3-.2-.7-.4-1-.6-.7-.4-1.4-.8-1.7-1l-12.8,5.4-9.1-5.2-2.3-14c-.3-.2-.8-1-1.5-1.4,0,0,0,0,0,0-.3-.2-.7-.3-1.1-.2,0,0,0,0,0,0h-10.2s-10.4,0-10.4,0c-1.6,0-2.6,1-2.6,2.1l-2.1,14.2c-3.1,1.6-6.3,3.1-8.9,5.2l-13.1-5.2c-1.1,0-2.6,0-3.2,1l-10.5,18.4v3.2l11,8.4v10.5l-11,8.9c0,.5-1.1,2.1,0,3.2l10.5,18.4c0,1,2.1,1,3.2,1l13.1-5.2c2.6,2.1,5.8,4.2,8.9,5.2l2.1,13.7c0,1,1.6,2.1,2.6,2.1h20.7c1.2,0,2-1.3,2.5-2.2l2-14c3.1-1.2,6.5-2.9,9-5.1l13.3,5.2c.9.5,2.6-.3,3.1-1.2l10.4-18.1c.8-1.4.4-2.8-.5-3.3ZM201.4,200.3l-12.9-5c-4.5,4.7-9.8,7.6-16,8.9l-1.8,14.2h-8.4l-2.1-13.7c-6.3-1.6-11.6-4.7-15.8-9.5l-12.6,5.2-4.2-6.8,11-8.4c-2.1-6.3-2.1-12.6,0-18.9l-11-8.4,4.2-6.8,12.6,5.2c3.7-4.7,9.4-8.4,15.8-9.5l2.1-13.6h7.9l1.8,13.9c3.7.7,7,2,10,3.9,0,0,.1,0,.2.1,2.2,1.4,4.1,3.1,6,5.1,0,0,.1.2.2.2l12.4-5.2h.4c0-.1,3.6,6.4,3.6,6.4v.2c0,0,.2.2.2.2l-10.8,8.3c1.2,2.8,1.8,6,1.9,9.3,0,3-.4,6.1-1.5,9l10.8,8.6-3.9,6.8ZM181.1,175.9c0,8.1-6.6,14.7-14.7,14.7s-14.7-6.6-14.7-14.7,6.6-14.7,14.7-14.7,14.7,6.6,14.7,14.7Z\"/></svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/function_manager.tpl
/* harmony default export */ const function_manager = ("<svg id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 240 240\"><path style=\"fill:currentColor\" d=\"M116.4,119.8c0,.3,0,.6-.1.9-3.2,20.7-6.4,42.1-17.3,63.7-8.3,16.4-18.7,25-31,25.5-.4,0-.7,0-1.1,0-19.8,0-33.8-22-35.4-24.6-2.9-4.7-1.4-10.9,3.3-13.7,4.7-2.9,10.9-1.4,13.7,3.3,3.8,6.1,12.2,15,18.4,15s.2,0,.3,0c4.3-.2,9.3-5.4,13.9-14.5,9.1-18.1,12.3-37.1,15.1-55.6h-13.4c-7.1,0-12.9-5.8-12.9-12.9h0c0-7.1,5.8-12.9,12.9-12.9h17.8c3.6-17.2,9.3-34.3,21.6-50.1,16.9-21.7,30.6-22.7,39.1-19.8,11.7,4.1,19,18.2,18.8,36,0,5.5-4.5,9.9-10.1,9.9-5.5,0-9.9-4.6-9.9-10.1.1-9.6-3.1-16.1-5.4-16.9-1.3-.5-7.2,1-16.7,13.2-9,11.6-13.7,24.3-16.9,37.8h16.1c7.1,0,12.9,5.8,12.9,12.9h0c0,7.1-5.8,12.9-12.9,12.9h-20.7ZM181.7,174.2v3.5l6.7,4.9c.6.4.9,1.2.6,1.9v.5c-.1,0-.3,1.1-1,1.8l-7,12.6s-1.4.7-2.1,0l-8.4-3.5c-2.1,1.4-4.2,2.8-6.3,3.5l-1.4,9.1c0,.7-.7,1.4-1.4,1.4h-14.7c-.7,0-1.4,0-1.4-1.4l-1.4-9.1c-2.1-.7-4.9-2.1-6.3-4.2l-8.4,3.5h-2.1l-7-12.6v-2.1l7.7-5.6v-7.7l-7-5.6s-.7-1.4,0-2.1l7.7-12.6s1.4-.7,2.1,0l8.4,3.5c2.1-1.4,3.5-2.8,6.3-3.5l1.4-9.1c0-.7.7-1.4,1.4-1.4h14.7c.7,0,1.4,0,1.4,1.4l1.4,9.1c2.1.7,4.2,2.1,6.3,3.5l8.4-3.5h2.1l7,12.6v2.1l-7.7,5.6v3.5ZM164.9,175.6c0-5.6-4.9-10.5-10.5-10.5s-10.5,4.9-10.5,10.5,4.9,10.5,10.5,10.5,10.5-4.9,10.5-10.5Z\" /></svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/data_type_configuration_outline.tpl
/* harmony default export */ const data_type_configuration_outline = ("<svg id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\"  width=\"24\" height=\"24\"><path style=\"fill:currentColor\"  d=\"M110,110V20H20v90M40,90v-50h50v50M200,65c0,14-11,25-25,25s-25-11-25-25,11.1-25,25-25,25,11.1,25,25M65,140l-45,80h90M75.8,200h-21.6l10.8-19.2M220,65c0-25-20-45-45-45s-45,20-45,45,20,45,45,45,45-20,45-45M210.8,179.3v4l7.7,5.6c.7.5,1,1.4.7,2.2l-.2.5s-.2,1.3-1,2.1l-8,14.4s-1.6.8-2.4,0l-9.6-4c-2.4,1.6-4.8,3.2-7.2,4l-1.6,10.4c0,.8-.8,1.6-1.6,1.6h-16.8c-.8,0-1.6,0-1.6-1.6l-1.6-10.4c-2.4-.8-5.6-2.4-7.2-4.8l-9.6,4h-2.4l-8-14.4v-2.4l8.8-6.4v-8.8l-8-6.4s-.8-1.6,0-2.4l8.8-14.4s1.6-.8,2.4,0l9.6,4c2.4-1.6,4-3.2,7.2-4l1.6-10.4c0-.8.8-1.6,1.6-1.6h16.8c.8,0,1.6,0,1.6,1.6l1.6,10.4c2.4.8,4.8,2.4,7.2,4l9.6-4h2.4l8,14.4v2.4l-8.8,6.4v4ZM191.6,180.9c0-6.4-5.6-12-12-12s-12,5.6-12,12,5.6,12,12,12,12-5.6,12-12Z\" /></svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/time_based_payroll_report.tpl
/* harmony default export */ const time_based_payroll_report = ("<svg id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 240 240\"><path style=\"fill:currentColor\" d=\"M160.1,144.7c-6.2-2.8-13-4.3-20.2-4.4h-.2c-27.5,0-49.9,22.3-49.9,49.9s22.3,49.9,49.9,49.9,49.9-22.3,49.9-49.9-1.5-14-4.3-20.2c-5-11.2-14-20.3-25.2-25.3ZM153.9,215.1c-2.8,2.4-5.9,4-9.5,4.7v5.3h-10.1v-5c-2.7-.2-5.2-.7-7.4-1.4-5.1-1.6-7.6-4.1-7.6-7.5s.5-3.1,1.5-4.2c1-1.1,2.3-1.7,3.9-1.7s3.3.6,6.4,1.6c1.2.4,2.2.8,3.2,1,1.6.4,3,.6,4.1.6,2.6,0,4.6-.6,6-1.9,0,0,0,0,.1,0,1.5-1.3,2.2-3,2.2-5.1s-.8-2.7-2.3-3.8c-1.1-.8-2.7-1.6-4.7-2.2-2-.6-3.8-1.2-5.4-1.7-4.3-1.4-6.9-2.4-7.8-2.9-4.8-2.7-7.1-6.8-7.1-12.3s2-10,5.9-13.4c2.6-2.2,5.6-3.8,9-4.5v-5.3h10.1v5.1c1.7.3,3.4.7,5,1.3,4.2,1.5,6.3,3.7,6.3,6.5s-.5,3-1.5,4.2c-1,1.2-2.3,1.8-3.9,1.8s-2.3-.2-3.7-.7c-.8-.3-1.5-.5-2.2-.7-2.2-.7-3.9-1-5.1-1-1.9,0-3.4.4-4.8,1.3-.1,0-.2.2-.3.2-1.1.9-1.7,2.1-1.7,3.7s.5,2,1.7,2.8c1.2.9,3,1.7,5.4,2.5,1.7.5,3.3,1.1,4.7,1.6,4.1,1.4,6.9,2.6,8.5,3.6,4.8,3.1,7.1,7.7,7.1,13.8s-2,10.2-6.1,13.7ZM80.2,199.9c.8,7.1,3,13.9,6.2,20H30c-11,0-20-9-20-20V40.2c0-11,9-20,20-20h159.8c11,0,20,8.9,20,20v42.8c-5.2-1.6-10.8-2.5-16.6-2.5s-2.1,0-3.2,0v-20.6c0-11-9-20-20-20H50c-11,0-20,8.9-20,20v120c0,11,9,20,20,20h30.2ZM239.7,140.3c0,24.2-17.3,44.4-40.1,48.9-.1-6.9-1.4-13.4-3.6-19.6,13.6-2.8,23.9-14.9,23.9-29.4s-13.4-30-30-30-26.5,10.2-29.3,23.7c-6.1-2.3-12.7-3.6-19.5-3.7,4.6-22.8,24.8-39.9,48.9-39.9s49.9,22.3,49.9,49.9ZM199.7,158.1l-15-13.2,1.4-26.3c.1-2,1.8-3.6,3.8-3.6s3.6,1.5,3.8,3.5l1.5,22,10.1,12.2c1.3,1.6,1.1,3.9-.5,5.2h0c-1.4,1.3-3.5,1.2-4.9,0ZM159.8,90.3H49.8v-20h110v20ZM119.8,130.1H49.8v-20h70v20ZM49.8,160.1h20.1v20.1h-20.1v-20.1Z\"/></svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/important_outline.tpl
/* harmony default export */ const important_outline = ("<svg id=\"Layer_2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 240 240\"><circle cx=\"120\" cy=\"207.26325\" r=\"20.2697\" style=\"fill:none;stroke:currentColor;\" stroke-miterlimit=\"10\" stroke-width=\"20\"/><path  style=\"fill:none;stroke:currentColor;\"  d=\"M119.91441,162.875h-.00004c-10.3258,0-18.86289-8.04674-19.47299-18.3545l-6.17585-104.34288c-.87661-14.81057,10.89792-27.30262,25.73441-27.30262h.00005c14.85315,0,26.63372,12.51893,25.73189,27.34468l-6.3464,104.33265c-.6262,10.29447-9.15758,18.32267-19.47108,18.32267Z\"  stroke-miterlimit=\"10\" stroke-width=\"20\"/></svg>");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/emoji_muted.tpl
/* harmony default export */ const emoji_muted = ("<svg\n   width=\"24\"\n   height=\"24\"\n   viewBox=\"0 0 6.3499999 6.3500002\"\n   version=\"1.1\"\n   id=\"svg5\"\n   xmlns=\"http://www.w3.org/2000/svg\"\n   xmlns:svg=\"http://www.w3.org/2000/svg\">\n  <g\n     inkscape:label=\"Layer 1\"\n     inkscape:groupmode=\"layer\"\n     id=\"layer1\">\n    <path\n       id=\"path1315\"\n       style=\"fill:currentColor;fill-opacity:1;fill-rule:evenodd;stroke-width:0.1;stroke-linecap:square;stroke-linejoin:round;paint-order:markers stroke fill\"\n       transform=\"matrix(0.26458334,0,0,0.26458334,-1.3750001e-8,0.52916667)\"\n       d=\"m 21,10 a 9,9 0 0 1 -9,9 9,9 0 0 1 -9,-9 9,9 0 0 1 9,-9 9,9 0 0 1 9,9 z m 1.999999,-2e-7 A 10.999999,11 0 0 1 12,21 10.999999,11 0 0 1 0.99999998,9.9999998 10.999999,11 0 0 1 12,-0.99999996 10.999999,11 0 0 1 22.999999,9.9999998 Z\" />\n    <path\n       id=\"path1800\"\n       style=\"fill:currentColor;fill-rule:evenodd;stroke-width:0.1;stroke-linecap:square;stroke-linejoin:round;paint-order:markers stroke fill\"\n       transform=\"scale(0.26458334)\"\n       d=\"M 10,10 A 2,2 0 0 1 8,12 2,2 0 0 1 6,10 2,2 0 0 1 8,8 2,2 0 0 1 10,10 Z\" />\n    <path\n       id=\"path1802\"\n       style=\"fill:currentColor;fill-rule:evenodd;stroke-width:0.1;stroke-linecap:square;stroke-linejoin:round;paint-order:markers stroke fill\"\n       transform=\"matrix(0.26458334,0,0,0.26458334,-0.2645834,0)\"\n       d=\"m 19,10 a 2,2 0 0 1 -2,2 2,2 0 0 1 -2,-2 2,2 0 0 1 2,-2 2,2 0 0 1 2,2 z\" />\n  </g>\n</svg>\n");
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/icons.css
var icons = __webpack_require__(6734);
// EXTERNAL MODULE: ./node_modules/absol/src/Color/Color.js
var Color = __webpack_require__(257);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Icons.js


























function SpinnerIco() {
    return ACore/* default._ */.Z._(spinner);
}

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

ACore/* default.install */.Z.install(SpinnerIco);

function InsertColLeftIcon() {
    return ACore/* default._ */.Z._(insert_col_left);
}

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

ACore/* default.install */.Z.install(InsertColLeftIcon);

function InsertColRightIcon() {
    return ACore/* default._ */.Z._(insert_col_right);
}

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

ACore/* default.install */.Z.install(InsertColRightIcon);

function MdiStoreMarkerOutline() {
    return ACore/* default._ */.Z._(mdi_store_marker_outline);
}

MdiStoreMarkerOutline.tag = 'mdi-store-marker-outline';

ACore/* default.install */.Z.install(MdiStoreMarkerOutline);

function ProcessOutlineIcon() {
    return (0,ACore._)(process_outline);
}

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

ACore/* default.install */.Z.install(ProcessOutlineIcon);

function ProcedureOutlineIcon() {
    return (0,ACore._)(procedure_outline);
}

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

ACore/* default.install */.Z.install(ProcedureOutlineIcon);

function WindowsFormEditOutlineIcon() {
    return (0,ACore._)(windows_form_edit_outline);
}

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

ACore/* default.install */.Z.install(WindowsFormEditOutlineIcon);

function MobileFormEditOutlineIcon() {
    return (0,ACore._)(mobile_form_edit_outline);
}

MobileFormEditOutlineIcon.tag = 'MobileFormEditOutlineIcon'.toLowerCase();
ACore/* default.install */.Z.install(MobileFormEditOutlineIcon);

function TemplateIcon() {
    return (0,ACore._)(template);
}

TemplateIcon.tag = 'TemplateIcon'.toLowerCase();
ACore/* default.install */.Z.install(TemplateIcon);

function InputFormOutlineIcon() {
    return (0,ACore._)(input_form_outline);
}

InputFormOutlineIcon.tag = 'InputFormOutlineIcon'.toLowerCase();
ACore/* default.install */.Z.install(InputFormOutlineIcon);

function OutputFormOutlineIcon() {
    return (0,ACore._)(output_form_outline);
}

OutputFormOutlineIcon.tag = 'OutputFormOutlineIcon'.toLowerCase();
ACore/* default.install */.Z.install(OutputFormOutlineIcon);

function MobileInputFormOutlineIcon() {
    return (0,ACore._)(mobile_input_form_outline);
}

MobileInputFormOutlineIcon.tag = 'MobileInputFormOutlineIcon'.toLowerCase();
ACore/* default.install */.Z.install(MobileInputFormOutlineIcon);

function MobileOutputFormOutlineIcon() {
    return (0,ACore._)(mobile_output_form_outline);
}

function CityIcon() {
    return (0,ACore._)(city);
}

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

ACore/* default.install */.Z.install(CityIcon);

function CountryIcon() {
    return (0,ACore._)(country);
}

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

ACore/* default.install */.Z.install(CountryIcon);

MobileOutputFormOutlineIcon.tag = 'MobileOutputFormOutlineIcon'.toLowerCase();
ACore/* default.install */.Z.install(MobileOutputFormOutlineIcon);

function FontColorIcon() {
    this._value = '#000000';
    this.$contract = (0,ACore.$)('.as-font-color-contract', this);
    this.$value = (0,ACore.$)('.as-font-color-value', this);
    this.value = 'cyan';
}

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

FontColorIcon.render = function () {
    return (0,ACore._)(font_color);
};

FontColorIcon.property = {};
FontColorIcon.property.value = {
    set: function (value) {
        var cValue;
        if (typeof value === "string") {
            try {
                cValue = Color/* default.parse */.Z.parse(value);
                value = cValue.toString('hex6');
            } catch (err) {
                value = "#000000";
                cValue = Color/* default.parse */.Z.parse(value);
            }
        }
        else if (value instanceof Color/* default */.Z) {
            cValue = value;
            value = value.toString('hex6');
        }
        else {
            value = "#000000";
            cValue = Color/* default.parse */.Z.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 () {
        return this._value;
    }
};

function ConfigurationFormOutlineIcon() {
    return (0,ACore._)(configuration_form_outline);
}

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

ACore/* default.install */.Z.install(ConfigurationFormOutlineIcon);

function FunctionManagerIcon() {
    return (0,ACore._)(function_manager);
}

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

ACore/* default.install */.Z.install(FunctionManagerIcon);

function DataTypeConfiguratorOutlineIcon() {
    return (0,ACore._)(data_type_configuration_outline);
}

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

ACore/* default.install */.Z.install(DataTypeConfiguratorOutlineIcon);

function TimeBasedPayrollReportIcon() {
    return (0,ACore._)(time_based_payroll_report);
}

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

ACore/* default.install */.Z.install(TimeBasedPayrollReportIcon);

function ImportantOutlineIcon() {
    return (0,ACore._)(important_outline).addStyle({
        width: '1em', height: '1em'
    });
}

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


ACore/* default.install */.Z.install(ImportantOutlineIcon);

function EmojiMutedIcon(){
    return (0,ACore._)(emoji_muted);
}

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

ACore/* default.install */.Z.install(EmojiMutedIcon);


/***/ }),

/***/ 407:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "j2": () => (/* binding */ MenuButton),
/* harmony export */   "Lt": () => (/* binding */ Dropdown),
/* harmony export */   "KZ": () => (/* binding */ Dropright),
/* harmony export */   "ee": () => (/* binding */ VMenuLine),
/* harmony export */   "zV": () => (/* binding */ VMenuItem),
/* harmony export */   "T$": () => (/* binding */ VMenu),
/* harmony export */   "E": () => (/* binding */ HMenuItem),
/* harmony export */   "ch": () => (/* binding */ HMenu),
/* harmony export */   "p": () => (/* binding */ VRootMenu)
/* harmony export */ });
/* harmony import */ var _css_menu_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4286);
/* harmony import */ var _css_menu_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_menu_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3349);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(863);
/* harmony import */ var _tool_BlurTrigger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9346);
/* harmony import */ var absol_src_HTML5_ResizeSystem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6700);








var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

/***
 * @extends AElement
 * @constructor
 */
function MenuButton() {
    this.$text = $('.absol-vmenu-button-text', this);
    this.$key = $('.absol-vmenu-button-key', this);


    this.$arrow = $('.absol-vmenu-arrow', this);
    this.$iconCtn = $('.absol-vmenu-button-ext-icon-container', this);

    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$text, 'text', 'innerHTML');
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$key, 'key', 'innerHTML');
}

MenuButton.tag = 'menubutton';

MenuButton.render = function () {
    return _({
        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 (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 () {
        return this._extendClass || [];
    }
};


MenuButton.property.icon = {
    set: function (value) {
        this.$iconCtn.clearChild();
        this._icon = value;
        if (value) {
            _(value).addTo(this.$iconCtn);
        }
    },
    get: function () {
        return this._icon;
    }
};

MenuButton.property.iconSrc = {
    set: function (value) {
        if (value)
            this.icon = { tag: 'img', props: { src: value } };
        else
            this.icon = value;
    },
    get: function () {
        return this.icon && this.icon.props && this.icon.props.src;
    }
};


MenuButton.property.extendStyle = {
    set: function (value) {
        this.removeStyle(this._extendStyle || {});
        this._extendStyle = value || {};
        this.addStyle(this.extendStyle);
    },
    get: function () {
        return this._extendStyle || {};
    }
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(MenuButton);

/***
 *
 * @extends Follower
 * @constructor
 */
function Dropdown() {
    this.$container = $('.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 _({
        class: ['absol-drop-hidden', 'absol-dropdown'], child: 'follower.absol-dropdown-content.as-bscroller'
    });
};


Dropdown.property = {};
Dropdown.property.show = {
    set: function (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 () {
        return !this.hasClass('absol-drop-hidden');
    }
};

Dropdown.prototype.findAvailablePosition = function () {
    var outBound = absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].traceOutBoundingClientRect */ .ZP.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 = $('.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 _({
        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 _('<div class="absol-vmenu-line"><div></div></div>');
}

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

function VMenuItem() {
    var thisVM = this;

    this.$dropper = $('dropright', this);
    this.$vmenu = $('vmenu', this);
    this.$button = $('menubutton', this);

    this.$text = thisVM.$button.$text;

    this.$key = thisVM.$button.$key;
    this.$arrow = thisVM.$button.$arrow;
    this.$iconCtn = thisVM.$button.$iconCtn;


    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$button, ['text', 'extendClasses', 'extendStyle', 'key', 'icon', 'iconSrc']);
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$vmenu, ['activeTab']);

    this.eventHandler = absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].bindFunctions */ .ZP.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 _({
        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 = absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].copyEvent */ .ZP.copyEvent(event);
    this.emit('enter', newEvent, this);
};


VMenuItem.eventHandler.pressItem = function (event) {
    var newEvent = absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].copyEvent */ .ZP.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 = absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].copyEvent */ .ZP.copyEvent(event, { target: this });
    this.emit('press', newEvent, this);
};


VMenuItem.property = {};
VMenuItem.property.items = {
    set: function (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 () {
        return this.$vmenu.items;
    }
};

VMenuItem.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('absol-menu-item-disabled');
        }
        else {
            this.removeClass('absol-menu-item-disabled');
        }
    },
    get: function () {
        return this.hasClass('absol-menu-item-disabled');
    }
};

VMenuItem.property.hidden = {
    set: function (value) {
        if (value) {
            this.addClass('absol-menu-item-hidden');
        }
        else {
            this.removeClass('absol-menu-item-hidden');
        }
    },
    get: function () {
        return this.hasClass('absol-menu-item-hidden');
    }
};


/**
 * @extends AElement
 * @constructor
 */
function VMenu() {

}

VMenu.tag = 'vmenu';

VMenu.render = function () {
    return _({
        class: 'absol-vmenu',
        extendEvent: 'press'
    });
};


VMenu.property = {};
VMenu.property.activeTab = {
    set: function (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 () {
        return this._activeTab;
    }
};


VMenu.property.extendStyle = {
    set: function (value) {
        this.removeStyle(this._extendStyle || {});
        this._extendStyle = value || {};
        this.addStyle(this.extendStyle);
    },
    get: function () {
        return this._extendStyle || {};
    }
};


VMenu.property.extendClasses = {
    set: function (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 () {
        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', absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].copyEvent */ .ZP.copyEvent(event, { target: this }), this);
};


VMenu.property.items = {
    set: function (items) {
        this._childFromItems(items || []);
    },
    get: function () {
        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 = _('vmenuline');
        }
        else if ((0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* .isDomNode */ .mV)(item)) {
            itemElt = item;
        }
        else if (item.child || item.class || item.tag || item.style || typeof item === 'string') {
            itemElt = _(item);
        }
        else {
            itemElt = _({
                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 = $('vmenu', this);
    this.$dropDown = this;
    this.$button = $('button.absol-hmenu-button', this);
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$button, 'text', 'innerHTML');
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$vmenu, 'items');
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.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 _({
        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', absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].copyEvent */ .ZP.copyEvent(event, { target: this }), this);
};

HMenuItem.eventHandler.enterButton = function (event) {
    event.menuItem = this;
    this.emit('enter', absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].copyEvent */ .ZP.copyEvent(event, { target: this }), this);
};

HMenuItem.eventHandler.pressItem = function (event) {
    this.emit('press', absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].copyEvent */ .ZP.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 _({
        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 = _({
            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 (items) {
        this._childFromItems(items || []);
    },
    get: function () {
        return this.$items;
    }
};


HMenu.property.activeTab = {
    /***
     * @this HMenu
     * @param tabIndex
     */
    set: function (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__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z([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 () {
        return this._activeTab;
    }
};

/***
 * @extends AElement
 * @constructor
 */
function VRootMenu() {
    this._items = [];

    this.$attachhook = _({
        tag: 'attachhook',
        props: {
            prevWidth: 0,
            requestUpdateSize: () => {
                var newWidth = this.getBoundingClientRect().width;
                if (newWidth === this.$attachhook.prevWidth) return;
                this.$attachhook.prevWidth = newWidth;
                Array.prototype.forEach.call(this.childNodes, elt => {
                    if (elt.autoFixParentSize) {
                        elt.autoFixParentSize();
                    }
                });
            }
        },
        on: {
            attached: () => {
                absol_src_HTML5_ResizeSystem__WEBPACK_IMPORTED_MODULE_6__/* ["default"].add */ .Z.add(this.$attachhook);
                this.$attachhook.requestUpdateSize();
            }
        }
    }).addTo(this);
    this.items = [];
}

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

VRootMenu.render = function () {
    return _({
        class: ['as-v-root-menu'],
        extendEvent: ['press', 'enter', 'activetab', 'cancel']
    });
};


VRootMenu.prototype._childFromItems = function (items) {
    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 = _('vmenuline');
        }
        else if ((0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* .isDomNode */ .mV)(item)) {
            itemElt = item;
        }
        else if (item.child || item.class || item.tag || item.style || typeof item === 'string') {
            itemElt = _(item);
        }
        else {
            itemElt = _({
                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();
    (0,_ACore__WEBPACK_IMPORTED_MODULE_1__.$$)('img', this).filter(x => !!x.getAttribute('src') && !x.classList.contains('absol-vmenu-button-icon')).forEach(elt => {
        (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* .waitImageLoaded */ .Lp)(elt).then(() => this.$attachhook.requestUpdateSize());
    });
};

VRootMenu.property = Object.assign({}, HMenu.property);

VRootMenu.eventHandler = Object.assign({}, HMenu.eventHandler);


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install([HMenu, VMenuItem, VMenu, Dropright, VMenuLine, Dropdown, HMenuItem, VRootMenu]);

/***/ }),

/***/ 3488:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var _FlexiconButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3929);
/* harmony import */ var _css_messagedialog_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3163);
/* harmony import */ var _css_messagedialog_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_css_messagedialog_css__WEBPACK_IMPORTED_MODULE_2__);




/***
 * @extends AElement
 * @constructor
 */
function MessageDialog() {
    this.$header = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-message-dialog-header', this);
    this.$title = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        tag: 'span',
        class: 'as-message-dialog-title',
        child: { text: '' }
    });
    this.$body = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-message-dialog-body', this);
    this.$footer = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-message-dialog-footer', this);
    this.$actionBtns = [];
}


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


MessageDialog.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        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(key => {
    MessageDialog.prototype[key] = function () {
        this.$body[key].apply(this.$body, arguments);
        return this;
    };
});


MessageDialog.prototype._makeActionBtn = function (action) {
    var button =  (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        tag: _FlexiconButton__WEBPACK_IMPORTED_MODULE_1__/* ["default"].tag */ .Z.tag,
        class: action.class || [],
        props: {
            text: action.text || action.name,
            icon: action.icon || null
        },
        on: {
            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 (actions) {
        this._actions = actions || [];
        this.$actionBtns.forEach(button => button.remove());
        this.$actionBtns = this._actions.map(action => this._makeActionBtn(action));
        this.$footer.addChild(this.$actionBtns);
    },
    get: function () {
        return this._actions;
    }
};

MessageDialog.property.dialogTitle = {
    set: function (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 () {
        return this._dialogTitle;
    }
};


_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(MessageDialog);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MessageDialog);

/***/ }),

/***/ 9826:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_modal_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6881);
/* harmony import */ var _css_modal_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_modal_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);



var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;
var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;

function Modal() {
    this._contentAlign = [];
    this.contentAlign = 'middle center';
    this.$content = $('.as-modal-content', this);
}


Modal.tag = 'modal';
Modal.render = function () {
    return _({ class: 'as-modal', child: '.as-modal-content' });
};

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

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


Modal.property = {};
Modal.property.show = {
    set: function (value) {
        if (value)
            this.removeClass('as-hidden');
        else
            this.addClass('as-hidden');
    },
    get: function () {
        return !this.hasClass('as-hidden');
    }
};

Modal.property.contentAlign = {
    set: function (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 () {
        return this._contentAlign.join(' ');
    }
}


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(Modal);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Modal);

/***/ }),

/***/ 1812:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "q": () => (/* binding */ loadLanguageModule)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);


var counter = 30;

function makeCss(data) {
    var cssText = Object.keys(data).map(key => {
        return [
            '[data-ml-key=' + JSON.stringify(key) + ']::before {',
            '    content: ' + JSON.stringify(data[key]) + ';',
            '}'
        ].join('\n');
    }).join('\n\n');
    (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        tag: 'style',
        attr: {
            type: 'text/css'
        },
        props: {
            innerHTML: cssText
        }
    }).addTo(document.head);
}

var data = {
    txt_ok: 'OK',
    txt_cancel: 'Cancel',
    txt_close: 'Close',
    txt_option: 'Option',
    txt_check_all: 'Check All',
    txt_select_value: '-- Select values --'
};

makeCss(data);

var overrideData = {};

var LanguageModuleLoaded = false;

function loadLanguageModule() {
    if (LanguageModuleLoaded) return;
    var text;
    var newest = false, key;
    if (window['LanguageModule'] && window['LanguageModule'].data && window['LanguageModule'].data.length > 0) {
        LanguageModuleLoaded = true;
        for (key in data) {
            text = window['LanguageModule'].text(key);
            if (!text.startsWith('[key:') && text !== data[key]) {
                overrideData[key] = text;
                newest = true;
            }
        }
        if (newest) makeCss(overrideData);
    }

}


function waitLanguage() {
    if (window['LanguageModule'] && window['LanguageModule'].data && window['LanguageModule'].data.length > 0) {
        loadLanguageModule();
    }
    else {
        if (counter--)
            setTimeout(waitLanguage, 400 + Math.floor(16000 / counter / counter));
    }
}

waitLanguage();


/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ({});



/***/ }),

/***/ 7570:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */   "sP": () => (/* binding */ NPDropdownButton),
/* harmony export */   "PL": () => (/* binding */ NPSection),
/* harmony export */   "Bd": () => (/* binding */ NPList),
/* harmony export */   "Ee": () => (/* binding */ NPItem),
/* harmony export */   "FW": () => (/* binding */ MNPNotificationVirtualDropdown)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1477);
/* harmony import */ var _css_notificationpanel_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5810);
/* harmony import */ var _css_notificationpanel_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_css_notificationpanel_css__WEBPACK_IMPORTED_MODULE_2__);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(863);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7951);
/* harmony import */ var absol_src_HTML5_ResizeSystem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6700);
/* harmony import */ var _QuickMenu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1274);
/* harmony import */ var absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7807);
/* harmony import */ var _RelativeTimeText__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9441);
/* harmony import */ var _FlexiconButton__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(3929);
/* harmony import */ var _mobile_MHeaderBar__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(9277);













/**
 * @extends AElement
 * @constructor
 */
function NotificationPanel() {
}


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

NotificationPanel.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        class: 'as-notification-panel',
    });
};

NotificationPanel.prototype.addChild = function () {
    var res = absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_5__/* ["default"].prototype.addChild.apply */ .Z.prototype.addChild.apply(this, arguments);
    absol_src_HTML5_ResizeSystem__WEBPACK_IMPORTED_MODULE_6__/* ["default"].updateUp */ .Z.updateUp(this, true);
    return res;
};


NotificationPanel.prototype.closeAllDropdown = function () {
    Array.prototype.forEach.call(this.childNodes, c => {
        if (typeof c.close === "function") c.close();
    });
};

_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(NotificationPanel);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NotificationPanel);

/**
 /**
 * @extends AElement
 * @constructor
 */
function NPDropdownButton() {
    this.$dropdown = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-db-dropdown', this);
    this.$iconCtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-db-icon-ctn', this);
    this.$icon = null
    this.$count = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-db-count', this);
    this._count = 0;
    this.$btn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-db-btn', this);
    this.$btn.on('click', this.eventHandler.click);
    this.$body = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-db-dropdown-body', this);
    this.$quickMenuBtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-db-quick-menu-btn', this);
    this.$quickMenuCtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-db-dropdown-quick-menu-ctn', this);

    /**
     * @name count
     * @type {number}
     * @memberOf NPDropdownButton#
     */
}


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


NPDropdownButton.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        class: 'as-np-dropdown-button',
        extendEvent: ['click', 'close', 'open'],
        child: [
            {
                tag: 'button',
                class: 'as-np-db-btn',
                child: [
                    {
                        class: 'as-np-db-icon-ctn',
                    },
                    {
                        class: 'as-np-db-count'
                    }
                ]
            },

            {
                class: ['as-np-db-dropdown', 'as-dropdown-box-common-style'],
                child: [
                    {
                        class: 'as-np-db-dropdown-quick-menu-ctn',
                        style: {
                            display: 'none'
                        },
                        child: [
                            {
                                tag: 'button',
                                class: ['as-transparent-button', 'as-np-db-quick-menu-btn'],
                                child: 'span.mdi.mdi-dots-horizontal'
                            }
                        ]
                    },
                    {
                        class: 'as-np-db-dropdown-body'
                    }
                ]
            }
        ]
    });
};

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

NPDropdownButton.prototype.getChildNodes = function () {
    return Array.prototype.slice.call(this.$body.childNodes);
};


NPDropdownButton.prototype.getFirstChild = function () {
    return this.$body.firstChild;
};


NPDropdownButton.prototype.getLastChild = function () {
    return this.$body.lastChild;
};


NPDropdownButton.prototype.addChildBefore = function (child, bf) {
    //adapt method
    if (bf && bf === this.lastChild) bf = this.$body.lastChild;
    else if (bf && bf === this.firstChild) bf = this.$body.firstChild;
    return this.$body.addChildBefore(child, bf);
};

NPDropdownButton.prototype.addChildAfter = function (child, at) {
    if (at === this.lastChild) at = this.$dropdown.lastChild;
    else if (at === this.firstChild) at = this.$dropdown.firstChild;
    return this.$body.addChildAfter(child, at);
};


NPDropdownButton.prototype.open = function () {
    if (this.hasClass('as-active')) return;
    this.addClass('as-active');
    var bound = this.getBoundingClientRect();
    var screenSize = (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* .getScreenSize */ .tE)();
    if (bound.left < screenSize.width / 2) {
        this.$dropdown.addStyle({
            top: bound.bottom + 5 + 'px',
            '--max-height': `calc(90vh - ${bound.bottom + 110}px)`,
            left: '20px',
            right: 'unset'
        });
    }
    else {
        this.$dropdown.addStyle({
            top: bound.bottom + 5 + 'px',
            '--max-height': `calc(90vh - ${bound.bottom + 110}px)`,
            right: '20px',
            left: 'unset'
        });
    }
    this.$dropdown.addStyle('z-index', (0,_utils__WEBPACK_IMPORTED_MODULE_1__.findMaxZIndex)(this) + 2);
    setTimeout(() => {
        if (this.hasClass('as-active'))
            window.addEventListener('click', this.eventHandler.clickOut);
    }, 3);
    this.emit('open', { type: 'open' }, this);
};


NPDropdownButton.prototype.close = function () {
    if (!this.hasClass('as-active')) return;
    this.removeClass('as-active');
    window.removeEventListener('click', this.eventHandler.clickOut);
    this.emit('close', { type: 'close' }, this);
};

NPDropdownButton.property = {};

NPDropdownButton.property.count = {
    set: function (value) {
        value = Math.round(value);
        if (!(0,_utils__WEBPACK_IMPORTED_MODULE_1__.isNaturalNumber)(value)) value = 0;
        this._count = value;
        if (value > 0) {
            this.$count.attr('data-count', value);
        }
        else {
            this.$count.attr('data-count', null);
        }
    },
    get: function () {
        return this._count;
    }
};

NPDropdownButton.property.icon = {
    set: function (value) {
        if (this.$icon) this.$icon.remove();
        this.$iconCtn.clearChild();
        var elt;
        if ((0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* .isDomNode */ .mV)(value)) {
            if (value.parentElt)
                value = value.cloneNode(true);
            elt = value;
        }
        else if (value && (typeof value === 'string' || typeof value === 'object')) {
            if (value === 'default') value = 'span.mdi.mdi-equal';
            elt = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)(value);
        }

        if (elt) {
            this.$iconCtn.addChild(elt);
            this.$icon = elt;
            this.addClass('as-has-icon');
        }
        else {
            this.$icon = null;
            value = null;
            this.removeClass('as-has-icon');
        }
        this._icon = value;
    },
    get: function () {
        return this._icon;
    }
};


NPDropdownButton.property.quickmenu = {
    set: function (value) {
        value = value || null;
        if (this.quickmenuInstance) {
            this.quickmenuInstance.remove();
        }
        this._quickmenu = value;
        if (value) {
            this.$quickMenuCtn.removeStyle('display');
            this.$dropdown.addClass('as-has-quick-menu');
            this.quickmenuInstance = new _QuickMenu__WEBPACK_IMPORTED_MODULE_7__/* .QuickMenuInstance */ .U(this.$quickMenuBtn, Object.assign({
                triggerEvent: 'click',
                anchor: [2, 5],
                menuCtn: this.$quickMenuCtn
            }, value));
        }
        else {
            this.$dropdown.removeClass('as-has-quick-menu');
            this.$quickMenuCtn.addStyle('display', 'none');
        }
    },
    get: function () {
        return this._quickmenu;
    }
}


NPDropdownButton.eventHandler = {};

/**
 * @this NPDropdownButton
 * @param {MouseEvent} event
 */
NPDropdownButton.eventHandler.click = function (event) {
    this.emit('click', { type: 'click', originalEvent: event }, this);
    if (this.hasClass('as-active')) {
        this.close();
    }
    else {
        this.open();
    }
};

/**
 * @this NPDropdownButton
 * @param {MouseEvent} event
 */
NPDropdownButton.eventHandler.clickOut = function (event) {
    if ((0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* .hitElement */ .EY)(this, event)) return;
    this.close();
}


_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(NPDropdownButton);


/**
 * @extends AElement
 * @constructor
 */
function NPSection() {
    this.$body = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-section-body', this);
    this.$name = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-section-name', this);
    this.$action = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-section-action', this);
    this.$action.on('click', (event) => {
        this.emit('action', { type: 'action', originalEvent: event }, this);
    });
}

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

NPSection.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        class: 'as-np-section',
        extendEvent: ['action'],
        child: [
            {
                class: 'as-np-section-header',
                child: [
                    {
                        class: 'as-np-section-name',
                        attr: {
                            'data-name': ''
                        }
                    },
                    {
                        class: 'as-np-section-action'
                    }
                ]
            },
            {
                class: 'as-np-section-body',
            }
        ]
    });
};


['addChild', 'removeChild', 'findChildAfter', 'findChildBefore'].forEach(key => {
    NPSection.prototype[key] = function () {
        return this.$body[key].apply(this.$body, arguments);
    }
});

NPSection.prototype.getChildNodes = function () {
    return Array.prototype.slice.call(this.$body.childNodes);
};

NPSection.prototype.getFirstChild = function () {
    return this.$body.firstChild;
};

NPSection.prototype.getLastChild = function () {
    return this.$body.lastChild;
};

NPSection.prototype.addChildBefore = function (child, bf) {
    if (bf === this.firstChild) bf = this.$body.firstChild;
    else if (bf === this.lastChild) bf = this.$body.lastChild;
    return this.$body.addChildBefore(child, bf);
};

NPSection.prototype.addChildAfter = function (child, at) {
    if (at === this.firstChild) at = this.$body.firstChild;
    else if (at === this.lastChild) at = this.$body.lastChild;
    return this.$body.addChildAfter(child, at);
};


NPSection.property = {};

NPSection.property.name = {
    set: function (value) {
        value = value || '';
        value = value + '';
        this.$name.attr('data-name', value);
    },
    get: function () {
        return this.attr('data-name');
    }
};

NPSection.property.actionText = {
    set: function (value) {
        value = value || '';
        value = value + '';
        if (value)
            this.$action.attr('data-text', value);
        else {
            this.$action.attr('data-text', null);
        }
    },
    get: function () {
        return this.attr('data-text');

    }
};

/**
 * @extends AElement
 * @constructor
 */
function NPList() {
    this.$body = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-list-body', this);
    this._moreText = '';
    this.$moreCtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-list-more-ctn', this);
    this.$moreBtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-list-more-btn', this.$moreCtn);
    this.$moreBtn.on('click', (event) => {
        this.emit('more', { type: 'more', originalEvent: event, target: this }, this);
    });
    /**
     * @name moreText
     * @type {string}
     * @memberOf NPList#
     */

}

NPList.tag = "NPList".toLowerCase();

NPList.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        class: 'as-np-list',
        extendEvent: ['more'],
        child: [
            {
                class: 'as-np-list-body',
            },
            {
                class: 'as-np-list-more-ctn',
                style: {
                    display: 'none'
                },
                child: {
                    tag: _FlexiconButton__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
                    class: 'as-np-list-more-btn'
                }
            }
        ]
    });
};


['addChild', 'removeChild', 'findChildAfter', 'findChildBefore'].forEach(key => {
    NPList.prototype[key] = function () {
        return this.$body[key].apply(this.$body, arguments);
    }
});

NPList.prototype.getChildNodes = function () {
    return Array.prototype.slice.call(this.$body.childNodes);
};

NPList.prototype.getFirstChild = function () {
    return this.$body.firstChild;
};

NPList.prototype.getLastChild = function () {
    return this.$body.lastChild;
};

NPList.prototype.addChildBefore = function (child, bf) {
    if (bf === this.firstChild) bf = this.$body.firstChild;
    else if (bf === this.lastChild) bf = this.$body.lastChild;
    return this.$body.addChildBefore(child, bf);
};

NPList.prototype.addChildAfter = function (child, at) {
    if (at === this.firstChild) at = this.$body.firstChild;
    else if (at === this.lastChild) at = this.$body.lastChild;
    return this.$body.addChildAfter(child, at);
};

NPList.prototype.scrollToEnd = function () {
    this.scrollTop = this.scrollHeight;
};


NPList.property = {};

NPList.property.moreText = {
    set: function (value) {
        value = value || '';
        if (value) {
            this.$moreCtn.removeStyle('display');
        }
        else {
            this.$moreCtn.addStyle('display', 'none');
        }
        this.$moreBtn.text = value;
    },
    get: function () {
        return this.$moreBtn.text;
    }
};

_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(NPList);


/**
 * @extends AElement
 * @constructor
 */
function NPItem() {
    this.$body = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-item-body', this);
    this.$body.on('click', event => {
        this.emit('click', { type: 'click', originalEvent: event }, this);
    });
    this.$unreadBtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-item-unread-btn', this);
    this.$unreadBtn.on('click', event => {
        this.unread = false;
        this.emit('unreadchange', { type: 'unreadchange', target: this }, this);
    });

    this.$pinBtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-item-pin-btn', this);
    this.$pinBtn.on('click', event => {
        this.pin = false;
        this.emit('pinchange', { type: 'pinchange', target: this }, this);
    });

    this.$quickMenuBtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-item-quick-menu-btn', this);
    this.$quickMenuCtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-np-item-quick-menu-ctn', this);

    this._quickmenu = null;
    this.quickmenuInstance = null;

}

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

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

NPItem.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        class: 'as-np-item',
        extendEvent: ['click', 'unreadchange', 'pinchange'],
        child: [
            {
                tag: _RelativeTimeText__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
                class: 'as-np-item-body',
            },

            {
                tag: 'button',
                class: 'as-np-item-unread-btn'
            },
            {
                tag: 'button',
                class: 'as-np-item-pin-btn',
                child: 'span.mdi.mdi-pin'
            },
            {
                class: 'as-np-item-quick-menu-ctn',
                style: {
                    display: 'none'
                },
                child: [
                    {
                        tag: 'button',
                        class: ['as-np-item-quick-menu-btn'],
                        child: 'span.mdi.mdi-dots-horizontal'
                    }
                ]
            }
        ]
    });
};

NPItem.property = {};


NPItem.property.time = {
    set: function (value) {
        value = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_8__.implicitDate)(value);
        this.$body.time = value;
    },
    get: function () {
        return this.$time.time;
    }
};

NPItem.property.unread = {
    set: function (value) {
        if (value) {
            this.addClass('as-unread');
        }
        else {
            this.removeClass('as-unread');
        }
    },
    get: function () {
        return this.hasClass('as-unread');
    }
};

NPItem.property.pin = {
    set: function (value) {
        if (value) {
            this.addClass('as-pin');
        }
        else {
            this.removeClass('as-pin');
        }
    },
    get: function () {
        return this.hasClass('as-pin');
    }
};


NPItem.property.quickmenu = {
    set: function (value) {
        value = value || null;
        if (this.quickmenuInstance) {
            this.quickmenuInstance.remove();
        }
        this._quickmenu = value;
        if (value) {
            this.$quickMenuCtn.removeStyle('display');
            this.quickmenuInstance = new _QuickMenu__WEBPACK_IMPORTED_MODULE_7__/* .QuickMenuInstance */ .U(this.$quickMenuBtn, Object.assign({
                triggerEvent: 'click',
                anchor: [2, 5],
                menuCtn: this.$quickMenuCtn
            }, value));
        }
        else {
            this.$quickMenuCtn.addStyle('display', 'none');
        }
    },
    get: function () {
        return this._quickmenu;
    }
};


/**
 * similar to NPDropdownButton interface
 * @extends AElement
 * @constructor
 */
function MNPNotificationVirtualDropdown() {
    document.body.appendChild(this);
    this.$body = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-mb-vd-body', this);
    this.$headerBar = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-mb-vd-header-bar', this)
        .on('action', this.eventHandler.action);
    _mobile_MHeaderBar__WEBPACK_IMPORTED_MODULE_11__/* ["default"].on */ .Z.on('clicknotification', () => {
        this.open();
    });
}

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

MNPNotificationVirtualDropdown.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        extendEvent: ['click', 'close', 'open'],
        class: ['as-mobile-notification-virtual-dropdown', 'as-hidden'],
        child: [
            {
                tag: _mobile_MHeaderBar__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
                class: 'as-mb-vd-header-bar',
                props: {
                    actionIcon: 'span.mdi.mdi-arrow-left'
                }
            },
            {
                class: 'as-mb-vd-body'
            }
        ]
    });
};

MNPNotificationVirtualDropdown.prototype.open = function () {
    this.emit('click', { type: 'click' }, this);
    if (!this.hasClass('as-hidden')) return;
    this.removeClass('as-hidden');
    this.emit('open', { type: 'close' }, this);
};


MNPNotificationVirtualDropdown.prototype.close = function () {
    this.emit('click', { type: 'click' }, this);
    if (this.hasClass('as-hidden')) return;
    this.addClass('as-hidden');
    this.emit('close', { type: 'close' }, this);
};

MNPNotificationVirtualDropdown.prototype.getChildNodes = function () {
    return Array.prototype.slice.call(this.$body.childNodes);
};


MNPNotificationVirtualDropdown.prototype.getChildren = function () {
    return this.getChildNodes();
};

MNPNotificationVirtualDropdown.prototype.getFirstChild = function () {
    return this.$body.firstChild;
};


MNPNotificationVirtualDropdown.prototype.getLastChild = function () {
    return this.$body.lastChild;
};

MNPNotificationVirtualDropdown.prototype.addChild = function (elt) {
    if (elt.tagName === 'H3' || elt.tagName === 'H4') {
        this.$headerBar.title = elt.innerText;
        elt.addStyle('display', 'none');
    }

    return this.$body.addChild(...arguments);
}


MNPNotificationVirtualDropdown.property = {};

MNPNotificationVirtualDropdown.property.count = {
    set: function (value) {
        _mobile_MHeaderBar__WEBPACK_IMPORTED_MODULE_11__/* ["default"].notificationCount */ .Z.notificationCount = value;
    },
    get: function () {
        return _mobile_MHeaderBar__WEBPACK_IMPORTED_MODULE_11__/* ["default"].notificationCount */ .Z.notificationCount;
    }
};


MNPNotificationVirtualDropdown.property.quickmenu = {
    set: function (value) {
        this.$headerBar.quickmenu = value;
    },
    get: function () {
        return this.$headerBar.quickmenu
    }
};
MNPNotificationVirtualDropdown.eventHandler = {};

MNPNotificationVirtualDropdown.eventHandler.action = function () {
    this.close();
};


_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(MNPNotificationVirtualDropdown);

/***/ }),

/***/ 7315:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_onscreenwidget_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7832);
/* harmony import */ var _css_onscreenwidget_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_onscreenwidget_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _Hanger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(655);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6628);
/* harmony import */ var absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(557);
/* harmony import */ var absol_src_String_stringGenerate__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1334);







var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;
var $$ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$$ */ .Z.$$;


/***
 * @extends Hanger
 * @constructor
 */
function OnScreenWidget() {
    this.id = 'unset-id-' + (0,absol_src_String_stringGenerate__WEBPACK_IMPORTED_MODULE_5__.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 = _('attachhook').addTo(this);
    this.$attachhook.on('attached', this.eventHandler.attached);
    this.config = null;
}

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

OnScreenWidget.render = function () {
    return _({
        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 = (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* .getScreenSize */ .tE)();
    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 ((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 = $$('img', this);
    var syncs = images.map(function (img) {
        if (img.classList.contains('absol-attachhook')) return Promise.resolve();
        return (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* .waitImageLoaded */ .Lp)(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 = (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* .getScreenSize */ .tE)();
    var p0 = new absol_src_Math_Vec2__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z(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();
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(OnScreenWidget);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OnScreenWidget);

/***/ }),

/***/ 6535:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_progressbar_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9862);
/* harmony import */ var _css_progressbar_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_progressbar_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);



var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


function ProgressBar() {
    this._value = 0;
    this._variant = null;
    this.$value = $('.as-progress-bar-value', this);
    this._striped = false;
    this._animated = false;
}

ProgressBar.tag = 'ProgressBar'.toLowerCase();
ProgressBar.render = function () {
    return _({
        class: 'as-progress-bar',
        child: {
            class: 'as-progress-bar-value'
        }
    });
};


ProgressBar.property = {};


/**
 * @type {ProgressBar}
 */
ProgressBar.property.variant = {
    set: function (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 () {
        return this._variant;
    }

};

/**
 * @type {ProgressBar}
 */
ProgressBar.property.value = {
    set: function (value) {
        value = Math.max(0, Math.min(1, value || 0));
        this._value = value;
        this.$value.addStyle('width', value * 100 + '%');

    },
    get: function () {
        return this._value;
    }
};


ProgressBar.property.animated = {
    set: function (value) {
        value = !!value;
        this._striped = value;
        if (value) {
            this.addClass('as-animated');
        }
        else {
            this.removeClass('as-animated');
        }
    },
    get: function () {
        return this._animated;
    }
}

ProgressBar.property.striped = {
    set: function (value) {
        value = !!value;
        this._striped = value;
        if (value) {
            this.addClass('as-striped');
        }
        else {
            this.removeClass('as-striped');
        }
    },
    get: function () {
        return this._striped;
    }
}


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(ProgressBar);


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProgressBar);

/***/ }),

/***/ 1274:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "U": () => (/* binding */ QuickMenuInstance),
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6628);
/* harmony import */ var absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9399);
/* harmony import */ var _Menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(407);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1477);
/* harmony import */ var _Follower__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7094);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(863);
/* harmony import */ var absol_src_Code_safeThrow__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(5650);
/* harmony import */ var absol_src_Code_noop__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1432);










var isMobile = absol_src_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_2__/* ["default"].isMobile */ .Z.isMobile;
var _ = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].$ */ .Z.$;

function QuickMenu() {
    //like context menu without right-click
    this._contextMenuSync = Promise.resolve();
}

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

QuickMenu.render = function () {
    return _({
        tag: 'vmenu',
        extendEvent: 'requestcontextmenu',
        class: [
            'as-quick-menu', 'as-bscroller'
        ],
        style: {
            'overflow-y': 'auto',
            'box-sizing': 'border-box'
        }
    });
};


_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.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;
    /**
     *
     * @type {object|{triggerEvent:string, menuProps,getMenuProps, anchor,  onClick, onSelect,onOpen, onClose, menuCtn, getAnchor}}
     */
    this.opt = Object.assign({}, opt);
    for (var key in this) {
        if (key.startsWith('_on')) {
            this[key] = this[key].bind(this);
        }
    }
    this._init();
}

QuickMenuInstance.prototype._init = function () {
    this.elt.classList.add('as-quick-menu-trigger');
    if (this.opt.triggerEvent === 'mousedown')
        $(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 = ()=>{
            this.elt.revokeResource = absol_src_Code_noop__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z;
            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] = absol_src_Code_noop__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z;
        }
    }
};

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 = (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_6__/* .copyEvent */ .FG)(event, {
        canceled: false,
        cancel: function () {
            this.canceled = true;
        }
    });
    if (this.opt.onClick) {
        this.opt.onClick.call(this, event);
    }
    if (!event.canceled)
        this.toggle();
};

QuickMenuInstance.prototype._onClickOut = function (event) {
    if ((0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_6__/* .hitElement */ .EY)(this.elt, event) || (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_6__/* .hitElement */ .EY)(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 () {
    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(() => {
        this._willAddClickOut = -1;
        document.addEventListener('click', this._onClickOut, false);
        followerElt.updatePosition();
        menuElt.addStyle('visibility', 'visible');
    }, 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);
    if (typeof  this.originProps.items === "function") {
        this.copyProps.items = this.originProps.items.call(this);
    }
    else {
        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(this.opt.menuCtn || document.body);
    followerElt.addClass('absol-active');
    if (this.opt.onOpen) {
        try {
            this.opt.onOpen.call(this);
        } catch (err) {
            (0,absol_src_Code_safeThrow__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(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) {
            (0,absol_src_Code_safeThrow__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)(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 () {
    (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$$)('VMenuItem'.toLowerCase(), QuickMenu.$elt).forEach(e => {
        if (e.autoFixParentSize) e.autoFixParentSize();
    });
    var screenSize = (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* .getScreenSize */ .tE)();
    var eltBound = this.elt.getBoundingClientRect();
    var outRect = (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* .traceOutBoundingClientRect */ .DI)(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(() => {
            this.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');
/***
 *
 * @type {Follower}
 */
QuickMenu.$follower = _({
    tag: _Follower__WEBPACK_IMPORTED_MODULE_5__/* ["default"].tag */ .Z.tag,
    class: 'absol-context-menu-anchor',
    child: QuickMenu.$elt,
    on: {
        preupdateposition: function () {
            var bound = this.getBoundingClientRect();
            var outBound = (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* .traceOutBoundingClientRect */ .DI)(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((0,_utils__WEBPACK_IMPORTED_MODULE_4__.cleanMenuItemProperty)(event.menuItem));
    if (QuickMenu._menuListener) QuickMenu._menuListener((0,_utils__WEBPACK_IMPORTED_MODULE_4__.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 __WEBPACK_DEFAULT_EXPORT__ = (QuickMenu);

/***/ }),

/***/ 7002:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_radio_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(330);
/* harmony import */ var _css_radio_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_radio_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3349);
/* harmony import */ var _RadioButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7234);
/* harmony import */ var absol_src_HTML5_Svg__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6821);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7951);
/* harmony import */ var absol_src_Print_printer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2691);
/* harmony import */ var absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(2759);










var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;
var $$ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$$ */ .Z.$$;
var _svg = absol_src_HTML5_Svg__WEBPACK_IMPORTED_MODULE_4__/* ["default"].ShareInstance._ */ .ZP.ShareInstance._;

/***
 * @extends AElement
 * @constructor
 */
function Radio() {
    var thisR = this;
    this.defineEvent('change');
    this.$input = $('input', this)
        .on('change', this.notifyChange.bind(this));
    this.$labels = $$('span', this);

    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$input, ['value', 'checked']);
}

Radio.tag = 'radio';

Radio.radioProto = _(
    '<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.render = function () {
    return _({
        tag: 'label',
        class: 'absol-radio',
        child: [
            { tag: 'input', attr: { type: 'radio' } },
            { tag: 'span', class: 'absol-radio-left-label' },
            Radio.radioProto.cloneNode(true),
            { tag: 'span', class: 'absol-radio-right-label' }
        ]
    });
};


Radio.prototype.notifyChange = function () {
    this.emit('change', { type: 'change', checked: this.checked, target: this }, this);
};


Radio.prototype.getAllFriend = function () {
    return Radio.getAllByName(this.name);
};


Radio.attribute = _RadioButton__WEBPACK_IMPORTED_MODULE_3__/* ["default"].attribute */ .Z.attribute;

Radio.property = {
    name: {
        set: function (name) {
            this.$input.setAttribute('name', name);

        },
        get: function () {
            return this.$input.getAttribute('name');
        }
    },
    text: {
        set: function (value) {
            value = (value || '').trim();
            this.$labels[0].clearChild();
            this.$labels[1].clearChild();

            if (value) {
                this.$labels[0].addChild(_({ text: value }));
                this.$labels[1].addChild(_({ text: value }));
            }

        },
        get: function () {
            return this.$labels[0].firstChild.data;
        }
    },
    disabled: {
        set: function (value) {
            this.$input.disabled = !!value;
            if (value) {
                this.addClass('disabled');
            }
            else {
                this.removeClass('disabled');
            }
        },
        get: function () {
            return this.$input.disabled;
        }
    }
};

Radio.getAllByName = function (name) {
    return (Array.apply(null, document.getElementsByTagName('input')) || []).filter(function (elt) {
        return elt.getAttribute('type') == 'radio' && elt.getAttribute('name') == name;
    });
};

Radio.getValueByName = function (name) {
    var inputs = 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;
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(Radio);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Radio);

var radioImageCache = {};
absol_src_Print_printer__WEBPACK_IMPORTED_MODULE_6__.ShareSerializer.addHandlerBefore({
    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: (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 = absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_7__/* ["default"].fromClientRect */ .Z.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 = absol_src_HTML5_Svg__WEBPACK_IMPORTED_MODULE_4__/* ["default"].svgToCanvas */ .ZP.svgToCanvas(elt.__origin__).catch(err => {
                console.error(err);
            });
            radioImageCache[key] = res;
        }

        res.elt = elt;
        printer.image(res, rect);
    },
    id: 'Radio'
}, 'SVG');

/***/ }),

/***/ 7234:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_radiobutton_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2578);
/* harmony import */ var _css_radiobutton_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_radiobutton_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3349);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7951);






var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


/***
 * @extends AElement
 * @constructor
 */
function RadioButton() {
    var thisRB = this;
    this.defineEvent('change');
    this.$input = $('input', this).on('change', this.notifyChange.bind(this));
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$input, ['value', 'checked']);

}

RadioButton.tag = 'radiobutton';

RadioButton.radioProto = _(
    '<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 _({
        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 (value) {
            if (value == 'false' || value == null) {
                this.checked = false;
            }
            else {
                this.checked = true;
            }

        },
        get: function () {
            return this.checked ? 'true' : 'false'
        },
        remove: function () {
            this.checked = false;
        }
    },
    disabled: {
        set: function (value) {
            if (value == 'false' || value == null) {
                this.disabled = false;
            }
            else {
                this.disabled = true;
            }

        },
        get: function () {
            return this.disabled ? 'true' : 'false'
        },
        remove: function () {
            this.disabled = false;
        }
    },
    name: {
        set: function (value) {
            this.name = value;
        },
        get: function () {
            return this.name;
        },
        remove: function () {
            this.name = null;
        }
    }
}

RadioButton.property = {
    name: {
        set: function (name) {
            if (name == null) this.$input.removeAttribute('name');
            else
                this.$input.setAttribute('name', name);

        },
        get: function () {
            return this.$input.getAttribute('name');
        }
    },
    disabled: {
        set: function (value) {
            this.$input.disabled = !!value;
            if (value) {
                this.addClass('disabled');
            }
            else {
                this.removeClass('disabled');
            }
        },
        get: function () {
            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 = _({
            tag: this.tag,
            attr: attrs,
            class: classList,
            style: style,
            props: props
        });
        $(ph).selfReplace(newElt);
    }
};

RadioButton.initAfterLoad = function (){
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* ["default"].documentReady.then */ .ZP.documentReady.then(function (){
        RadioButton.autoReplace();
    })
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install('RadioButton'.toLowerCase(), RadioButton);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RadioButton);

/***/ }),

/***/ 9441:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7807);



/**
 * @extends AElement
 * @constructor
 */
function RelativeTimeText() {
    if (!this.share.manager) this.share.manager = new RTTManager();
    this.share.manager.add(this);
    this.addClass('as-relative-time-text');
    /**
     *
     * @type {null|Date}
     * @private
     */
    this._time = null;

    /**
     * @name timeText
     * @type {string}
     * @memberOf RelativeTimeText#
     */

    /**
     * @name time
     * @type {Date}
     * @memberOf RelativeTimeText#
     */
}

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

RelativeTimeText.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({});
};

RelativeTimeText.prototype.updateText = function () {
    if (!this._time) return;
    var now = Date.now();
    var diff = now - this._time.getTime();
    var min = Math.round(diff / 6e4);
    var lang = this.getLanguage();
    var hour = Math.round(min / 60);
    var day = Math.round(hour / 24);
    if (min < 1) {
        this.timeText = lang === 'vi' ? "Vừa xong" : "Just now";
    }
    else if (min < 60) {
        this.timeText = lang === 'vi' ? min + ' phút' : min + ' minutes';
    }
    else if (hour < 24) {
        this.timeText = lang === 'vi' ? hour + ' giờ' : hour + ' hours';
    }
    else {
        this.timeText = lang === 'vi' ? day + ' ngày' : day + ' days';
    }
};

RelativeTimeText.prototype.getLanguage = function () {
    if (window.systemconfig && window.systemconfig.language) {
        return window.systemconfig.language === 'VN' ? 'vi' : 'en';
    }
    else {
        return navigator.language === 'vi' ? 'vi' : 'en';
    }
};

RelativeTimeText.prototype.share = {
    manager: null
};


RelativeTimeText.property = {};

RelativeTimeText.property.timeText = {
    set: function (value) {
        if (value instanceof Date) {
            value = value.toLocaleDateString() + ' ' + value.toLocaleTimeString();
        }
        this.attr('data-time-text', value);
    },
    get: function () {
        return this.attr('data-time-text');
    }
};

RelativeTimeText.property.time = {
    set: function (value) {
        value = (0,absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_1__.implicitDate)(value);
        this._time = value;
        this.updateText();
        if (value) {
            this.attr('title', value.toLocaleDateString() + ' ' + value.toLocaleTimeString());
        }
        else {
            this.attr('title', null);
        }
    },
    get: function () {
        return this._time;
    }
};

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RelativeTimeText);
_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(RelativeTimeText);

function RTTManager() {
    /**
     *
     * @type {{elt:RelativeTimeText, time: number}[]}
     */
    this.arr = [];
    this.update = this.update.bind(this);
}

RTTManager.prototype.add = function (element) {
    this.arr.push({ elt: element, time: Date.now() });
    if (this.arr.length === 1) {
        setTimeout(this.update, 20000);
    }
};

RTTManager.prototype.update = function () {
    var remainArr = [];
    var now = Date.now();
    var it, ok;
    for (var i = 0; i < this.arr.length; i++) {
        it = this.arr[i];
        ok = now - it.time < 60000;
        if (!ok) {
            if (it.elt.isDescendantOf(document.body)) {
                it.time = now;
                ok = true;
            }
        }
        if (ok) {
            it.elt.updateText();
            remainArr.push(it);
        }
    }
    this.arr = remainArr;
    if (this.arr.length > 0) {
        setTimeout(this.update, 20000);
    }
};


/***/ }),

/***/ 4860:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_resizebox_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7585);
/* harmony import */ var _css_resizebox_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_resizebox_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(863);
/* harmony import */ var _Hanger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(655);






var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

/***
 * @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 _({
        tag: _Hanger__WEBPACK_IMPORTED_MODULE_3__/* ["default"].tag */ .Z.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 ((0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__/* .isMouseRight */ .Ed)(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((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;
    $(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 () {
            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 (value) {
        if (value) {
            this.addClass('as-can-move');
        }
        else {
            this.removeClass('as-can-move');
        }
    },
    get: function () {
        return this.hasClass('as-can-move');
    }
};

ResizeBox.property.canResize = {
    set: function (value) {
        if (value) {
            this.addClass('as-can-resize');
        }
        else {
            this.removeClass('as-can-resize');
        }
    },
    get: function () {
        return this.hasClass('as-can-resize');
    }
};

ResizeBox.property.canClick = {
    set: function (value) {
        if (value) {
            this.addClass('as-can-click');
        }
        else {
            this.removeClass('as-can-click');
        }
    },
    get: function () {
        return this.hasClass('as-can-click');
    }
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(ResizeBox);


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ResizeBox);

/***/ }),

/***/ 9664:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_ribbonbutton_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8896);
/* harmony import */ var _css_ribbonbutton_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_ribbonbutton_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7951);
/* harmony import */ var _RibbonSplitButton__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6455);





var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


/***
 * @extends AElement
 * @constructor
 */
function RibbonButton() {
    this.$icon = null;
    this._icon = null;
    this.$text = $('.as-ribbon-button-text', this);
    this.$textNode = this.$text.firstChild;
    this._menuHolder = null;
}

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

RibbonButton.render = function () {
    return _({
        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.as-ribbon-dropdown-icon'
        ]
    });
};

RibbonButton.property = Object.assign({}, _RibbonSplitButton__WEBPACK_IMPORTED_MODULE_3__/* ["default"].property */ .Z.property);


RibbonButton.property.icon = {
    set: function (icon) {
        icon = icon || null;
        this._icon = icon;
        if (this.$icon) this.removeChild(this.$icon);
        if (icon) {
            this.$icon = _(icon);
            this.addChildBefore(this.$icon, this.$text);
            if (this.$icon.addClass) this.$icon.addClass('as-ribbon-button-icon');
        }
        else {
            this.$icon = null;
        }
    },
    get: function () {
        return this._icon;
    }
};


RibbonButton.eventHandler = {};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(RibbonButton);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RibbonButton);

/***/ }),

/***/ 6455:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_ribbonsplitbutton_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6949);
/* harmony import */ var _css_ribbonsplitbutton_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_ribbonsplitbutton_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _QuickMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1274);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1477);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7951);






var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


/***
 * @extends AElement
 * @constructor
 */
function RibbonSplitButton() {
    this.$icon = null;
    this._icon = null;
    this.$text = $('.as-ribbon-split-button-text', this);
    this.$primaryBtn = $('.as-ribbon-split-button-primary', this)
        .on('click', this.eventHandler.clickPrimaryBtn);
    this.$extendBtn = $('.as-ribbon-split-button-extend', this);
    this.$extendText = $('.as-ribbon-split-button-text', this.$extendBtn);//for big style
    this._menuHolder = null;
}

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

RibbonSplitButton.render = function () {
    return _({
        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.as-ribbon-dropdown-icon']
                }
            ]
        }
    });
};

RibbonSplitButton.property = {};

RibbonSplitButton.property.items = {
    set: function (items) {
        var thisB = this;
        this._items = items || [];
        if (this._items && this._items.length > 0) {
            if (!this._menuHolder) {
                this.removeClass('as-no-dropdown');
                this._menuHolder = _QuickMenu__WEBPACK_IMPORTED_MODULE_2__/* ["default"].toggleWhenClick */ .Z.toggleWhenClick(this.$extendBtn || this, {
                    getMenuProps: function () {
                        return {
                            extendStyle: {
                                'min-width': thisB.getBoundingClientRect().width + 'px'
                            },
                            items: thisB._items
                        }
                    },
                    getFlowedElement: function () {
                        return thisB;
                    },
                    anchor: [1, 2, 6, 5],
                    onSelect: function (item) {
                        thisB.emit('select', { item: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.cleanMenuItemProperty)(item), type: 'select', target: thisB });
                    }
                });
            }
        }
        else {
            if (this._menuHolder) {
                this.addClass('as-no-dropdown');
                this._menuHolder.remove();
                this._menuHolder = null;
            }
        }
    },
    get: function () {
        return this._items;
    }
};

RibbonSplitButton.property.text = {
    set: function (value) {
        value = value || '';
        this.$text.attr('data-text', value);
        if (this.$extendText) this.$extendText.attr('data-text', value);
    },
    get: function () {
        return this.$text.attr('data-text') | '';
    }
};


RibbonSplitButton.property.icon = {
    set: function (icon) {
        icon = icon || null;
        this._icon = icon;
        if (this.$icon) this.$primaryBtn.removeChild(this.$icon);
        if (icon) {
            this.$icon = _(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 () {
        return this._icon;
    }
};


RibbonSplitButton.eventHandler = {};

RibbonSplitButton.eventHandler.clickPrimaryBtn = function () {
    this.emit('press', { type: 'press', target: this, item: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.cleanMenuItemProperty)(this) })
}

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(RibbonSplitButton);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RibbonSplitButton);

/***/ }),

/***/ 9246:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "k$": () => (/* binding */ VScroller),
/* harmony export */   "bJ": () => (/* binding */ HScroller),
/* harmony export */   "LW": () => (/* binding */ Scrollbar),
/* harmony export */   "eP": () => (/* binding */ VScrollbar),
/* harmony export */   "MP": () => (/* binding */ HScrollbar)
/* harmony export */ });
/* harmony import */ var _css_scroller_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6618);
/* harmony import */ var _css_scroller_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_scroller_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3349);
/* harmony import */ var absol_src_HTML5_Element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1487);
/* harmony import */ var absol_src_Math_int__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7988);
/* harmony import */ var _Hanger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(655);








var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$scrollStyle */ .Z.$scrollStyle = (function () {
        var element = _('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);

        absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].getScrollSize */ .ZP.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 = $('attachhook', this);
    this.sync = new Promise(function (rs) {
        thisVS.$attachHook.once('error', function () {
            rs();
        });
    });

    this.$attachHook.on('error', function () {
        thisVS.requestUpdateSize();
    });
    this.$vscrollbar = $('vscrollbar', this).on('scroll', this.eventHandler.scrollScrollbar);
    this.$viewport = $('.absol-vscroller-viewport', this)
        .on('scroll', this.eventHandler.scrollViewport);
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"]["extends"] */ .ZP["extends"](thisVS.$viewport, {
        removeChild: function () {
            this.super.apply(this, arguments);
            thisVS.requestUpdateSize();
            return thisVS;
        }
    })
}

VScroller.tag = 'vscroller';
VScroller.render = function () {
    return _({
        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 (absol_src_HTML5_Element__WEBPACK_IMPORTED_MODULE_4__/* ["default"].prototype.isDescendantOf.call */ .Z.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((0,absol_src_Math_int__WEBPACK_IMPORTED_MODULE_6__.map)(i, 0, frameCount, start, end), 0);
        ++i;
        if (i <= frameCount) {
            setTimeout(onFrame, timeOut);
        }
        else {
            setTimeout(finish, timeOut)
        }
    }

    function finish(){
        self.$viewport.scrollTop = Math.max(end, 0);
    }

    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 = $('attachhook', this)
        .on('error', function () {
            this.requestUpdateSize = this.requestUpdateSize || thisHS.requestUpdateSize.bind(thisHS);
            absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].addToResizeSystem */ .ZP.addToResizeSystem(this);
        });

    this.sync = new Promise(function (rs, rj) {
        thisHS.$attachHook.once('error', rs);
    });
    this.$hscrollbar = $('hscrollbar', this).on('scroll', this.eventHandler.scrollScrollbar);
    this.$viewport = $('.absol-hscroller-viewport', this)
        .on('scroll', this.eventHandler.scrollViewport);
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"]["extends"] */ .ZP["extends"](this.$viewport, {
        removeChild: function () {
            this.super.apply(this, arguments);
            thisHS.requestUpdateSize();
            return thisHS;
        }
    });
}


HScroller.tag = 'hscroller';

HScroller.render = function () {
    return _({
        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 (absol_src_HTML5_Element__WEBPACK_IMPORTED_MODULE_4__/* ["default"].prototype.isDescendantOf.call */ .Z.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 = $('.absol-scrollbar-button', this);
    this.on('inactive', function (event, sender) {
        this.emit('deactive', event, sender);
    });
}

Scrollbar.tag = 'scrollbar';

Scrollbar.render = function () {
    return _({
        tag: _Hanger__WEBPACK_IMPORTED_MODULE_5__/* ["default"].tag */ .Z.tag,
        class: ['absol-scrollbar'],
        extendEvent: ['scroll', 'active', 'inactive', 'deactive'],
        child: '.absol-scrollbar-button'
    });
};

Scrollbar.property = {};
Scrollbar.property.hidden = {
    set: function (value) {
        value = !!value;
        if (value !== this._hidden) {
            this._hidden = value;
            if (value)
                this.addClass('absol-hidden');
            else
                this.removeClass('absol-hidden');
        }
    },
    get: function () {
        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 _({
        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 = (0,absol_src_Math_int__WEBPACK_IMPORTED_MODULE_6__.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 (value) {
            value = value || 0;
            if (this._innerOffset != value) {
                this._innerOffset = value;
                this.updateValue();
            }
        },
        get: function () {
            return this._innerOffset || 0;
        }
    },

    innerHeight: {
        set: function (value) {
            value = value || 1;
            value = Math.max(value, 1);
            if (this._innerHeight !== value) {
                this._innerHeight = value;
                this.updateValue();
            }
            this.updateStatus();
        },
        get: function () {
            return this._innerHeight || 1;
        }
    },
    outerHeight: {
        set: function (value) {
            value = value || 0;
            value = Math.max(value, 0);
            if (this._outerHeight !== value) {
                this._outerHeight = value;
                this.updateValue();
            }
            this.updateStatus();
        },
        get: function () {
            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 _({
        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 = (0,absol_src_Math_int__WEBPACK_IMPORTED_MODULE_6__.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 = $(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 (value) {
            value = value || 0;
            if (this._innerOffset !== value) {
                this._innerOffset = value;
                this.updateValue();
            }
        },
        get: function () {
            return this._innerOffset || 0;
        }
    },

    innerWidth: {
        set: function (value) {
            value = value || 1;
            value = Math.max(value, 1);
            if (this._innerWidth !== value) {
                this._innerWidth = value;
                this.updateValue();
            }
            this.updateStatus();
        },
        get: function () {
            return this._innerWidth || 1;
        }
    },
    outerWidth: {
        set: function (value) {
            value = value || 0;
            value = Math.max(value, 0);
            if (this._outerWidth !== value) {
                this._outerWidth = value;
                this.updateValue();
            }
            this.updateStatus();
        },
        get: function () {
            return this._outerWidth || 0;
        }
    }
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install([VScrollbar, HScrollbar, Scrollbar, VScroller, HScroller]);

/***/ }),

/***/ 9024:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_searcher_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1696);
/* harmony import */ var _css_searcher_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_searcher_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3349);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7951);
/* harmony import */ var _Icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2380);
/* harmony import */ var absol_src_HTML5_LanguageSystem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6013);







var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].creator["find-ico"] */ .Z.creator["find-ico"] = function () {
    var res = _(
        '<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;
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].creator["times-circle-ico"] */ .Z.creator["times-circle-ico"] = function () {
    var res = _(
        '<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 = absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__/* ["default"].bindFunctions */ .ZP.bindFunctions(this, SearchTextInput.eventHandler);
    this.$button = $('button', this);
    this.$input = $('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);
    });
    /**
     * @type {string}
     * @name value
     * @memberOf SearchTextInput#
     */
}

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

SearchTextInput.render = function () {
    return _(
        {
            class: 'absol-search-text-input',
            child: [
                {
                    class: 'absol-search-text-input-container',
                    child: {
                        tag: 'input',
                        attr: {
                            type: 'search',
                            placeholder: absol_src_HTML5_LanguageSystem__WEBPACK_IMPORTED_MODULE_5__/* ["default"].getText */ .ZP.getText('txt_search')|| 'Search...'
                        }
                    }
                },
                {
                    class: 'absol-search-text-button-container',
                    child: {
                        tag: 'button',
                        child: ['find-ico', 'times-circle-ico', { tag:_Icons__WEBPACK_IMPORTED_MODULE_4__/* .SpinnerIco.tag */ .i_.tag, style:{margin: 0} }]
                    }
                }
            ]
        }
    );
};


SearchTextInput.property = {
    value: {
        set: function (value) {
            value = value || '';
            this.$input.value = value;
            this._lastTextModified = value;
            if (this.value.length > 0) {
                this.addClass('searching');
            }
            else {
                this.removeClass('searching');
            }
        },
        get: function () {
            return this.$input.value;
        }
    },
    placeholder: {
        set: function (value) {
            this.$input.attr('placeholder', value);
        },
        get: function () {
            return this.$placeholder.getAttribute('placeholder');
        }
    }
};

SearchTextInput.property.waiting = {
    set: function (value) {
        value = value || false;
        this._waiting = value;
        if (value) {
            this.addClass('as-waiting');
        }
        else {
            this.removeClass('as-waiting');
        }
    },
    get: function () {
        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;
    }
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].creator.searchcrosstextinput */ .Z.creator.searchcrosstextinput = function () {
    var res = _('searchtextinput', true);
    return res;
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].creator.searchtextinput */ .Z.creator.searchtextinput = SearchTextInput;

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SearchTextInput);

/***/ }),

/***/ 133:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "wA": () => (/* binding */ requireItem),
/* harmony export */   "Ag": () => (/* binding */ releaseItem),
/* harmony export */   "jG": () => (/* binding */ measureMaxDescriptionWidth),
/* harmony export */   "up": () => (/* binding */ measureMaxTextWidth),
/* harmony export */   "bw": () => (/* binding */ measureListSize),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports makeItem, measureListHeight */
/* harmony import */ var _css_selectlist_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5121);
/* harmony import */ var _css_selectlist_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_selectlist_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1477);
/* harmony import */ var _SelectListItem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6843);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(863);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7951);








var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


var itemPool = [];

function onMousedownItem(event) {
    if (absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__/* ["default"].isMouseRight */ .ZP.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 _({
        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 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 = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.estimateWidth14)(items[i].desc);
            if (est > maxEst) {
                maxEst = est;
                maxText = items[i].desc;
            }
        }
    }
    if (maxText)
        maxDescWidth = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.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 = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.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 + (0,_utils__WEBPACK_IMPORTED_MODULE_2__.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 = 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 = _('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 _('.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 (value) {
        value = value || [];
        this.setItems(value);
    },
    get: function () {
        return this._items || [];
    }
};


SelectList.property.value = {
    set: function (value) {
        this._selectValue = value;
        this._updateSelectedItem();
    },

    get: function () {
        return this._selectValue;
    }
};

SelectList.property.item = {
    get: function () {
        if (this.$selectedItem) return this.$selectedItem.data;
        return undefined;
    }
};


SelectList.property.selectedIndex = {
    get: function () {
        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 = {};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(SelectList);


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SelectList);




/***/ }),

/***/ 6843:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */   "sk": () => (/* binding */ getTextOfListItem),
/* harmony export */   "_l": () => (/* binding */ getDescriptionOfListItem)
/* harmony export */ });
/* unused harmony export getValueOfListItem */
/* harmony import */ var _css_selectlist_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5121);
/* harmony import */ var _css_selectlist_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_selectlist_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _CheckboxButton__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4654);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3349);





var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

/***
 *
 * @extends AElement
 * @constructor
 */
function SelectListItem() {
    this.$text = $('span.absol-selectlist-item-text', this);
    this.$textValue = this.$text.childNodes[0];
    this.$descCtn = $('.absol-selectlist-item-desc-container', this);
    this.$desc = $('span.absol-selectlist-item-desc', this.$descCtn);
    this.$descValue = this.$desc.childNodes[0];
    this.$icon = null;
    this._extendClasses = [];
    this._extendStyle = {};
    this._data = "";
    this._level = 0;
    this._icon = null;
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__/* ["default"].drillProperty */ .ZP.drillProperty(this, this, 'noSelect', 'disabled');
    /***
     * @type {AbsolConstructDescriptor|null}
     * @name icon
     * @memberOf SelectListItem#
     */
}

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

SelectListItem.render = function () {
    return _({
        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 (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 () {
        return this._extendClasses;
    }
};

SelectListItem.property.extendStyle = {
    set: function (value) {
        this.removeStyle(this._extendStyle);
        this._extendStyle = Object.assign({}, value || {});
        this.addStyle(this._extendStyle);
    },
    get: function () {
        return this._extendClasses;
    }
};

SelectListItem.property.icon = {
    /***
     * @this SelectListItem
     * @param icon
     */
    set: function (icon) {
        if (this.$icon) {
            this.$icon.remove();
            this.$icon = null;
        }

        this._icon = icon || null;
        if (this._icon) {
            this.$icon = _(this._icon);
            this.$icon.addClass('as-select-list-icon');
            this.addChildBefore(this.$icon, this.$text);
        }
    },
    get: function () {
        return this._icon;
    }
};


SelectListItem.property.data = {
    set: function (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 () {
        return this._data;
    }
};

SelectListItem.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};


SelectListItem.property.value = {
    get: function () {
        return getValueOfListItem(this._data);
    }
};

SelectListItem.property.text = {
    get: function () {
        return getTextOfListItem(this._data);
    }
};

SelectListItem.property.desc = {
    get: function () {
        return getDescriptionOfListItem(this._data);
    }
};


SelectListItem.property.level = {
    set: function (value) {
        value = value || 0;
        this._level = value;
        this.addStyle('--level', value);
    },
    get: function () {
        return this._level;
    }
};


SelectListItem.property.lastInGroup = {
    set: function (value) {
        if (value) {
            this.addClass('as-last-in-group');
        }
        else {
            this.removeClass('as-last-in-group');
        }
    },
    get: function () {
        return this.hasClass('as-last-in-group');
    }
};

SelectListItem.property.isLeaf = {
    set: function (value) {
        if (value) {
            this.addClass('as-is-leaf');
        }
        else {
            this.removeClass('as-is-leaf');
        }
    },
    get: function () {
        return this.hasClass('as-is-leaf');
    }
};

SelectListItem.property.selected = {
    set: function (value) {
        if (value) {
            this.addClass('as-selected');
        }
        else {
            this.removeClass('as-selected');
        }
    },
    get: function () {
        return this.hasClass('as-selected');
    }
};

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(SelectListItem);


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (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 (typeof item === "object")
            return item.value;
        else
            return item;
    }
    else return item;
}

function getDescriptionOfListItem(item) {
    return (item && (typeof item == "object")) ? item.desc : undefined;
}


/***/ }),

/***/ 5357:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_selectmenu_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7001);
/* harmony import */ var _css_selectmenu_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_selectmenu_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(863);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6628);
/* harmony import */ var _list_search__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2551);
/* harmony import */ var _SelectList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(133);








/*global absol*/
var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].creator["dropdown-ico"] */ .Z.creator["dropdown-ico"] = function () {
    return _([
        '<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() {
    var thisSM = this;
    this._items = [];
    this._value = null;
    this._lastValue = null;
    this.$holderItem = $('.absol-selectmenu-holder-item', this);

    this.$anchorCtn = SelectMenu.getAnchorCtn();
    this.$anchor = _('.absol-selectmenu-anchor.absol-disabled').addTo(this.$anchorCtn);
    this.$anchorContentCtn = _('.absol-selectmenu-anchor-content-container').addTo(this.$anchor);

    this.$dropdownBox = _('.absol-selectmenu-dropdown-box').addTo(this.$anchorContentCtn);
    this.$searchTextInput = _('searchtextinput').addStyle('display', 'none').addTo(this.$dropdownBox);
    this.$vscroller = _('bscroller').addTo(this.$dropdownBox);
    this.$selectlist = _('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 = $('attachhook', this)
        .on('error', this.eventHandler.attached);

    this.sync = new Promise(function (rs) {
        $('attachhook', this).once('error', function () {
            rs();
        });
    });

    this._selectListScrollSession = null;
    this._itemIdxByValue = null;
    return this;
}

SelectMenu.tag = 'selectmenu-old';
SelectMenu.render = function () {
    return _({
        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.optimizeResource = true;

// //will remove after SelectMenu completed
SelectMenu.getRenderSpace = function () {
    if (!SelectMenu.getRenderSpace.warned) {
        // console.warn('SelectMenu.getRenderSpace() will be removed in next version');
    }
    SelectMenu.getRenderSpace.warned = true;
    if (!SelectMenu.$renderSpace) {
        SelectMenu.$renderSpace = _('.absol-selectmenu-render-space')
            .addTo(document.body);
    }
    return SelectMenu.$renderSpace;
};


SelectMenu.getAnchorCtn = function () {
    if (!SelectMenu.$anchorCtn) {
        SelectMenu.$anchorCtn = _('.absol-selectmenu-anchor-container')
            .addTo(document.body);
    }
    return SelectMenu.$anchorCtn;
};


SelectMenu.prototype.updateItem = function () {
    this.$holderItem.clearChild();
    if (this._itemsByValue[this.value]) {
        var elt = _({ tag: 'selectlistitem', props: { data: this._itemsByValue[this.value] } }).addTo(this.$holderItem);
        elt.$descCtn.addStyle('width', this.$selectlist._descWidth + 'px');
    }
};

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.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.property = {};
SelectMenu.property.items = {
    set: function (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 () {
        return this._items || [];
    }
};

SelectMenu.property.value = {
    set: function (value) {
        this.$selectlist.value = value;
        this._lastValue = value;
        this.updateItem();
    },
    get: function () {
        return this.$selectlist.value;
    }
};


SelectMenu.property.enableSearch = {
    set: function (value) {
        this._enableSearch = !!value;
        if (value) {
            this.$searchTextInput.removeStyle('display');
        }
        else {
            this.$searchTextInput.addStyle('display', 'none');
        }
    },
    get: function () {
        return !!this._enableSearch;
    }
};

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 = absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* ["default"].traceOutBoundingClientRect */ .ZP.traceOutBoundingClientRect(this);

        if (!this.isFocus || bound.top > outBound.bottom || bound.bottom < outBound.top) {
            this.isFocus = false;
            return;
        }

        var anchorOutBound = absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* ["default"].traceOutBoundingClientRect */ .ZP.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.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.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.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.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.prototype.stopListenRemovable = function () {
    var removableElt;
    while (this.$removableTrackElts.length > 0) {
        removableElt = this.$removableTrackElts.pop();
        removableElt.off('remove', this.eventHandler.removeParent);
    }
};

SelectMenu.prototype._releaseResource = function () {
    this.$selectlist.items = [];
};

SelectMenu.prototype._requestResource = function () {
    this.$selectlist.items = this._items || [];
};

SelectMenu.property.isFocus = {
    set: function (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;
                $('body').on('mousedown', self.eventHandler.bodyClick);
                isAttached = true;
            }, 1000);
            $('body').once('click', function () {
                setTimeout(function () {
                    if (isAttached) return;
                    $('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();
            $('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 () {
        return !!this._isFocus;
    }
};


SelectMenu.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('disabled');
        }
        else {
            this.removeClass('disabled');
        }
    },
    get: function () {
        return this.hasClass('disabled');
    }
};


SelectMenu.property.hidden = {
    set: function (value) {
        if (value) {
            this.addClass('hidden');
        }
        else {
            this.removeClass('hidden');
        }
    },
    get: function () {
        return this.addClass('hidden');
    }
};

SelectMenu.property.selectedIndex = {
    get: function () {
        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.eventHandler = {};

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);
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_3__/* ["default"].addToResizeSystem */ .ZP.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.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.eventHandler.removeParent = function (event) {
    this._releaseResource();
    this._resourceReady = false;
};

SelectMenu.eventHandler.click = function (event) {
    if (absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__/* ["default"].isMouseRight */ .ZP.isMouseRight(event)) return;
    this.isFocus = !this.isFocus;
};


SelectMenu.eventHandler.bodyClick = function (event) {
    if (!absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__/* ["default"].hitElement */ .ZP.hitElement(this, event) && !absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_2__/* ["default"].hitElement */ .ZP.hitElement(this.$anchor, event)) {
        setTimeout(function () {
            this.isFocus = false;
        }.bind(this), 5)
    }
};

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.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__) {
                (0,_list_search__WEBPACK_IMPORTED_MODULE_4__/* .prepareSearchForList */ .Lb)(this._items);
            }

            view = (0,_list_search__WEBPACK_IMPORTED_MODULE_4__/* .searchListByText */ .o)(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.eventHandler.listSizeChangeAsync = function () {
    this.updateDropdownPostion();
};

SelectMenu.eventHandler.listValueVisibility = function (event) {
    if (!this.isFocus) return;
    if (this._selectListScrollSession == event.session) return;

    this._selectListScrollSession = event.session;
    this.scrollToSelectedItem();
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(SelectMenu);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SelectMenu);


/***/ }),

/***/ 9950:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports NOT_READY, READY, START, RUNNING, PAUSE, STOP, ERROR, STATE_TO_STRING */
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7951);




var _ = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].$ */ .Z.$;

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 _('canvas.as-sprite');
};


Sprite.property = {};


Sprite.property.frames = {
    set: function (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 () {
        return this._frames;
    }
};

Sprite.property.frameIndex = {
    set: function (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 () {
        return this._frameIndex;
    }
};


Sprite.property.src = {
    set: function (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;
            absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* ["default"].waitImageLoaded */ .ZP.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 () {
        return this._src;
    }
}

Sprite.property.state = {
    get: function () {
        return STATE_TO_STRING[this._state];
    }
};
Sprite.property.length = {
    get: function () {
        return this._length;
    }
};

Sprite.property.fps = {
    set: function (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 () {
        return this._fps;
    }
};

Sprite.property.loop = {
    set: function (value) {
        value = !!value;
        this._loop = value;
    },
    get: function () {
        return this._loop;
    }
}

_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(Sprite);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Sprite);

/***/ }),

/***/ 7:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ js_TabView)
});

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tabview.css
var tabview = __webpack_require__(3759);
// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(3855);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate = __webpack_require__(1334);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var Dom = __webpack_require__(6628);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabButton.js





var _ = ACore/* default._ */.Z._;
var $ = ACore/* default.$ */.Z.$;

/***
 * @extends AElement
 * @constructor
 */
function TabButton() {
    var thisTB = this;
    this._icon = null;
    this.$extIconCtn = $('.as-tab-bar-button-ext-icon-ctn', this);
    this.$close = $('.absol-tabbar-button-close', this)
    this.$iconCtn = $('.absol-tabbar-button-icon-container', this).on('click', function (event) {
        event.tabButtonEventName = 'delete';
        thisTB.emit('close', event);
    });
    this.$modifiedFlag = $('.absol-tabbar-button-modified-flag', this)
        .on('click', function (event) {
            event.tabButtonEventName = 'delete';
            thisTB.emit('close', event);
        });

    this.$textView = $('.absol-tabbar-button-text', this);
    this.on({
        click: function (event) {
            if (event.tabButtonEventName) return;
            event.tabButtonEventName = 'active';
            thisTB.emit('active', event);
        }
    });
}


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

TabButton.render = function () {
    return _({
        tag: 'button',
        class: 'absol-tabbar-button',
        extendEvent: ['close', 'active'],
        id: (0,stringGenerate.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 (value) {
        this._active = value;
        if (value)
            this.addClass('absol-tabbar-button-active');
        else
            this.removeClass('absol-tabbar-button-active');
    },
    get: function () {
        return this._active;
    }
};


TabButton.property.name = {
    set: function (value) {
        this._name = value || '';
        this.$textView.innerHTML = this._name;

    },
    get: function () {
        return this._name;
    }
};


TabButton.property.desc = {
    set: function (value) {
        this.attr('title', value);
    },
    get: function () {
        return this.attr('title');
    }
};

TabButton.property.icon = {
    set: function (value) {
        value = value || null;
        this._icon = value;
        this.$extIconCtn.clearChild();
        if (this._icon) {
            this.$extIconCtn.addChild(_(value));
        }
    },
    get: function () {
        return this._icon;
    }
}


TabButton.property.modified = {
    set: function (value) {
        if (value) {
            this.addClass('absol-tabbar-button-modified');
        }
        else {
            this.removeClass('absol-tabbar-button-modified');
        }
    },
    get: function () {
        return this.hasClass('absol-tabbar-button-modified');
    }
};

TabButton.property.preventClosing = {
    set: function (value) {
        if (value) {
            this.addClass('as-prevent-closing');
        }
        else {
            this.removeClass('as-prevent-closing');
        }
    },
    get: function () {
        return this.hasClass('as-prevent-closing');
    }
}

ACore/* default.install */.Z.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_ = ACore/* default._ */.Z._;
var TabBar_$ = ACore/* default.$ */.Z.$;

/***
 * @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 (value) {
        this.clearChild();
        this._tabs = [];
        (value || []).forEach(this.addTab.bind(this));
    },
    get: function () {
        //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 (event, sender) {
                var prevented = false;
                self.emit('active', {
                    target: this,
                    value: value,
                    preventDefault: function () {
                        prevented = true;
                    }
                }, self);
                if (!prevented) {
                    self.getAllTabButtons().forEach(function (e) {
                        e.active = false;
                    });
                    this.active = true;
                }
            },
            close: function (event, sender) {
                var prevented = false;
                self.emit('close', {
                    target: this, value: value,
                    preventDefault: function () {
                        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;
    }
};


ACore/* default.install */.Z.install(TabBar);

/* harmony default export */ const js_TabBar = ((/* unused pure expression or super */ null && (TabBar)));
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/utils.js
var utils = __webpack_require__(1477);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TextMeasure.js + 1 modules
var TextMeasure = __webpack_require__(2610);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/NotificationPanel.js
var NotificationPanel = __webpack_require__(7570);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabView.js








var TabView_ = ACore/* default._ */.Z._;
var TabView_$ = ACore/* default.$ */.Z.$;

/**
 * @extends AElement
 * @constructor
 */
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._title = '';
    this._frameHolders = [];
    this._history = [];
    (0,utils.forwardEvent)(this, 'inactivetab', 'deactivetab');
    this.rightCtnPlugin = new TabviewRightCtnPlugin(this);
    (0,OOP/* drillProperty */.pj)(this, this.rightCtnPlugin, ['tvTitle', 'notificationPanel']);

}

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 (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 = {};
        OOP/* default.drillProperty */.ZP.drillProperty(holder, elt, 'id');
        OOP/* default.drillProperty */.ZP.drillProperty(holder, elt, 'desc');
        OOP/* default.drillProperty */.ZP.drillProperty(holder, elt, 'name');
        OOP/* default.drillProperty */.ZP.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 () {
        return this._history.slice();
    }
};


ACore/* default.install */.Z.install('tabview', TabView);

/* harmony default export */ const js_TabView = (TabView);

/**
 *
 * @param {TabView} elt
 * @constructor
 */
function TabviewRightCtnPlugin(elt) {
    this.elt = elt;
    this.$rightCtn = null;
    this.$title = null;
    this.$notificationPanel = null;
    this._title = '';
}

TabviewRightCtnPlugin.prototype.initCtn = function () {
    if (this.$rightCtn) return;
    this.$rightCtn = TabView_({
        class: 'as-tabview-right-ctn'
    });
    this.$rightCtn.requestUpdateSize = this.updateSize.bind(this);

    this.elt.insertBefore(this.$rightCtn, this.elt.$tabbar.nextSibling);
};

TabviewRightCtnPlugin.prototype.updateSize = function () {
    var width = 0;
    if (this.$title) {
        width += TextMeasure/* default.measureWidth */.Z.measureWidth(this._title, 'Arial', 14) + 20;
    }
    if (this.$notificationPanel) {
        width += 20;
        width += this.$notificationPanel.childNodes.length * 40;
        if (this.$notificationPanel.childNodes.length >0)
            width += (this.$notificationPanel.childNodes.length - 1) * 10;
    }

    this.elt.$tabbar.addStyle('right', width + 'px');
};


Object.defineProperty(TabviewRightCtnPlugin.prototype, 'tvTitle', {
    set: function (value) {
        this.initCtn();
        this._title = value + '';
        if (!this.$title) {
            this.$title = TabView_({
                class: 'as-tabview-title',
                child: { text: '' }
            });
            this.$rightCtn.addChild(this.$title);
        }

        this.$title.firstChild.data = value;
        this.updateSize();

    },
    get: function () {
        return this._title;
    }
});

Object.defineProperty(TabviewRightCtnPlugin.prototype, 'notificationPanel', {
    get: function () {
        this.initCtn();
        if (!this.$notificationPanel) {
            this.$notificationPanel = TabView_({
                tag: NotificationPanel/* default */.ZP,
            });
            this.$rightCtn.addChildBefore(this.$notificationPanel, this.$title);
            this.updateSize();
        }

        return this.$notificationPanel;
    }
});



/***/ }),

/***/ 5789:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_textarea2_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2764);
/* harmony import */ var _css_textarea2_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_textarea2_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _SelectMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5357);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3349);





var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;


/***
 *
 *  @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 _('textarea.absol-textarea2');
};


TextArea2.getRenderPre = function () {
    if (!TextArea2.$preSpace) {
        TextArea2.$preSpace = _('textarea').addStyle({
            'overflow': 'hidden',
            'height': '12px',
            'resize': 'none'
        }).addTo(_SelectMenu__WEBPACK_IMPORTED_MODULE_2__/* ["default"].getRenderSpace */ .Z.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 || String.fromCharCode(event.which || event.keyCode);
    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
    };
}

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(TextArea2);
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TextArea2);

/***/ }),

/***/ 2610:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ js_TextMeasure)
});

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextMeasureData.js
/* harmony default export */ const TextMeasureData = ({
    chars: (" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~©´ÀÁÂÊÍÒÔÙÚ" +
        "ÝàáâãèéêìíðòóôõùúýĂăĐđĩũƠơƯưɐɔɕɗəɛɡɣɲʃʒʝʰˆː˘̪̀̃͡τφχẠạẢảẤấẦầẩẫẬậắằẳặẸẹẻẽếỀềểễỆệỉịọỏỐốồổỗỘộỚớỜờởỡỢợụỦủỨứỪừửữựỳỷỹ" +
        "–‘“”…♥♪【】🤣️�").split(''),
    fonts: {
        "Times New Roman": {
            "width": {
                "0": "̪̀̃͡️",
                "5": " ,.",
                "10": "0123456789#$*_bdghknopquvxyðòóôõùúýđũɗɡɣɲọỏốồổỗộụủỳỷỹ–♪",
                "20": "…【】",
                "6.66015625": "!()-I[]`fr´Íʃˆ˘‘",
                "8.1640625": "\"",
                "16.66015625": "%",
                "15.556640625": "&m",
                "3.603515625": "'",
                "11.279296875": "+<=>",
                "5.556640625": "/:;\\ijltìíĩʝːỉị",
                "8.876953125": "?acezàáâãèéêăɐɔɕəʒχạảấầẩẫậắằẳặẹẻẽếềểễệ“”",
                "18.41796875": "@",
                "14.443359375": "ADGHKNOQUVXYwÀÁÂÒÔÙÚÝĂĐƠẠẢẤẦẬỐỘỚỜỢỦ",
                "13.33984375": "BCR",
                "12.216796875": "ELTZÊẸỀỆ",
                "11.123046875": "FPS",
                "7.783203125": "Js",
                "17.783203125": "M",
                "18.876953125": "W",
                "9.384765625": "^",
                "9.599609375": "{}",
                "4.00390625": "|",
                "10.8203125": "~",
                "15.1953125": "©",
                "10.576171875": "ơớờởỡợ",
                "15.517578125": "ƯỨỪ",
                "10.83984375": "ưứừửữự",
                "8.3984375": "ɛ",
                "6.42578125": "ʰ",
                "8.037109375": "τ",
                "11.54296875": "φ",
                "11.875": "♥",
                "19.423828125": "🤣�"
            },
            "spacing": {
                "-0.7421875": "11W:W;",
                "-2.216796875": "ATP,P.VaVeVyWAY-YAYqYu",
                "-2.578125": "AVV,V.VAVoY,Y.",
                "-1.6015625": "AWF,F.RVTAWaWeWo",
                "-1.8359375": "AYAwAyLTLVPAT-V-W,W.Y:Y;Yp",
                "-1.484375": "AvFALWT,T.V:V;‘‘",
                "-2.001953125": "LYYaYeYoYv",
                "-1.103515625": "LyRWRYT;W-Yir.",
                "-1.201171875": "RTViVrVuWy",
                "-0.80078125": "RyWiWrWur,",
                "-0.99609375": "T:",
                "-0.361328125": "TOffrg",
                "-1.396484375": "TaTcTeToTsTwTy",
                "-0.703125": "TiTrTu",
                "-0.400390625": "r-",
                "-1.298828125": "v,v.w,w.y,y.",
                "-0.439453125": "χφ",
                "-4.443359375": "【̀【̃【̪【͡】̀】̃】̪】͡",
                "-11.38671875": "🤣"
            },
            "fontBoundingBoxAscent": 18,
            "fontBoundingBoxDescent": 4
        },
        "Arial": {
            "width": {
                "0": "̪̀̃͡️",
                "10": "Jcksvxyzýɔɕỳỷỹ♪",
                "20": "…【】",
                "11.123046875": "0123456789#$?L_abdeghnopquàáâãèéêðòóôõùúăđũɐɗəɡɲạảấầẩẫậắằẳặẹẻẽếềểễệọỏốồổỗộụủ–",
                "5.556640625": " !,./:;I[\\]ftÍìíĩː",
                "7.099609375": "\"",
                "17.783203125": "%",
                "13.33984375": "&ABEKPSVXYÀÁÂÊÝĂẠẢẤẦẬẸỀỆ",
                "3.818359375": "'",
                "6.66015625": "()-`r´ˆ˘“”",
                "7.783203125": "*",
                "11.6796875": "+<=>~",
                "20.302734375": "@",
                "14.443359375": "CDHNRUwÙÚĐỦ",
                "12.216796875": "FTZ",
                "15.556640625": "GOQÒÔỐỘ",
                "16.66015625": "Mm",
                "18.876953125": "W",
                "9.384765625": "^",
                "4.443359375": "ijlʃỉị‘",
                "6.6796875": "{}",
                "5.1953125": "|",
                "14.736328125": "©",
                "17.1484375": "ƠỚỜỢ",
                "13.115234375": "ơớờởỡợ",
                "17.080078125": "ƯỨỪ",
                "13.388671875": "ưứừửữự",
                "9.169921875": "ɛ",
                "10.01953125": "ɣ",
                "10.8984375": "ʒ",
                "7.94921875": "ʝ",
                "7.666015625": "ʰ",
                "7.900390625": "τ",
                "12.96875": "φ",
                "10.498046875": "χ",
                "11.875": "♥",
                "19.423828125": "🤣�"
            },
            "spacing": {
                "-1.484375": "11ATAVAYLTLVLWLYPATAVAVaYAYaYpv,v.y,y.",
                "-0.7421875": "AWLyTiTrTuV:V;VrVuVyWAWaYi",
                "-0.361328125": "AvAwAyRTRVRWRYTOViW-W:W;WeWoWrWuff‘‘",
                "-2.216796875": "F,F.T,T.T:T;TaTcTeToTs",
                "-1.103515625": "FAT-TwTyV-VeVoW,W.Y:YuYvr,r.w,w.",
                "-2.578125": "P,P.Y,Y.",
                "-1.8359375": "V,V.Y-YeYoYq",
                "-0.17578125": "Wy",
                "-1.298828125": "Y;",
                "1.11328125": "ìĩ",
                "-0.283203125": "τφφτ",
                "-0.537109375": "φχχφ",
                "-5": "【̀【̃【̪【͡】̀】̃】̪】͡",
                "-11.38671875": "🤣"
            },
            "fontBoundingBoxAscent": 18,
            "fontBoundingBoxDescent": 4
        }
    }
});

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var Dom = __webpack_require__(6628);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextMeasure.js




/**
 * best module
 * @constructor
 */
function TextMeasure() {
    this.$canvas = null;
    this.data = {};
    this._loadComputedData();
    // if the font is not in data, create it and copy console log to TextMeasureData.js
    // this._makeFontSize('Times New Roman');
    // this._makeFontSize('Arial');
}

TextMeasure.prototype.FONT_ARIAL = 'Arial';
TextMeasure.prototype.FONT_TIMES_NEW_ROMAN = 'Times New Roman';

TextMeasure.prototype.exportCode = function () {
    var obj = 'self.absol.TextMeasure';
    var code = [
        'if (!self.absol) self.absol = {};',
        obj + ' = {};',
        obj+'.data = '+ JSON.stringify(this.data)+';'
    ];
    Object.keys(this.constructor.prototype).forEach(key=>{
        var val = this[key];
        if (typeof val === "function") {
            code.push(obj+'.'+key+' = '+ val+';\n');
        }
        else if (!(0,Dom/* isDomNode */.mV)(val)) {
            //todo
        }
    })
    return code.join('\n');
};

TextMeasure.prototype._loadComputedData = function () {
    var thisO = this;
    this.data.chars = TextMeasureData.chars;
    this.data.fonts = Object.keys(TextMeasureData.fonts).reduce(function (ac, fontName) {
        var font = TextMeasureData.fonts[fontName];
        ac[fontName] = {
            width: thisO._valueDict2KeyDict(font.width),
            spacing: thisO._valueDict2KeyDict(font.spacing, 2),
            fontBoundingBoxAscent: font.fontBoundingBoxAscent,
            fontBoundingBoxDescent: font.fontBoundingBoxDescent
        }
        return ac;
    }, {});
};

TextMeasure.prototype._valueDict2KeyDict = function (dict, keyLength) {
    var thisO = this;
    return Object.keys(dict).reduce(function (ac, valueText) {
        var keys = thisO._splitKey(dict[valueText], keyLength || 1);
        var value = parseFloat(valueText);
        keys.reduce(function (ac1, key) {
            ac1[key] = value;
            return ac1;
        }, ac);
        return ac;
    }, {});
};

TextMeasure.prototype._keyDic2ValueDict = function (keyDict) {
    return Object.keys(keyDict).reduce(function (ac, cr) {
        var vKey = keyDict[cr].toString();
        ac[vKey] = ac[vKey] || '';
        ac[vKey] += cr;
        return ac;
    }, {});
}

/***
 *
 * @param s
 * @param l
 * @returns {string[]}
 * @private
 */
TextMeasure.prototype._splitKey = function (s, l) {
    var cArr = s.split('');
    if (!l || l < 2) return cArr;
    return cArr.reduce(function (ac, cr) {
        ac.last += cr;
        if (ac.last.length >= l) {
            ac.arr.push(ac.last);
            ac.last = '';
        }
        return ac;
    }, { arr: [], last: '' }).arr;
};

TextMeasure.prototype._array2keyDict = function (arrKey, arrVal) {
    return arrKey.reduce(function (ac, cr, i) {
        ac[cr] = arrVal[i]
        return ac;
    }, {})
};

TextMeasure.prototype._makeFontSize = function (fontName) {
    var thisO = this;
    var charList = TextMeasureData.chars;
    var fontMt = this.measureTextByCanvas("demo-abgH", '20px ' + fontName);
    var cWidthArr = charList.map(function (c) {
        return thisO.measureTextByCanvas(c).width;
    });
    var width = this._array2keyDict(charList, cWidthArr);
    var spacing = charList.reduce(function (ac, c1, i1) {
        return charList.reduce(function (ac1, c2, i2) {
            var d = thisO.measureTextByCanvas(c1 + c2).width - cWidthArr[i1] - cWidthArr[i2];
            if (d !== 0)
                ac1[c1 + c2] = d;
            return ac1;
        }, ac);
    }, {});

    TextMeasureData[fontName] = {
        width: thisO._keyDic2ValueDict(width),
        spacing: thisO._keyDic2ValueDict(spacing),
        fontBoundingBoxAscent: fontMt.fontBoundingBoxAscent,
        fontBoundingBoxDescent: fontMt.fontBoundingBoxDescent
    };

    this.data.fonts[fontName] = {
        width: width,
        spacing: spacing,
        fontBoundingBoxAscent: fontMt.fontBoundingBoxAscent,
        fontBoundingBoxDescent: fontMt.fontBoundingBoxDescent
    };

    // copy from console and paste it to TextMeasureData
    // console.log(fontName+":"+JSON.stringify(this.data.fonts[fontName]));
};

/***
 *
 * @param {string} text
 * @param {string} fontName
 * @param {number} fontSize
 * @return {number}
 */
TextMeasure.prototype.measureWidth = function (text, fontName, fontSize) {
    var width = this.data.fonts[fontName].width;
    var spacing = this.data.fonts[fontName].spacing;
    var res = 0;
    var prevC = text[0];
    var c = text[0];
    res += width[c] || 0;
    for (var i = 1; i < text.length; ++i) {
        c = text[i];
        res += spacing[prevC + c] || 0;
        res += width[c] || 0;
        prevC = c;
    }
    return res * fontSize / 20;
}
TextMeasure.prototype.wrapText = function (text, fontName, fontSize, maxWidth) {
    var width = this.data.fonts[fontName].width;
    var spacing = this.data.fonts[fontName].spacing;
    var lines = [];
    var currentLine = '';
    var currentWidth = 0;
    var prevC = null;
    var c, charWidth, charSpacing;

    for (var i = 0; i < text.length; i++) {
        c = text[i];
        charWidth = (width[c] !== undefined?width[c] : width['a']) * fontSize / 20;
        charSpacing = prevC ? (spacing[prevC + c] || 0) * fontSize / 20 : 0;

        if (currentWidth + charWidth + charSpacing > maxWidth) {
            // Find the last space in the current line
            var lastSpaceIndex = currentLine.lastIndexOf(' ');
            if (lastSpaceIndex !== -1) {
                // Break at the last space
                lines.push(currentLine.slice(0, lastSpaceIndex).trim());
                currentLine = currentLine.slice(lastSpaceIndex + 1) + c;
                currentWidth = this.measureWidth(currentLine, fontName, fontSize);
            } else {
                // No spaces, break the word
                lines.push(currentLine.trim());
                currentLine = c;
                currentWidth = charWidth;
            }
        } else {
            currentLine += c;
            currentWidth += charWidth + charSpacing;
        }

        prevC = c;
    }

    if (currentLine.trim()) {
        lines.push(currentLine.trim());
    }

    return lines;
};

/***
 *
 * @param {string}text
 * @param {string=} font - without font-size, default is 20px
 * @returns {TextMetrics}
 */
TextMeasure.prototype.measureTextByCanvas = function (text, font) {
    if (!document || !document.createElement) throw new Error("Not support renderer!");
    var canvas = this.$canvas || (this.$canvas = document.createElement("canvas"));
    var context = canvas.getContext("2d");
    if (font)
        context.font = font;
    var metrics = context.measureText(text);
    return metrics;
};

var instance = new TextMeasure();

/* harmony default export */ const js_TextMeasure = (instance);


/***/ }),

/***/ 1376:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_toast_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5822);
/* harmony import */ var _css_toast_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_toast_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3349);
/* harmony import */ var _VariantColors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8494);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1477);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6628);
/* harmony import */ var absol_src_Color_Color__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(257);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(863);
/* harmony import */ var absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7807);
/* harmony import */ var _RelativeTimeText__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9441);












var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;
var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;

var toastBg = {
    success: "#a4f3b6",
    info: "#67d5e7"
}

var toastTextColor = {
    success: '#454040',
    info: '#48433b'
}

;(0,_utils__WEBPACK_IMPORTED_MODULE_4__.buildCss)(_VariantColors__WEBPACK_IMPORTED_MODULE_3__/* ["default"].keys.reduce */ .Z.keys.reduce(function (ac, cr) {
    var color = absol_src_Color_Color__WEBPACK_IMPORTED_MODULE_6__/* ["default"].parse */ .Z.parse(toastBg[cr] || _VariantColors__WEBPACK_IMPORTED_MODULE_3__/* ["default"].base */ .Z.base[cr]);
    var textColor = color.getContrastYIQ();
    var headerColor = toastTextColor[cr] || _VariantColors__WEBPACK_IMPORTED_MODULE_3__/* ["default"].mediumContract */ .Z.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 = $('.as-toast-close-btn', this)
        .on('click', this.disappear.bind(this));
    this.$title = $('.as-toast-title', this);
    this.$timeText = $('.as-toast-time-text', this);
    this.$body = $('.toast-body', this);
    this.$attachhook = $('attachhook', this)
        .on('attached', this.appear.bind(this));
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.$title.firstChild, 'htitle', 'data');
    this._message = null;
    this.$message = null;
    this.disappearTimeout = 0;
    this.htitle = 'Toast.htitle';
    this.message = null;
    this.variant = null;
    this.addEventListener('click', (event) => {
        if ((0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_7__/* .hitElement */ .EY)(this.$closeBtn, event)) return;
        this.emit('click', event, this);
    });
    _({
        tag: _RelativeTimeText__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
        elt: this.$timeText
    });
    (0,absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_2__/* .drillProperty */ .pj)(this, this.$timeText, ['timeText', 'time']);
}

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 _({
        extendEvent: ['appeared', 'disappeared', 'click'],
        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'
                    },
                    {
                        tag: 'button',
                        class: 'as-toast-close-btn',
                        child: 'span.mdi.mdi-close'
                        // 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 (value) {
        if (this._variant && this._variant !== value) {
            this.removeClass('as-variant-' + this._variant);
        }
        if (_VariantColors__WEBPACK_IMPORTED_MODULE_3__/* ["default"].has */ .Z.has(value) || (['sticky-note'].indexOf(value) >= 0)) {
            this._variant = value;
            this.addClass('as-variant-' + this._variant);
        }
    },
    get: function () {
        return this._variant;
    }
};

Toast.property.message = {
    set: function (value) {
        if (typeof value !== "string" || value.length === 0) {
            value = null;
        }
        if (value) {
            if (!this.$message) {
                this.$message = _({
                    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 () {
        return this._message;
    }
};


Toast.$toastList = _('.as-toast-list.as-se.as-bscroller');
Toast.$toastList4Pos = {
    se: Toast.$toastList,
    sw: _('.as-toast-list.as-sw.as-bscroller'),
    nw: _('.as-toast-list.as-nw.as-bscroller'),
    ne: _('.as-toast-list.as-ne.as-bscroller'),
    sc: _('.as-toast-list.as-sc.as-bscroller'),
};

absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_5__/* ["default"].documentReady.then */ .ZP.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 (typeof aObject !== "object") throw new Error("param must be AbsolConstructDescriptor object!");

    if ((0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_5__/* .isDomNode */ .mV)(aObject)) {

    }
    else {
        aObject.tag = aObject.tag || 'toast';

    }
    var toastElt = _(aObject);
    var toastListElt = Toast.$toastList4Pos[pos] || Toast.$toastList;
    toastListElt.addChild(toastElt);
    return toastElt;
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(Toast);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Toast);



/***/ }),

/***/ 5194:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "J": () => (/* binding */ updateTooltipPosition),
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_tooltip_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5071);
/* harmony import */ var _css_tooltip_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_tooltip_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6628);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(863);





var _ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"]._ */ .Z._;
var $ = _ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].$ */ .Z.$;

/***
 * @extends AElement
 * @constructor
 */
function ToolTip() {
    this.$content = $('.absol-tooltip-content', this);
    this.$arrow = $('.absol-tooltip-arrow', this);
}

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

ToolTip.render = function () {
    return _({
        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);
    }
});

_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.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 = (0,absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* .getScreenSize */ .tE)();
    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 = _('.absol-tooltip-root-holder')
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 = _({
            tag: 'span',
            style: {
                'white-space': 'nowrap'
            },
            props: {
                innerHTML: content
            }
        });
    }


    $('', content, function (elt) {
        if (elt.tagName == "IMG" && elt.src) {
            absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].waitImageLoaded */ .ZP.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);
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].addToResizeSystem */ .ZP.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 (event) {
            if (!absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_3__/* ["default"].hitElement */ .ZP.hitElement(content, event)) {
                $(document.body).off('click', finish);
                ToolTip.closeTooltip(mSession);
                mSession = undefined;
            }
        };

        setTimeout(function () {
            $(document.body).on('click', finish);
        }, 100)
    });
};


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ToolTip);

/***/ }),

/***/ 8494:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_variantcolors_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6483);
/* harmony import */ var _css_variantcolors_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_variantcolors_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6628);



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'
    }
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* ["default"].documentReady.then */ .ZP.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 __WEBPACK_DEFAULT_EXPORT__ = (new VariantColor());

/***/ }),

/***/ 774:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3349);



/**
 * @typedef WindowBoxAction
 * @property icon
 * @property name
 *
 */

/***
 * @extends AElement
 * @constructor
 */
function WindowBox() {
    this.$header = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-window-box-header', this);
    /***
     *
     * @type {WindowBoxAction[]}
     * @private
     */
    this._windowActions = [];
    this.$windowActionButtonCtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-window-box-header-button-ctn', this);
    this._windowIcon = null;
    this.$windowIconCtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-window-box-header-icon-ctn', this);


    /**
     *
     * @type {Text}
     */
    this.$windowTitleText = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-window-box-header-title', this).firstChild;

    this.$body = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.as-window-box-body', this);

    /***
     * @type {WindowBoxAction[]}
     * @name windowActions
     */
}

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

WindowBox.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        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 (value) {
        this.$windowTitleText.data = (value || '') + '';
    },
    get: function () {
        return this.$windowTitleText.data;
    },
    enumerable: true
};


WindowBox.property.windowIcon = {
    /***
     * @this WindowBox
     * @param value
     */
    set: function (value) {
        value = value || null;
        this.$windowIconCtn.clearChild();
        if (value) {
            this.$windowIconCtn.addChild((0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)(value));
        }
        this._windowIcon = value;
    },
    get: function () {
        return this._windowIcon;
    },
    enumerable: true
};

WindowBox.property.windowActions = {
    set: function (actions) {
        var self = this;
        this._windowActions = actions || [];
        this.$windowActionButtonCtn.clearChild();
        var buttons = this._windowActions.map(function (action) {
            return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
                tag: 'button',
                class: action.class || [],
                child: action.icon,
                on: {
                    click: function (event) {
                        var eventData = { type: 'action', target: self, action: action, originalEvent: event };
                        absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_1__/* ["default"].drillProperty */ .ZP.drillProperty(eventData, eventData, 'actionData', 'action');
                        self.emit('action', eventData, self);
                    }
                }
            });
        });
        this.$windowActionButtonCtn.addChild(buttons);
    },
    get: function () {
        return this._windowActions;
    }
};


_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(WindowBox);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WindowBox);

/***/ }),

/***/ 5466:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var _css_messagedialog_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3163);
/* harmony import */ var _css_messagedialog_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_messagedialog_css__WEBPACK_IMPORTED_MODULE_1__);
/* harmony import */ var _MessageDialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3488);





/***
 * @extends MessageDialog
 * @constructor
 */
function 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 = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)('.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.tag = 'YesNoQuestionDialog'.toLowerCase();

YesNoQuestionDialog.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        tag: _MessageDialog__WEBPACK_IMPORTED_MODULE_2__/* ["default"].tag */ .Z.tag,
        child: [
            {
                tag: 'span',
                class: 'as-message-dialog-message',
                child: { text: '' }
            }
        ]
    });

};

YesNoQuestionDialog.eventHandler = {};


YesNoQuestionDialog.property = {};


YesNoQuestionDialog.property.message = {
    set: function (value) {
        value = (value || '') + '';
        this.$message.firstChild.data = value;
    },
    get: function () {
        return this.$message.firstChild.data;
    }
};

YesNoQuestionDialog.property.textYes = {
    set: function (value) {
        value = (value || 'Yes') + '';
        this.$yesBtn.text = value;
        this.dialogActions[1].text = value;
    },
    get: function () {
        return this.$yesBtn.text;
    }
};


YesNoQuestionDialog.property.textNo = {
    set: function (value) {
        value = (value || 'No') + '';
        this.$noBtn.text = value;
        this.dialogActions[0].text = value;
    },
    get: function () {
        return this.$noBtn.text;
    }
};


_ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"].install */ .Z.install(YesNoQuestionDialog);


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (YesNoQuestionDialog);

/***/ }),

/***/ 5830:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "cF": () => (/* binding */ DEFAULT_CHART_COLOR_SCHEMES),
/* harmony export */   "TD": () => (/* binding */ generatorColorScheme),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3349);
/* harmony import */ var _Follower__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7094);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3855);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1477);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(863);
/* harmony import */ var absol_src_Color_Color__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(257);
/* harmony import */ var absol_src_Math_int__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7988);








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(scm => scm.map(c => absol_src_Color_Color__WEBPACK_IMPORTED_MODULE_5__/* ["default"].parse */ .Z.parse(c)));

absol_src_Color_Color__WEBPACK_IMPORTED_MODULE_5__/* ["default"].DEFAULT_CHART_COLOR_SCHEMES */ .Z.DEFAULT_CHART_COLOR_SCHEMES = DEFAULT_CHART_COLOR_SCHEMES;


var ColorSchemeGenerators = {};


var scaleArray = (arr, newN) => Array(newN).fill(0).map((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 (0,absol_src_Math_int__WEBPACK_IMPORTED_MODULE_6__.map)(k, l, h, arr[l], arr[h]);
})

var generatorColorScheme = (id, n) => {
    var hsl6 = DEFAULT_CHART_COLOR_SCHEMES_OBJS[id].map(c => c.toHSLA());
    var h6 = hsl6.map(c => c[0]);
    var s6 = hsl6.map(c => 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((u, i) => 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((u, i) => 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(c => c[2]), n);
    h = h || scaleArray(h6, n).map(h => h < 0 ? h + 1 : h);
    return Array(n).fill(0).map((u, i) => absol_src_Color_Color__WEBPACK_IMPORTED_MODULE_5__/* ["default"].fromHSL */ .Z.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);
    absol_src_HTML5_OOP__WEBPACK_IMPORTED_MODULE_0__/* ["default"].drillProperty */ .ZP.drillProperty(this, this.dropdown, ['value', 'items', 'selectedItem']);
    this.dropdown.items = DEFAULT_CHART_COLOR_SCHEMES.map((it, i) => ({
        colors: it,
        value: i
    }));
}

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

SelectColorSchemeMenu.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)({
        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 __WEBPACK_DEFAULT_EXPORT__ = (SelectColorSchemeMenu);

/**
 *
 * @param {SelectColorSchemeMenu} elt
 * @constructor
 */
function SCSMDropdown(elt) {
    this.elt = elt;
    this._items = [];
    this.itemDict = {};
    this.$itemDict = {};
    this.$follower = (0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)({
        tag: _Follower__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
        class: ['as-select-color-scheme-menu-dropdown', 'as-dropdown-box-common-style'],
        child: {}
    });
    this.$follower.cancelWaiting();
}


SCSMDropdown.prototype.updateItems = function () {
    var items = this._items;
    var maxColorLength = items.reduce((ac, cr) => 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((item, i) => {
        if (i % gridCol === 0) {
            this.$follower.addChild((0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)('.as-scsm-item-list-row'));
        }
        var itemElt = (0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)({
            class: ['as-scsm-item']
        });
        var wrapper = (0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)({
            class: 'as-scsm-item-wrapper',
            child: itemElt,
            on: {
                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[(0,_utils__WEBPACK_IMPORTED_MODULE_3__.keyStringOf)(item.value)] = itemElt;
        this.$follower.lastChild.addChild(wrapper);
        item.colors.forEach((color, j) => {
            if (j % itCol === 0) {
                itemElt.addChild((0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)('.as-scsm-item-row'));
            }
            itemElt.lastChild.addChild((0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)({
                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[(0,_utils__WEBPACK_IMPORTED_MODULE_3__.keyStringOf)(value)];
    if (this.$selected) this.$selected.addClass('as-selected');
    this.elt.comboboxCtrl.update();
};

Object.defineProperty(SCSMDropdown.prototype, 'items', {
    set: function (items) {
        if (!(items instanceof Array)) items = [];
        this._items = items;
        this.itemDict = items.reduce((ac, cr) => {
            ac[(0,_utils__WEBPACK_IMPORTED_MODULE_3__.keyStringOf)(cr.value)] = cr;
            return ac;
        }, {});
        this.updateItems();
        this.updateSelected();
    },
    get: function () {
        return this._items;
    }
});

Object.defineProperty(SCSMDropdown.prototype, 'value', {
    set: function (value) {
        this._value = value;
        this.updateSelected();
    },
    get: function () {
        if (this.itemDict[(0,_utils__WEBPACK_IMPORTED_MODULE_3__.keyStringOf)(this._value)] || this._items.length === 0)
            return this._value;
        return this._items[0].value;
    }
});

Object.defineProperty(SCSMDropdown.prototype, 'selectedItem', {
    get: function () {
        return this.itemDict[(0,_utils__WEBPACK_IMPORTED_MODULE_3__.keyStringOf)(this.value)];
    }
});


/**
 *
 * @param {SelectColorSchemeMenu} elt
 * @constructor
 */
function SCSMComboBoxController(elt) {
    this.elt = elt;
    this.$selected = (0,_ACore__WEBPACK_IMPORTED_MODULE_2__.$)('.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(color => (0,_ACore__WEBPACK_IMPORTED_MODULE_2__._)({
        class: 'as-scsm-item-cell', style: {
            backgroundColor: color
        }
    })))

};


Object.defineProperty(SCSMComboBoxController.prototype, 'isFocus', {
    set: function (value) {
        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(() => {
                document.addEventListener('click', this.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 () {
        return this.elt.hasClass('as-focus');
    }
});




/***/ }),

/***/ 6369:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ dom_install)
});

// UNUSED EXPORTS: publicCreators

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/autocompleteinput.css
var autocompleteinput = __webpack_require__(2317);
// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(3855);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var Dom = __webpack_require__(6628);
;// 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);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js
var EventEmitter = __webpack_require__(863);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/AutoCompleteInput.js









var _ = ACore/* default._ */.Z._;
var AutoCompleteInput_$ = ACore/* default.$ */.Z.$;

/***
 *
 * @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 = {};
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$input, 'value');

}

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

AutoCompleteInput.render = function () {
    return _({
        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 (EventEmitter/* default.hitElement */.ZP.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 && !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 = Dom/* default.traceOutBoundingClientRect */.ZP.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_$, 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 (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 () {
        return this._adapter;
    }
};

AutoCompleteInput.property.selectedItem = {
    get: function (){
        return ( this._currentData  && this._currentData[this._selectedIndex]) || null;
    }
};

AutoCompleteInput.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('absol-disabled');
        }
        else {
            this.removeClass('absol-disabled');
        }
    },
    get: function () {
        return this.hasClass('absol-disabled');
    }
};

AutoCompleteInput.attribute = {};
AutoCompleteInput.attribute.disabled = {
    set: function (value) {
        if (value === true || value === 'true' || value === null) {
            this.disabled = true;
        }
        else {
            this.disabled = false;
        }
    },
    get: function () {
        return this.disabled ? 'true' : 'false'
    },
    remove: function () {
        this.disabled = false;
    }
};


ACore/* default.install */.Z.install( AutoCompleteInput);


/* harmony default export */ const js_AutoCompleteInput = (AutoCompleteInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/BoardTable.js
var BoardTable = __webpack_require__(7548);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Board.js
var Board = __webpack_require__(7537);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/bscroller.css
var bscroller = __webpack_require__(3283);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Element.js
var Element = __webpack_require__(1487);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/BScroller.js





var BScroller_ = ACore/* default._ */.Z._;
var BScroller_$ = ACore/* default.$ */.Z.$;



/***
 * @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/* default.prototype.isDescendantOf.call */.Z.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;
        }
    }
}


ACore/* default.install */.Z.install(BScroller);

/* harmony default export */ const js_BScroller = (BScroller);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/buttonarray.css
var buttonarray = __webpack_require__(439);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElement.js
var AElement = __webpack_require__(7951);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ButtonArray.js




var ButtonArray_ = ACore/* default._ */.Z._;
var ButtonArray_$ = ACore/* default.$ */.Z.$;


/***
 * @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 && (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 (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 () {
        return this._items;
    }
};

ButtonArray.property.value = {
    set: function (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 () {
        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);
    }
};


ACore/* default.install */.Z.install(ButtonArray);

/* harmony default export */ const js_ButtonArray = (ButtonArray);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/calendarinput.css
var calendarinput = __webpack_require__(3623);
// EXTERNAL MODULE: ./node_modules/absol/src/Time/datetime.js
var datetime = __webpack_require__(7807);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ChromeCalendar.js
var ChromeCalendar = __webpack_require__(4845);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CalendarInput.js







var CalendarInput_ = ACore/* default._ */.Z._;
var CalendarInput_$ = ACore/* default.$ */.Z.$;


/**
 * @extends AElement
 * @constructor
 */
function CalendarInput() {
    var thisCI = this;
    this.$input = CalendarInput_$('input', this);
    this._value = null;
    this._quickOption = ChromeCalendar/* default.showWhenClick */.Z.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.opt.selectedDates = [value];//change new option
        thisCI.emit('change', { target: thisCI, value: value }, thisCI);
    });

    OOP/* default.drillProperty */.ZP.drillProperty(this, this._quickOption.opt, {
        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 (value) {
        if (value === null || value === undefined) {
            this.$input.value = this.formatDateString(value);
            this._quickOption.opt.selectedDates = [];
            this._value = value;
            this._quickOption.opt.selectedDates = [new Date()]
        }
        else {
            if (typeof value == 'number') value = new Date(value);
            this._value = value;
            this.$input.value = this.formatDateString(value);
            this._quickOption.opt.selectedDates = [value];
        }
    },
    get: function () {
        return this._value;
    }
};


CalendarInput.property.disabled = {
    set: function (value) {
        this.$input.disabled = !!value;
        if (value) {
            this.addClass('absol-disabled');
        }
        else {
            this.removeClass('absol-disabled');
        }
    },
    get: function () {
        return this.$input.disabled;
    }
};

CalendarInput.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};


CalendarInput.attribute = {
    disabled: {
        set: function (value) {
            this.$input.attr('disabled', value);
            if (this.$input.disabled)
                this.addClass('absol-disabled');
        },
        get: function () {
            return this.$input.attr('disabled');
        },
        remove: function () {
            this.$input.attr('disabled', undefined);
            this.removeClass('absol-disabled');
        }
    }
};


CalendarInput.property.dateToString = {
    set: function (value) {
        this._dateToString = value;
        this.$input.value = this.formatDateString(this.value);
    },
    get: function () {
        return this._dateToString;
    }
};

CalendarInput.prototype.formatDateString = function (date) {
    if (!date) {
        return {
            'undefined': 'dd/mm/yyyy',
            'function': '--/--/--',
            'object': 'dd/mm/yyyy',
            'string': typeof this.dateToString
        }[typeof this.dateToString] || '--/--/--';
    }
    if (!this.dateToString) {
        return (0,datetime.formatDateString)(date);
    }
    else if (typeof this.dateToString == 'string') {
        return (0,datetime.formatDateString)(date, this.dateToString);
    }
    else if (typeof this.dateToString == 'function') {
        return this.dateToString(date);
    }
};

ACore/* default.install */.Z.install(CalendarInput);

function OldCalendarInput() {

}

OldCalendarInput.tag = 'calendar-input';

OldCalendarInput.render = function (data) {
    return CalendarInput_({
        tag: 'calendarinput',
        extendEvent: 'changed',
        props: data,
        on: {
            change: function (ev) {
                this.emit('changed', ev.value);
            }
        }
    });
};

ACore/* default.install */.Z.install(OldCalendarInput);

/* harmony default export */ const js_CalendarInput = (CalendarInput);

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/CheckBoxInput.js
var CheckBoxInput = __webpack_require__(1728);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkbox.css
var css_checkbox = __webpack_require__(1239);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckBox.js







var CheckBox_ = ACore/* default._ */.Z._;
var CheckBox_$ = ACore/* default.$ */.Z.$;
var $$ = ACore/* default.$$ */.Z.$$;


/***
 * @extends AElement
 * @constructor
 */
function CheckBox() {
    this.defineEvent('change');
    /***
     *
     * @type {CheckboxInput}
     */
    this.$input = CheckBox_$('checkboxinput', this).on('change',
        this.notifyChange.bind(this)
    );
    this.$labels = $$('span', this);
    this.on('click', this.eventHandler.click);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$input, ['checked']);
    OOP/* default.drillProperty */.ZP.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 (value) {
            if (value === 'false' || value == null) {
                this.checked = false;
            }
            else {
                this.checked = true;
            }

        },
        get: function () {
            return this.checked ? 'true' : 'false'
        },
        remove: function () {
            this.checked = false;
        }
    },
    disabled: {
        set: function (value) {
            this.disabled = !(value === 'false' || value === null);
        },
        get: function () {
            return this.disabled ? 'true' : 'false';
        },
        remove: function () {
            this.disabled = false;
        }
    },
    readonly: {
        set: function (value) {
            this.readOnly = !(value === 'false' || value === null);
        },
        get: function () {
            return this.readOnly ? 'true' : 'false'
        }
    }
};


CheckBox.property = {};
CheckBox.property.text = {
    get: function () {
        return this._text;
    },
    set: function (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 () {
        return this.$input.disabled;
    },
    set: function (value) {
        value = !!value;
        this.$input.disabled = value;
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    }
};

CheckBox.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
            this.$input.readOnly = true;
        }
        else {
            this.addClass('as-read-only');
            this.$input.readOnly = false;
        }
    },
    get: function () {
        return this.$input.readOnly;
    }
}


/***
 *
 * @type {{}|CheckBox}
 */
CheckBox.eventHandler = {};

CheckBox.eventHandler.click = function (event) {
    if (!EventEmitter/* default.hitElement */.ZP.hitElement(this.$input, event) && !this.readOnly) {
        this.$input.click();
    }
};

ACore/* default.install */.Z.install(CheckBox);
/* harmony default export */ const js_CheckBox = (CheckBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/circlesectionlabel.css
var circlesectionlabel = __webpack_require__(9022);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Svg.js
var Svg = __webpack_require__(6821);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CircleSectionLabel.js






var CircleSectionLabel_ = ACore/* default._ */.Z._;
var CircleSectionLabel_$ = ACore/* default.$ */.Z.$;

var _g = Svg/* default.ShareInstance._ */.ZP.ShareInstance._;
var $g = Svg/* default.ShareInstance.$ */.ZP.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 () {
        Dom/* default.addToResizeSystem */.ZP.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 (value) {
        this._index = value;
        this.$index.clearChild().addChild(CircleSectionLabel_({ text: value + '' }))
    },
    get: function () {
        return this._index;
    }
};

CircleSectionLabel.property.text = {
    set: function (value) {
        this._text = value;
        this.$text.clearChild().addChild(CircleSectionLabel_({ text: value + '' }))
    },
    get: function () {
        return this._text;
    }
}


ACore/* default.install */.Z.install(CircleSectionLabel);
/* harmony default export */ const js_CircleSectionLabel = (CircleSectionLabel);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Scroller.js
var Scroller = __webpack_require__(9246);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ContextMenu.js
var ContextMenu = __webpack_require__(7054);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Menu.js
var Menu = __webpack_require__(407);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dateinput.css
var dateinput = __webpack_require__(8094);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/datetimeinput.css
var datetimeinput = __webpack_require__(8000);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DomSignal.js
var DomSignal = __webpack_require__(5150);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/utils.js
var utils = __webpack_require__(1477);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/chrometimepicker.css
var chrometimepicker = __webpack_require__(6171);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeTimePicker.js







/***
 * @extends AElement
 * @constructor
 */
function ChromeTimePicker() {
    this._hour = null;
    this._minute = null;
    OOP/* default.drillProperty */.ZP.drillProperty(this, this, 'dayOffset', 'value');
    this.$lists = (0,ACore.$$)('.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 = (0,ACore._)('attachhook').addTo(this);
    this.domSignal = new DomSignal/* default */.ZP(this.$attachhook)
        .on('request_scroll_into_selected', this._scrollIntoSelected.bind(this));
    this.$amBtn = (0,ACore.$)('.as-chrome-time-picker-btn[data-value="AM"]', this)
        .on('click', this.eventHandler.clickAM);
    this.$pmBtn = (0,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;
    (0,ACore.$$)('.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 (0,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 = (0,ACore.$)('.as-chrome-time-picker-scroller-up', rootElt);
    var downBtn = (0,ACore.$)('.as-chrome-time-picker-scroller-down', rootElt);
    var listElt = (0,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 (value) {
        if ((0,utils.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 () {
        return this._hour;
    }
};


ChromeTimePicker.property.minute = {
    set: function (value) {
        if ((0,utils.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 () {
        return this._minute;
    }
};


ChromeTimePicker.property.value = {
    set: function (value) {
        if (!(0,utils.isRealNumber)(value) && !(value instanceof Date)) {
            value = null;
        }
        if (value && value.getTime) {
            value = value.getTime() - (0,datetime.beginOfDay)(value).getTime();
            if (!(0,utils.isRealNumber)(value)) value = null;
        } else if ((0,utils.isRealNumber)(value)) {
            value = Math.min(datetime.MILLIS_PER_DAY - 1, Math.max(0, value % datetime.MILLIS_PER_DAY));
        }

        if ((0,utils.isRealNumber)(value)) {
            this.hour = Math.floor(value / datetime.MILLIS_PER_HOUR);
            this.minute = Math.floor((value % datetime.MILLIS_PER_HOUR) / datetime.MILLIS_PER_MINUTE);
        } else {
            this.hour = null;
            this.minute = null;
        }
        this.domSignal.emit('request_scroll_into_selected');
    },
    get: function () {
        var res = this._hour * datetime.MILLIS_PER_HOUR + this._minute * datetime.MILLIS_PER_MINUTE;
        return (0,utils.isRealNumber)(res) ? res : null;
    }
};

ChromeTimePicker.property.min = {
    set: function (value){

    },
    get: function (){

    }
};

ChromeTimePicker.property.s24 = {
    set: function (value) {
        if (value) {
            this.addClass('as-24h-clock');
        } else {
            this.removeClass('as-24h-clock');
        }
    },
    get: function () {
        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 ((0,utils.isRealNumber)(this.hour)) {
        if (this.hour < 12)
            this.hour += 12;
    } else {
        this.hour = 12;
    }
    this.notifyChange(event);

};

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


ACore/* default.install */.Z.install(ChromeTimePicker);

/* harmony default export */ const js_ChromeTimePicker = (ChromeTimePicker);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Follower.js
var Follower = __webpack_require__(7094);
// EXTERNAL MODULE: ./node_modules/absol/src/Input/keyboard.js
var keyboard = __webpack_require__(27);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateTimeInput.js












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 = (0,ACore._)('attachhook').addTo(this);
    this.domSignal = new DomSignal/* default */.ZP(this.$attachhook);
    this.domSignal.on('request_auto_select', this._autoSelect.bind(this));
    /***
     *
     * @type {HTMLInputElement | AElement}
     */
    this.$text = (0,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 = (0,ACore.$)('.as-date-time-input-icon-btn', this)
        .on('click', this.eventHandler.clickPickerBtn);
    this.$clearBtn = (0,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 (0,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 && (0,utils.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 (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;
    var m = NaN;
    if (tkDict.H && (0,utils.isRealNumber)(tkDict.H.value)) {
        H = tkDict.H.value;
    }
    else if (tkDict.h && tkDict.a && tkDict.a.value === 'AM') {
        H = tkDict.h.value % 12;
    }
    else if (tkDict.h && tkDict.a && tkDict.a.value === 'PM') {
        H = tkDict.h.value + (tkDict.h.value === 12 ? 0 : 12);
    }
    if (!tkDict.h && !tkDict.H) H = 0;
    if (tkDict.m) {
        m = tkDict.m.value;
    }
    else {
        m = 0;
    }

    var date = new Date(tkDict.y.value, tkDict.M.value - 1, tkDict.d.value, H, m);
    if (isNaN(date.getTime())) {
        this._value = null;
    }
    else {
        this._value = date;
    }
};

DateTimeInput.prototype.clear = function () {
    var lev = this._lastEmitValue;
    if (this.notNull) {
        this.value = (0,datetime.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,
                (0,datetime.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);
    this.attr('data-text', this.$text.value);
};

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((0,utils.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 = 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 (value) {
        this.$text.disabled = !!value;
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};

DateTimeInput.property.notNull = {
    set: function (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 () {
        return this.hasClass('as-must-not-null');
    }
};

DateTimeInput.property.format = {
    set: function (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);
        this.attr('data-text', this.$text.value);

    },
    get: function () {
        return this._format;
    }
};

DateTimeInput.property.value = {
    set: function (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);
            this.attr('data-text', this.$text.value);
        }
        else {
            this.$text.value = this.format;
            this.attr('data-text', this.$text.value);
        }
        this._lastEmitValue = this._value;
    },
    get: function () {
        return this._value;
    }
};

DateTimeInput.property.min = {
    set: function (value) {
        this._min = this._dateFrom(value) || new Date(1890, 0, 1);
    },
    get: function () {
        return this._min;
    }
};


DateTimeInput.property.max = {
    set: function (value) {
        this._max = this._dateFrom(value) || new Date(new Date(2090, 0, 1).getTime() - 1);
    },
    get: function () {
        return this._max;
    }
};


DateTimeInput.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass(('as-read-only'));
        }
        else {
            this.removeClass(('as-read-only'));
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

DateTimeInput.property.text = {
    get: function () {
        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 = (0,keyboard/* keyboardEventToKeyBindingIdent */.Ej)(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 = (0,datetime.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.attr('data-text', this.$text.value);
            this.$text.select();
        }
        else {
            if (this.notNull) {
                switch (token.ident) {
                    case 'HH':
                    case 'mm':
                    case 'H':
                    case 'm':
                        token.replace((0,utils.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((0,utils.zeroPadding)(1, token.ident.length), true);
                        break;
                    case 'y':
                    case 'yyyy':
                        token.replace(
                            (0,utils.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.attr('data-text', this.$text.value);
                    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((0,utils.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((0,utils.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((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this._editingData.state = STATE_EDITED;
                    this._editingData.state_num = 1;
                    break;
                case 'm':
                case 'mm':
                    token.replace((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this._editingData.state = STATE_EDITED;
                    if (dVal > 5) {
                        this._editNextToken();
                    }
                    break;
                case 'h':
                case 'hh':
                    token.replace((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this._editingData.state = STATE_EDITED;
                    if (dVal > 1) {
                        this._editNextToken();
                    }
                    break;
                case 'HH':
                case 'H':
                    token.replace((0,utils.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((0,utils.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((0,utils.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((0,utils.zeroPadding)(dVal, token.ident.length), true);
                        this._editNextToken();
                    }
                    else {
                        token.replace((0,utils.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((0,utils.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((0,utils.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((0,utils.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 ((0,EventEmitter/* hitElement */.EY)(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);
    if (this.share.dateOnly) this.eventHandler.clickOKBtn({});
};

DateTimeInput.eventHandler.clickOKBtn = function (event) {
    this.$text.value = this.share.pickedValeText;
    this.attr('data-text', this.$text.value);
    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 = (0,ACore._)({
            tag: js_ChromeTimePicker.tag,
            class: 'as-date-time-input-time-picker'
        });
        this.share.$calendar = (0,ACore._)({
            tag: ChromeCalendar/* default.tag */.Z.tag,
            class: 'as-date-time-input-date-picker'
        });
        if (this.share.$calendar.$attachHook) {
            this.share.$calendar.$attachHook.cancelWaiting();
        }
        this.share.$cancelBtn = (0,ACore._)({
            tag: 'a',
            class: 'as-select-list-box-cancel-btn',
            attr: {
                "data-ml-key": 'txt_cancel'
            },
        });
        this.share.$okBtn = (0,ACore._)({
            tag: 'a',
            class: 'as-select-list-box-ok-btn',
            attr: {
                "data-ml-key": 'txt_ok'
            },
        });
        this.share.$follower = (0,ACore._)({
            tag: Follower/* default.tag */.Z.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.$footer = (0,ACore.$)('.as-dropdown-box-footer', this.share.$follower);
        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);
    this.share.dateOnly = !tkDict.m && !tkDict.H && !tkDict.h;

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

    if (tkDict.m && !isNaN(tkDict.m.value)) {
        this.share.$timePicker.minute = tkDict.m.value;
    }
    else if (!tkDict.m) {
        this.share.$timePicker.minute = 0;
    }
    else {
        this.share.$timePicker.minute = null;
    }
    if (this.share.dateOnly) {
        this.share.$timePicker.addStyle('display', 'none');
        this.share.$footer.addStyle('display', 'none');

    }
    else {
        this.share.$timePicker.removeStyle('display');
        this.share.$footer.removeStyle('display');
        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));
};


ACore/* default.install */.Z.install(DateTimeInput);

/* harmony default export */ const js_DateTimeInput = (DateTimeInput);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DelaySignal.js
var DelaySignal = __webpack_require__(8098);
;// 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 = (date, level) => {
    if (!date) return null;
    switch (level) {
        case 'week':
            return (0,datetime.beginOfWeek)(date);
        case 'month':
            return (0,datetime.beginOfMonth)(date);
        case 'quarter':
            return (0,datetime.beginOfQuarter)(date);
        case 'year':
            return (0,datetime.beginOfYear)(date);
        case 'date':
        default:
            return (0,datetime.beginOfDay)(date);

    }
}

var DateInput2_ = ACore/* default._ */.Z._;
var DateInput2_$ = ACore/* default.$ */.Z.$;

/**
 * @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 = (0,datetime.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 DelaySignal/* default */.Z();
    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;
    OOP/* default.drillProperty */.ZP.drillProperty(this, this, 'minLimitDate', 'min');
    OOP/* default.drillProperty */.ZP.drillProperty(this, this, 'minDateLimit', 'min');
    OOP/* default.drillProperty */.ZP.drillProperty(this, this, 'maxLimitDate', 'max');
    OOP/* default.drillProperty */.ZP.drillProperty(this, this, 'maxDateLimit', 'max');
    /**
     * @type {Date}
     * @name min
     * @memberOf DateInput#
     */

    /**
     * @type {Date}
     * @name max
     * @memberOf DateInput#
     */

    /**
     * @type {Date}
     * @name value
     * @memberOf DateInput#
     */

    /**
     * @type {string}
     * @name format
     * @memberOf DateInput#
     */

    /**
     * @deprecated
     * @type {Date}
     * @name minLimitDate
     * @memberOf DateInput#
     */
    /**
     * @deprecated
     * @type {Date}
     * @name maxLimitDate
     * @memberOf DateInput#
     */
}

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(datetime.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(r => {
        r = r.split('');
        r.sort();
        return r.join('');
    });

    var matched = tokens.reduce((ac, cr) => {
        Object.keys(map).some(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 && (0,datetime.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;
    this._loadTextFromValue();
};

DateInput2.prototype._loadTextFromValue = function () {
  var value = this.value;
    if (!value) {
        this.$input.value = this.format;
    }
    else {
        this.$input.value = (0,datetime.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,
                (0,datetime.daysInMonth)((!tkDict.y ||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
                + (0,datetime.weekIndexOf)((0,datetime.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((0,utils.zeroPadding)(value, token.ident.length), false);
            }
        }
        else if (this.notNull) {
            if (token.ident.startsWith('y')) {
                value = new Date().getFullYear();
            }
            else {
                value = rqMin;
            }
            token.replace((0,utils.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 = (0,datetime.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 (0,datetime.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 ((0,utils.isRealNumber)(tkDict.w.value) && (0,utils.isRealNumber)(tkDict.y.value))
            date = (0,datetime.weekInYear)(y, tkDict.w.value - 1);
    }
    else if (tkDict.Q && tkDict.y) {
        if ((0,utils.isRealNumber)(tkDict.Q.value) && (0,utils.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((0,datetime.beginOfDay)(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 (0,utils.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 = (0,utils.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 = (0,utils.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 = (0,datetime.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((0,utils.zeroPadding)(new Date().getFullYear(), token.ident.length), true);
                        break;
                    case 'w':
                    case 'ww':
                    case 'Q':
                    case 'QQ':
                        token.replace((0,utils.zeroPadding)(1, token.ident.length), true);
                        break;
                    case 'M':
                    case 'MM':
                    case 'd':
                    case 'dd':
                        token.replace((0,utils.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((0,utils.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((0,utils.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((0,utils.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((0,utils.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((0,utils.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((0,utils.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((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this._editNextToken();
                    break;
                case 'Q':
                case 'QQ':
                    dVal = Math.max(1, Math.min(dVal, 4));
                    token.replace((0,utils.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((0,utils.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((0,utils.zeroPadding)(dVal, token.ident.length), true);
                        this._editNextToken();
                    }
                    else {
                        token.replace((0,utils.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 && (0,datetime.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 ((0,EventEmitter/* hitElement */.EY)(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 (value) {
        value = this._normalizeValue(value);
        if (!value && this.notNull) value = (0,datetime.beginOfDay)(new Date());
        this._value = value;
        this._lastValue = this._explicit(this._value);
        this._loadTextFromValue();
    },
    get: function () {
        return this._explicit(this._value);
    }
};

/**
 * not support MMM, MMMM, support number only
 * @type {DateInput2}
 */
DateInput2.property.format = {
    set: function (value) {
        value = value || 'dd/MM/yyyy';
        value = value.replace(new RegExp(datetime.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(datetime.DATE_TIME_TOKEN_RGX.source, 'g')) || [];
        this.value = this.value;//update

        var testData = new Date(2000, 9, 22, 12, 12, 22, 335);
        testData = (0,datetime.formatDateTime)(testData, value);
        this.addStyle('--format-width', Math.ceil((0,utils.measureText)(testData.replace(/[a-z0-9]/g, 'M'), '14px arial').width / 14 * 2) / 2 + 'em');
        this.attr('data-format', value);

    },
    get: function () {
        return this._format;
    }
};

DateInput2.property.disabled = {
    set: function (value) {
        value = !!value;
        this.$input.disabled = value;
        if (value) this.addClass('as-disabled');
        else this.removeClass('as-disabled');
        this.$text.disabled = value;
    },
    get: function () {
        return this.$input.disabled;
    }
};

DateInput2.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
            this.$input.readOnly = true;
        }
        else {
            this.removeClass('as-read-only');
            this.$input.readOnly = false;

        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

DateInput2.property.text = {
    get: function () {
        return this.$input.value;
    }
};


DateInput2.property.calendarLevel = {
    /***
     * @memberOf DateInput2
     * @name calendarLevel
     * @type {number}
     */
    get: function () {
        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 (value) {
        this._min = this._normalizeValue(value) || new Date(1890, 0, 1);
        this._lastValue = this._explicit(this._value);
        this._applyValue(this._lastValue);
    },
    get: function () {
        return this._min;
    }
};

DateInput2.property.max = {
    set: function (value) {
        this._max = this._normalizeValue(value) || new Date(2090, 0, 1);
        this._lastValue = this._explicit(this._value);
        this._applyValue(this._lastValue);
    },
    get: function () {
        var max = this._max;
        var min = this.min;
        if ((0,datetime.compareDate)(min, max) > 0) return min;
        return max;
    }
};


DateInput2.property.notNull = {
    set: function (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 () {
        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;
    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] : [];
    if (this.share.$calendar.$attachHook) this.share.$calendar.$attachHook.emit('attached');

    this.share.$calendar.sync = this.share.$calendar.sync.then(() => {
        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;
};


ACore/* default.install */.Z.install(DateInput2);

/* harmony default export */ const js_DateInput2 = (DateInput2);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/draggablestack.css
var draggablestack = __webpack_require__(5166);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Hanger.js
var Hanger = __webpack_require__(655);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate = __webpack_require__(1334);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Vec2.js
var Vec2 = __webpack_require__(557);
;// 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 (0,ACore._)('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 = [];
};

ACore/* default.install */.Z.install(PositionTracker);

/* harmony default export */ const js_PositionTracker = (PositionTracker);

// EXTERNAL MODULE: ./node_modules/absol/src/Math/Rectangle.js
var Rectangle = __webpack_require__(2759);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DraggableVStack.js










var DraggableVStack_ = ACore/* default._ */.Z._;
var DraggableVStack_$ = ACore/* default.$ */.Z.$;


/***
 * @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 = (0,stringGenerate.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 (Dom/* default.isDomNode */.ZP.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 Vec2/* default */.Z(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 Vec2/* default */.Z(this._dragData.eltBound.left, this._dragData.eltBound.top));
    this._dragData.eltRelative = new Vec2/* default */.Z(this._dragData.eltBound.left, this._dragData.eltBound.top).sub(new Vec2/* default */.Z(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 Vec2/* default */.Z(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 = Dom/* default.getScreenSize */.ZP.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 () {/* noop */
            },
            target: event.target
        };

        copyEvent.clientX = event.clientX;
        copyEvent.clientY = event.clientY

        var thisBT = this;

        setTimeout(function () {
            if (scroller.scrollHeight > scroller.clientHeight) {
                scroller.scrollTop += (0,utils.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 = Rectangle/* default.fromClientRect */.Z.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 = Dom/* default.traceOutBoundingClientRect */.ZP.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 (value) {
        if (!(value instanceof Array)) value = [value];
        this._friends = value;
    },
    get: function () {
        return this._friends;
    }
};

ACore/* default.install */.Z.install(DraggableVStack);

/* harmony default export */ const js_DraggableVStack = (DraggableVStack);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DraggableHStack.js







var DraggableHStack_ = ACore/* default._ */.Z._;
var DraggableHStack_$ = ACore/* default.$ */.Z.$;

/***
 * @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 = Rectangle/* default.fromClientRect */.Z.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 Vec2/* default */.Z(event.clientX, event.clientY);
    var elt = this._findDirectChild(event.target);
    var childBounds = Array.prototype.map.call(this.childNodes, function (e) {
        return Rectangle/* default.fromClientRect */.Z.fromClientRect(e.getBoundingClientRect());
    });
    var eltIdx = Array.prototype.indexOf.call(this.childNodes, elt);
    var eltBound = childBounds[eltIdx];
    var eltMouseOffset = mousePos.sub(new Vec2/* default */.Z(eltBound.x, eltBound.y));


    this._dragData = {
        mouseStartPos: mousePos,
        mousePos: mousePos,
        bound: Rectangle/* default.fromClientRect */.Z.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 Vec2/* default */.Z(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');
    }
};


ACore/* default.install */.Z.install(DraggableHStack);
/* harmony default export */ const js_DraggableHStack = (DraggableHStack);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/droppanel.css
var droppanel = __webpack_require__(8133);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ExpTree.js
var ExpTree = __webpack_require__(2917);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanel.js








var DropPanel_ = ACore/* default._ */.Z._;
var DropPanel_$ = ACore/* default.$ */.Z.$;

/**
 * @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);
    OOP/* default.drillProperty */.ZP.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 () {
                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 (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 () {
        return this.hasClass('show');
    }
};


ACore/* default.install */.Z.install(DropPanel);

/* harmony default export */ const js_DropPanel = (DropPanel);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanelStack.js





var DropPanelStack_ = ACore/* default._ */.Z._;
var DropPanelStack_$ = ACore/* default.$ */.Z.$;

/**
 * @extends AElement
 * @constructor
 */
function DropPanelStack() {
    var res = this;
    this.$attachHook = DropPanelStack_('attachhook').on('error', function () {
        Dom/* default.addToResizeSystem */.ZP.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');
    }
};

ACore/* default.install */.Z.install('droppanelstack', DropPanelStack);

/* harmony default export */ const js_DropPanelStack = (DropPanelStack);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/editabletext.css
var editabletext = __webpack_require__(4854);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EditableText.js






var EditableText_ = ACore/* default._ */.Z._;
var EditableText_$ = ACore/* default.$ */.Z.$;

/***
 * @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);

    OOP/* default.drillProperty */.ZP.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 (value) {
        this.$text.textContent = value;
        this.$input.value = value;
    },

    get: function () {
        return this.$text.textContent;
    }
}


EditableText.property.editing = {
    set: function (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 () {
        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);
};

ACore/* default.install */.Z.install(EditableText);

/* harmony default export */ const js_EditableText = (EditableText);

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiPicker.js
var EmojiPicker = __webpack_require__(2948);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Sprite.js
var Sprite = __webpack_require__(9950);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/FlexiconButton.js
var FlexiconButton = __webpack_require__(3929);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/flexiconinput.css
var flexiconinput = __webpack_require__(9365);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FlexiconInput.js





var FlexiconInput_ = ACore/* default._ */.Z._;
var FlexiconInput_$ = ACore/* default.$ */.Z.$;


/***
 * @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);
    OOP/* default.drillProperty */.ZP.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 (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 () {
        return this._icon;
    }
};

FlexiconInput.property.unit = {
    set: function (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 () {
        return this._unit;
    }
};

FlexiconInput.property.disabled = {
    set: function (value) {
        value = !!value;
        this.$input.disabled = value;
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.$input.disabled;
    }
};

FlexiconInput.property.readOnly = {
    set: function (value) {
        value = !!value;
        this.$input.readOnly = value;
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

ACore/* default.install */.Z.install(FlexiconInput);

/* harmony default export */ const js_FlexiconInput = (FlexiconInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/frame.css
var css_frame = __webpack_require__(1427);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Frame.js





var Frame_ = ACore/* default._ */.Z._;
var Frame_$ = ACore/* default.$ */.Z.$;

/***
 * @extends AElement
 * @constructor
 */
function Frame() {
    this.$parent = null;// FrameView or TabView
    //adapter
    (0,utils.forwardEvent)(this, 'inactive', 'deactive');
}

Frame.tag = 'frame';

Frame.render = function () {
    return Frame_({
        class: 'absol-frame',
        attr: {
            id: (0,stringGenerate.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);
    }
};

ACore/* default.install */.Z.install(Frame);

/* harmony default export */ const js_Frame = (Frame);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/frameview.css
var frameview = __webpack_require__(7027);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FrameView.js





var FrameView_ = ACore/* default._ */.Z._;
var FrameView_$ = ACore/* default.$ */.Z.$;


/***
 * @extends AElement
 * @constructor
 */
function FrameView() {
    this.$containers = [];
    //adapt
    (0,utils.forwardEvent)(this, 'inactiveframe', 'deactiveframe');
    (0,utils.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;
};


ACore/* default.install */.Z.install( FrameView);

/* harmony default export */ const js_FrameView = (FrameView);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabFrame.js



var TabFrame_$ = ACore/* default.$ */.Z.$;
var TabFrame_ = ACore/* default._ */.Z._;

/**
 * @extends {AElement}
 * @constructor
 */
function TabFrame() {
    this.on('remove', this._onRemove);
}

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 (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 () {
        return this._name;
    }
};


TabFrame.property.modified = {
    set: function (value) {
        this._modified = !!value;
        if (this.$parent) {
            if (this.$parent.notifyUpdateModified)
                this.$parent.notifyUpdateModified(this);
        }
    },
    get: function () {
        return !!this._modified;
    }
};


TabFrame.property.desc = {
    set: function (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 () {
        return this._desc;
    }
};

TabFrame.property.preventClosing = {
    set: function (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 () {
        return this.hasClass('as-prevent-closing');
    }
};

TabFrame.attribute = {};

TabFrame.attribute.name = {
    set: function (value) {
        this.name = value;
    },
    get: function () {
        return this.name;
    },
    remove: function () {
        this.name = undefined;
    }
};


TabFrame.attribute.desc = {
    set: function (value) {
        this.desc = value;
    },
    get: function () {
        return this.desc;
    },
    remove: function () {
        this.desc = undefined;
    }
};

TabFrame.attribute.modified = {
    set: function (value) {
        this.modified = value == 'true' || value == '1' || value === true;
    },
    get: function () {
        return this.modified ? 'true' : undefined;
    },
    remove: function () {
        this.desc = false;
    }
};


TabFrame.prototype.requestRemove = function () {
    if (this.$parent && this.$parent.removeTab) {
        this.$parent.removeTab(this.id, false);
    }
    else {
        this.selfRemove();
    }
};

TabFrame.prototype._onRemove = function () {
    /* bug auto revoke
    setTimeout(() => {
        if (!this.isDescendantOf(document.body)) {
            this.revokeResource();
        }
    }, 100);
*/
};

TabFrame.prototype.revokeResource = function () {
    this.off('remove', this._onRemove);
    while (this.lastChild && false) {
        if (location.href.indexOf('localhost') >= 0 || location.href.indexOf('lab.') >= 0)//for testing
            (0,utils.revokeResource)(this.lastChild);
        this.lastChild.remove();
    }
};

ACore/* default.install */.Z.install(TabFrame);
/* harmony default export */ const js_TabFrame = (TabFrame);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TabView.js + 2 modules
var TabView = __webpack_require__(7);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/singlepage.css
var singlepage = __webpack_require__(6813);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js
var ResizeSystem = __webpack_require__(6700);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SinglePage.js






var SinglePage_ = ACore/* default._ */.Z._;
var SinglePage_$ = ACore/* default.$ */.Z.$;

var warned = false;

/***
 * @extends TabFrame
 * @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) {
                    ResizeSystem/* default.update */.Z.update();
                }
            }
        }
        else {
            clearInterval(this._updateIntv);
            this._updateIntv = -1;
        }
    }.bind(this);
    this.$attachhook = SinglePage_$('attachhook', this)
        .on('attached', function () {
            this.updateSize();
            setTimeout(this.updateSize, 20);
            Dom/* default.addToResizeSystem */.ZP.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();
        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.isHeader = function (elt) {
    return elt && elt.classList && elt.classList.contains('absol-single-page-header');
};

SinglePage.prototype.updateLayoutStyle = function () {
  if (this.$header) {
      this.addClass('as-has-header');
  }
  else {
      this.removeClass('as-has-header');
  }
};

SinglePage.prototype.addChild = function (elt) {
    if (this.isHeader(elt)) {
        if (this.$header) {
            this.$header.remove();
        }
        if (this.firstChild) {
            this.addChildBefore(elt, this.firstChild);
        }
        else {
            this.appendChild(elt);
        }
        this.$header = SinglePage_$(elt);
        this.updateLayoutStyle();
        this.updateSize();
    }
    else if (elt.classList.contains('absol-single-page-footer')) {
        this.$viewport.addChild(elt);
        this.$footer = SinglePage_$(elt);
        this.updateLayoutStyle();
        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);
    }
};


ACore/* default.install */.Z.install(SinglePage);

/* harmony default export */ const js_SinglePage = (SinglePage);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/hexasectionlabel.css
var hexasectionlabel = __webpack_require__(3964);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/HexaSectionLabel.js






var HexaSectionLabel_ = ACore/* default._ */.Z._;
var HexaSectionLabel_$ = ACore/* default.$ */.Z.$;

var HexaSectionLabel_g = Svg/* default.ShareInstance._ */.ZP.ShareInstance._;
var HexaSectionLabel_$g = Svg/* default.ShareInstance.$ */.ZP.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 () {
        Dom/* default.addToResizeSystem */.ZP.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 (value) {
        this._index = value;
        this.$index.clearChild().addChild(HexaSectionLabel_({ text: value + '' }))
    },
    get: function () {
        return this._index;
    }
};

HexaSectionLabel.property.text = {
    set: function (value) {
        this._text = value;
        this.$text.clearChild().addChild(HexaSectionLabel_({ text: value + '' }))
    },
    get: function () {
        return this._text;
    }
};


ACore/* default.install */.Z.install(HexaSectionLabel);
/* harmony default export */ const js_HexaSectionLabel = (HexaSectionLabel);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/vruler.css
var vruler = __webpack_require__(9786);
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/VRuler.js







var VRuler_ = ACore/* default._ */.Z._;
var VRuler_$ = ACore/* default.$ */.Z.$;

/**
 * @extends AElement
 * @constructor
 */
function VRuler() {
    var self = this;
    this.$attachHook = VRuler_('attachhook').on('error', function () {
        this.updateSize = self.update.bind(self);
        Dom/* default.addToResizeSystem */.ZP.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();
    (0,utils.revokeResource)(this.$lines);
    (0,utils.revokeResource)(this.$numbers);
    this.clearChild();
    this.revokeResource = noop/* default */.Z;
}

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


VRuler.prototype.update = function () {
    var fontSize = this.getFontSize() || 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 (value) {
        if (value > 0) {
            this._major = value;
            this.update();
        }
    },
    get: function () {
        return this._major;
    }
};

VRuler.property.spacing = {
    set: function (value) {
        if (value > 0) {
            this._spacing = value;
            this.update();
        }
    },
    get: function () {
        return this._spacing;
    }
};


VRuler.property.inverse = {
    set: function (value) {
        this._valueFloat = value ? 'bottom' : 'top';
        this.update();
    },
    get: function () {
        return this._valueFloat === 'bottom';
    }
};

ACore/* default.install */.Z.install(VRuler);

/* harmony default export */ const js_VRuler = (VRuler);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/hruler.css
var hruler = __webpack_require__(1138);
// EXTERNAL MODULE: ./node_modules/absol/src/DataStructure/Object.js
var DataStructure_Object = __webpack_require__(2722);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/HRuler.js








var HRuler_ = ACore/* default._ */.Z._;
var HRuler_$ = ACore/* default.$ */.Z.$;

/***
 * @extends AElement
 * @constructor
 */
function HRuler() {
    this.$attachHook = HRuler_('attachhook').on('attached', () => {
        this.requestUpdateSize = this.update.bind(this);
        ResizeSystem/* default.add */.Z.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;
  (0,DataStructure_Object/* revokeResource */.bU)(this.$lines);
  (0,DataStructure_Object/* revokeResource */.bU)(this.$numbers);
  this.clearChild();
  this.revokeResource = noop/* default */.Z;
};

HRuler.property = {};
HRuler.property.major = {
    set: function (value) {
        if (value > 0) {
            this._major = value;
            this.update();
        }
    },
    get: function () {
        return this._major;
    }
};

HRuler.property.spacing = {
    set: function (value) {
        if (value > 0) {
            this._spacing = value;
            this.update();
        }
    },
    get: function () {
        return this._spacing;
    }
};

HRuler.property.inverse = {
    set: function (value) {
        this._valueFloat = value ? 'right' : 'left';
        this.update();
    },
    get: function () {
        return this._valueFloat === 'right';
    }
};

ACore/* default.install */.Z.install(HRuler);

/* harmony default export */ const js_HRuler = (HRuler);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/IconSprite.js



var IconSprite_ = ACore/* default._ */.Z._;
var IconSprite_$ = ACore/* default.$ */.Z.$;


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

ACore/* default.install */.Z.install(IconSprite);

/* harmony default export */ const js_IconSprite = (IconSprite);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/linearcolorbar.css
var linearcolorbar = __webpack_require__(3262);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LinearColorBar.js






var LinearColorBar_ = ACore/* default._ */.Z._;
var LinearColorBar_$ = ACore/* default.$ */.Z.$;


var LinearColorBar_g = Svg/* default.ShareInstance._ */.ZP.ShareInstance._;
var LinearColorBar_$g = Svg/* default.ShareInstance.$ */.ZP.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'
    }
};


(0,utils.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;
        Dom/* default.addToResizeSystem */.ZP.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 (value) {
        value = value + '';
        this._valueText = value;
        this.$valueText.clearChild().addChild(LinearColorBar_({ text: value }));
    },
    get: function () {
        return this._valueText;
    }
};


LinearColorBar.property.minValueText = {
    set: function (value) {
        value = value + '';
        this._minValueText = value;
        this.$minValueText.clearChild().addChild(LinearColorBar_({ text: value }));
    },
    get: function () {
        return this._valueText;
    }
};

LinearColorBar.property.maxValueText = {
    set: function (value) {
        value = value + '';
        this._maxValueText = value;
        this.$maxValueText.clearChild().addChild(LinearColorBar_({ text: value }));
    },
    get: function () {
        return this._valueText;
    }
};

LinearColorBar.property.value = {
    set: function (value) {
        this._value = value;
    },
    get: function () {
        return this._value;
    }
};

LinearColorBar.property.extendValue = {
    set: function (value) {
        this._extendValue = value;
        this._updateGradient();
    },
    get: function () {
        return this._extendValue;
    }
};


LinearColorBar.property.colorMapping = {
    set: function (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 () {
        return this._colorMapping;
    }
};

ACore/* default.install */.Z.install(LinearColorBar);
/* harmony default export */ const js_LinearColorBar = (LinearColorBar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mediainput.css
var mediainput = __webpack_require__(3475);
// EXTERNAL MODULE: ./node_modules/absol/src/Converter/file.js
var Converter_file = __webpack_require__(4574);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Text.js
var Text = __webpack_require__(5827);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MediaInput.js











var MediACore = new Dom/* default */.ZP();
MediACore.install(ACore/* default */.Z);


var MediaInput_ = MediACore._;
var MediaInput_$ = MediACore.$;


function 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 () {
                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 () {
                this.selfRemove();
            }
        }
    }).addTo(this.$imagePreviewContainer);
};


MediaInput.property = {};

MediaInput.property.text = {
    set: function (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 () {
        return this.getTextFromElements(this.$editor);
    }
};

MediaInput.property.files = {
    get: function () {
        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 () {
        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 (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 () {
        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);
    }

    (0,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 (event) {
                    if (EventEmitter/* default.hitElement */.ZP.hitElement(self.$pluginContentCtn, event)) {

                    }
                    else if (self._lastActivePlugin == plugin) {
                        var prevented = true;
                        if (plugin.onBlur) plugin.onBlur({
                            preventDefault: function () {
                                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();
    (0,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 (0,Text.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) {
    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) {
    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 {
                (0,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 = (0,Converter_file.blobToFile)(blob);
                var buffer = (0,Converter_file.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();
                    Dom/* default.imageToCanvas */.ZP.imageToCanvas(img).then(function (canvas) {
                        var dataURI = canvas.toDataURL();
                        var blob = (0,Converter_file.dataURItoBlob)(dataURI);
                        var file = (0,Converter_file.blobToFile)(blob);
                        var buffer = (0,Converter_file.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;
    (0,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;
    (0,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);
    });
    OOP/* default.drillProperty */.ZP.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);
    OOP/* default.drillProperty */.ZP.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 (value) {
            value = value || '';
            if (this.$ext) {
                this.$ext.selfRemove();
            }
            this.$ext = Svg/* default.ShareInstance._ */.ZP.ShareInstance._('<text text-anchor="middle" x="321.39" y="170" font-size="145.76" style="fill:white;" >' + value + '</text>').addTo(this);
        },
        get: function () {
            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>'
    );
};


ACore/* default.install */.Z.install(MediaInput);


/* harmony default export */ const js_MediaInput = (MediaInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/messageinput/MessageInput.js + 2 modules
var MessageInput = __webpack_require__(4877);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/numberinput.css
var numberinput = __webpack_require__(5699);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/numberinput/NITextController.js






/***
 *
 * @param {NumberInput} elt
 * @constructor
 */
function NITextController(elt) {
    this.elt = elt;
    /***
     *
     * @type {HTMLInputElement|AElement}
     */
    this.$input = this.elt.$input;
    Object.keys(NITextController.prototype).forEach(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 = (0,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) ResizeSystem/* default.requestUpdateUpSignal */.Z.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 (!(0,utils.isRealNumber)(this.elt._value)) this.elt._value = null;
    this.elt._value = this.elt.value;//normalize value
};


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(x => x.match(/[0-9\-]/)).reduce((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(x => 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 key = event.type === 'keydown' ? (0,keyboard/* keyboardEventToKeyBindingIdent */.Ej)(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 = () => {
        var oldText = this.$input.value;
        setTimeout(() => {
            var newText = this.$input.value;
            if (oldText === newText) return;
            var key = newText[sStart];
            if (!key) return;//todo
            var fakeEvent = {
                type: 'keydown',
                preventDefault: noop/* default */.Z,
                key: key
            }
            if (key.match(/^[0-9.]$/)) {
                this.onKeyDown(fakeEvent, true);
            }
            else {
                this.$input.value = oldText;
                this.$input.setSelectionRange(sStart, sStart);
                this.onKeyDown(fakeEvent);
            }
        }, 10);
    };


    onKeys.process = () => {
        setTimeout(() => {
            this.flushTextToValue();
        }, 10);

    }

    onKeys.paste = () => {
        var clipboardData = event.clipboardData || window.clipboardData;
        var pastedData = clipboardData.getData('Text');
        var hasSeparator = value.indexOf(decimalSeparator) >= 0;
        pastedData = pastedData.split('').filter(c => {
            if (c.match(/[0-9]/)) return true;
            if (!hasSeparator && c === hasSeparator) {
                hasSeparator = true;
                return true;
            }
        }).join('');
        if (this.elt.readOnly) return;
        if (!dontInsert) {
            this.$input.value = value.substring(0, sStart) + pastedData + value.substring(sEnd);
            this.$input.setSelectionRange(sStart + pastedData.length, sStart + pastedData.length);
        }
        this.reformat();
        this.flushTextToValue();
    };

    onKeys.arrowleft = () => {
        if (sStart === sEnd) {
            if (value[sStart - 2] === thousandsSeparator) {
                this.$input.setSelectionRange(sStart - 2, sStart - 2);
            }
            else if (sStart > 0) {
                this.$input.setSelectionRange(sStart - 1, sStart - 1);
            }
        }
        else {
            this.$input.setSelectionRange(sStart, sStart);
        }
    };

    onKeys['shift-arrowleft'] = () => {
        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) {
            this.$input.setSelectionRange(newSStart, newSEnd, "forward");
        }
        else {
            this.$input.setSelectionRange(newSEnd, newSStart, "backward");
        }
    };


    onKeys.arrowright = () => {
        if (sStart === sEnd) {
            if (value[sStart] === thousandsSeparator) {
                this.$input.setSelectionRange(sStart + 2, sStart + 2);
            }
            else if (sStart < value.length) {
                this.$input.setSelectionRange(sStart + 1, sStart + 1);
            }
        }
        else {
            this.$input.setSelectionRange(sStart, sStart);
        }
    };


    onKeys['shift-arrowright'] = () => {
        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) {
            this.$input.setSelectionRange(newSStart, newSEnd, "forward");
        }
        else {
            this.$input.setSelectionRange(newSEnd, newSStart, "backward");
        }
    };


    onKeys.number = () => {
        if (this.elt.readOnly) return;
        if (!dontInsert) {
            this.$input.value = value.substring(0, sStart) + key + value.substring(sEnd);
            this.$input.setSelectionRange(sStart + 1, sStart + 1);
        }
        this.reformat();
        this.flushTextToValue();
    };
    onKeys['-'] = () => {
        if (this.elt.readOnly) return;
        if (value.indexOf('-') >= 0 || sStart > 0) return;
        this.$input.value = '-' + value.substring(sEnd);
        this.$input.setSelectionRange(1, 1);
        this.reformat();
        this.flushTextToValue();
    };

    onKeys.backspace = () => {
        if (this.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;
        this.$input.value = value.substring(0, delStart) + value.substring(delEnd);
        this.$input.setSelectionRange(delStart, delStart);
        this.reformat();
        this.flushTextToValue();
    };

    onKeys.enter = () => {
        if (this.elt.readOnly) return;
        this.flushValueToText();
        this.$input.setSelectionRange(this.$input.value.length, this.$input.value.length);
        this.elt.notifyChanged({ by: 'enter' });
    };


    onKeys.delete = () => {
        if (this.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 ((0,utils.isNaturalNumber)(delStart) && (0,utils.isNaturalNumber)(delEnd)) {
            this.$input.value = value.substring(0, delStart) + value.substring(delEnd);
            this.$input.setSelectionRange(delStart, delStart);
            this.reformat();
            this.flushTextToValue();
        }
    };

    onKeys.decimalSeparator = () => {
        if (this.elt.readOnly) return;
        var idx = value.indexOf(decimalSeparator);
        if (idx >= 0) {
            if (idx < sStart) {
                this.$input.value = value.substring(0, sStart).replace(decimalSeparator, '')
                    + decimalSeparator + value.substring(sEnd);
                this.$input.setSelectionRange(sStart, sStart);
            }
            else if (idx < sEnd) {
                this.$input.value = value.substring(0, sStart)
                    + decimalSeparator + value.substring(sEnd);
                this.$input.setSelectionRange(sStart + 1, sStart + 1);
            }
            else {
                this.$input.value = value.substring(0, sStart)
                    + decimalSeparator + value.substring(sEnd).replace(decimalSeparator, '');
                this.$input.setSelectionRange(sStart + 1, sStart + 1);
            }
        }
        else {
            this.$input.value = value.substring(0, sStart) + decimalSeparator + value.substring(sEnd);
            this.$input.setSelectionRange(sStart + 1, sStart + 1);
        }
        this.reformat();
        this.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);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/int.js
var Math_int = __webpack_require__(7988);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/numberinput/NumberInput.js











var NumberInput_ = ACore/* default._ */.Z._;
var NumberInput_$ = ACore/* default.$ */.Z.$;


/***
 * @typedef NumberInputFormat
 * @property {string} locales
 * @property {string|null} decimalSeparator
 * @property {string|null} thousandSeparator
 */

/***
 * @extends AElement
 * @constructor
 */
function NumberInput() {
    /***
     *
     * @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', () => {
        this.textCtrl.estimateWidthBy(this.$input.value);
    });

    this.dragCtrl = new NIDragController(this);

    /****
     * @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#
     */

    /****
     * @name notNull
     * @type {boolean}
     * @memberOf NumberInput#
     */

    /****
     * @name stepper
     * @type {boolean}
     * @memberOf NumberInput#
     */

    /**
     * @type {number}
     * @name step
     * @memberOf NumberInput#
     */

    /**
     * @type {boolean}
     * @name valueDraggable
     * @memberOf NumberInput#
     */
    this.valueDraggable = false;
    /***
     *
     * @type {number|null}
     * @name rawValue
     */

}

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.addStyle = function (arg0, arg1) {
    if (arg0 === 'textAlign' || arg0 === 'text-align') {
        this.$input.addStyle(arg0, arg1);
        return this;
    }
    else {
        return AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
    }
};


NumberInput.prototype._makeDefaultFormat = function () {
    var res = {
        locales: 'vi-VN',
        maximumFractionDigits: 20,
        minimumFractionDigits: 0,
        pow10: null//only apply if maximumFractionDigits === 0
    };

    if (window['systemconfig'] && window['systemconfig']['numberFormatLocales']) {
        res.locales = window['systemconfig']['numberFormatLocales'];
    }
    return res;
};


/*****17 number********/
NumberInput.prototype.nextStep = function () {
    var ofs = 0;
    if ((0,utils.isRealNumber)(this.min)) {
        ofs = this.min;
    }
    var step = this.step;
    var idx = (0,utils.nearFloor)((this.value - ofs) / step, 0.01);
    this._value = Math.min(step * (idx + 1) + ofs, this.max);
    this._value = (0,Math_int.numberAutoFixed)(this._value, (step + '').length);
    this.textCtrl.flushValueToText();
};

NumberInput.prototype.prevStep = function () {
    var ofs = 0;
    if ((0,utils.isRealNumber)(this.min)) {
        ofs = this.min;
    }
    var step = this.step;

    var idx = (0,utils.nearFloor)((this.value - ofs) /step, 0.01);
    this._value = Math.max(step * (idx - 1) + ofs, this.min);
    this._value = (0,Math_int.numberAutoFixed)(this._value, (step + '').length);
    this.textCtrl.flushValueToText();
};


NumberInput.eventHandler = {};


NumberInput.eventHandler.mouseDownBtn = function (dir, event) {
    if (EventEmitter/* default.isMouseRight */.ZP.isMouseRight(event)) return;
    var self = this;
    var pressing = true;
    var timeout = -1;
    var i = 0;
    this.addClass('as-pressing');

    var tick = () => {
        if (pressing) {
            if (i === 0 || i >= 4) {
                if (dir > 0)
                    this.nextStep();
                else
                    this.prevStep();
                if (i === 0) {
                    this.notifyChanged({ by: 'press_button' });
                }
                else {
                    this.notifyChanged({ by: 'long_press_button' });
                }
            }
            ++i;
            self.__pressingUpTimeout__ = setTimeout(tick, 100);
        }
    }

    var finish = (event) => {
        pressing = false;
        this.removeClass('as-pressing');

        if (timeout >= 0) {
            clearTimeout(timeout);
            timeout = -1;
        }
        document.removeEventListener('mouseup', finish);
        document.removeEventListener('mouseleave', finish);
        if (event.type === 'mouseup') {
            this.$input.focus();
        }
        this.notifyChanged({ originEvent: event, by: 'press_button' });
        this.textCtrl.estimateWidthBy(this.$input.value);
    }

    document.addEventListener('mouseup', finish);
    document.addEventListener('mouseleave', finish);
    tick();
};

NumberInput.prototype.focus = function () {
    this.$input.focus();
}


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.rawValue = {
    get: function () {
        return this._prevValue;
    }
};

NumberInput.property.value = {
    set: function (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 () {
        var value = this._value;
        if (value === null) {
            if (this.notNull) {
                value = 0;
            }
            else {
                return null;
            }
        }

        if (this._format.maximumFractionDigits === 0) {
            if ((0,utils.isNaturalNumber)(this._format.pow10)) {
                value =  Math.round(value / Math.pow(10, this._format.pow10)) *  Math.pow(10, this._format.pow10);
            }
            else {
                value = Math.round(value);
            }
        }
        else if (this._format.maximumFractionDigits < 20)
            value = (0,Math_int.numberAutoFixed)(value, this._format.maximumFractionDigits);
        value = Math.min(this.max, Math.max(value, this.min));
        return value;
    }
};

NumberInput.property.step = {
    set: function (value) {
        if (!(0,utils.isRealNumber)(value)) value = 1;
        if (value === 0) value = 1;
        value = Math.abs(value);
        this._step = value;
    },
    get: function () {
        if (this._format.maximumFractionDigits === 0 && (0,utils.isNaturalNumber)(this._format.pow10)) {
            return Math.max(this._step, Math.pow(10, this._format.pow10));
        }
        return this._step;
    }
};


NumberInput.property.max = {
    set: function (value) {
        if (!(0,utils.isRealNumber)(value)) {
            value = Infinity;
        }
        this._max = value;
        this._prevValue = this.value;
        this.textCtrl.flushValueToText();
    },
    get: function () {
        return Math.max(this._max, this._min);
    }
};

NumberInput.property.min = {
    set: function (value) {
        if (!(0,utils.isRealNumber)(value)) {
            value = -Infinity;
        }
        this._min = value;
        this._prevValue = this.value;
        this.textCtrl.flushValueToText();
    },
    get: function () {
        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 () {
        var lF = this.locales2Format[this._format.locales];
        if (lF) return lF.decimalSeparator;
        return '.';
    },
    set: () => {
    }
};


NumberInput.property.thousandsSeparator = {
    get: function () {
        var lF = this.locales2Format[this._format.locales];
        if (lF) return lF.thousandsSeparator;
        return null;
    },
    set: () => {
    }
};


NumberInput.property.disabled = {
    set: function (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 () {
        return this.$input.disabled;
    }
};

NumberInput.property.readOnly = {
    set: function (value) {
        this.$input.readOnly = !!value;
        if (value)
            this.addClass('as-read-only');
        else
            this.removeClass('as-read-only');
    },
    get: function () {
        return this.$input.readOnly;
    }
};

NumberInput.property.format = {
    /***
     * @this NumberInput
     * @param value
     * @this NumberInput
     */
    set: function (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._prevValue = this.value;
        this.textCtrl.flushValueToText();
    },
    get: function () {
        return this._format;
    }
};


NumberInput.property.floatFixed = {
    set: function (value) {

        if ((0,utils.isRealNumber)(value)) {
            value = Math.round(value);
            if (value >= 0) {
                value = Math.min(value, 20);
                this._format.maximumFractionDigits = value;
                this._format.minimumFractionDigits = value;
                delete this._format.pow10;
            }
            else {
                this._format.maximumFractionDigits = 0;
                this._format.minimumFractionDigits = 0;
                this._format.pow10 = -value;
            }
        }
        else {
            this._format.maximumFractionDigits = 20;
            delete this._format.minimumFractionDigits;
            delete this._format.pow10;
        }
        this._prevValue = this.value;
        this.textCtrl.flushValueToText();
    },
    get: function () {
        if (this._format.maximumFractionDigits === 20) return null;
        if (this._format.maximumFractionDigits === 0 && this._format.pow10 > 0) return -this._format.pow10;
        return this._format.maximumFractionDigits;
    }
};


NumberInput.property.notNull = {
    set: function (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 () {
        return this.hasClass('as-must-not-null');
    }
};

NumberInput.property.stepper = {
    set: function (value) {
        if (value) {
            this.addClass('as-has-stepper');
        }
        else {
            this.removeClass('as-has-stepper');
        }
    },
    get: function () {
        return this.hasClass('as-has-stepper');
    }
}


ACore/* default.install */.Z.install('NumberInput'.toLowerCase(), NumberInput);

/* harmony default export */ const numberinput_NumberInput = (NumberInput);

/**
 *
 * @param {NumberInput} elt
 * @constructor
 */
function NIDragController(elt) {
    this.elt = elt;
    NumberInput_({
        elt: elt,
        tag: Hanger/* default */.Z
    });
    Object.keys(this.constructor.prototype).forEach((key) => {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    });
    this.elt.on({
        dragstart: this.ev_dragStart,
        drag: this.ev_drag,
        dragend: this.ev_dragEnd,
        draginit: this.ev_dragInit
    });
    this.state = 0;
    this.prevDistance = 0;
    this.$mouseLine = null;
}

NIDragController.prototype.ev_dragInit = function (event) {
    if (!this.elt.valueDraggable || EventEmitter/* default.isMouseRight */.ZP.isMouseRight(event.originEvent)) {
        event.cancel();
    }
};

NIDragController.prototype.ev_dragStart = function (event) {
    if (this.elt.valueDraggable === false) return;


};

NIDragController.prototype.ev_drag = function (event) {
    if (this.calcDistance(event) > 0 && !this.isSelecting() && this.state === 0) {
        this.state = 1;
        document.body.classList.add('as-number-input-force-dragging');
        this.$mouseLine = NumberInput_({
            tag: 'div',
            class: 'as-number-input-mouse-line',
            style: {
                zIndex: (0,utils.findMaxZIndex)(this.elt) + 1
            }
        }).addTo(document.body);
    }

    if (this.state !== 1) return;
    var distance = this.calcDistance(event);
    var delta = distance - this.prevDistance;
    if (delta >= 1) {
        this.prevDistance = distance;
        this.elt.nextStep();
    }
    else if (delta <= -1) {
        this.prevDistance = distance;
        this.elt.prevStep();
    }
    var deltaVector = event.currentPoint.sub(event.startingPoint);
    var length = deltaVector.abs();
    var angle = deltaVector.direction();
    this.$mouseLine.addStyle({
        left: event.startingPoint.x + 'px',
        top: event.startingPoint.y + 'px',
        width: length + 'px',
        transform: 'rotate(' + angle + 'rad)',
        transformOrigin: '0 0'
    });

};


NIDragController.prototype.ev_dragEnd = function (event) {
    this.elt.removeClass('as-dragging');
    document.body.classList.remove('as-number-input-force-dragging');
    if (this.$mouseLine) {
        this.$mouseLine.remove();
        this.$mouseLine = null;
    }
    this.state = 0;
    this.elt.emit('change', { by: 'drag' });
};

NIDragController.prototype.isSelecting = function () {
    return this.elt.$input.selectionStart !== this.elt.$input.selectionEnd;
};

NIDragController.prototype.calcDistance = function (event) {
    var bound = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.elt.getBoundingClientRect());
    var mouse = new Vec2/* default */.Z(event.clientX, event.clientY);
    bound.x -= 10;
    bound.y -= 10;
    bound.height += 20;
    bound.width += 20;
    if (bound.containsPoint(mouse)) return 0;
    var res = Infinity;
    if (mouse.x > bound.x && mouse.x < bound.x + bound.width) {
        res = Math.min(res, Math.abs(mouse.y - bound.y), Math.abs(mouse.y - bound.y - bound.height));
    }
    else if (mouse.y > bound.y && mouse.y < bound.y + bound.height) {
        res = Math.min(res, Math.abs(mouse.x - bound.x), Math.abs(mouse.x - bound.x - bound.width));
    }
    else {
        res = Math.min(res,
            mouse.sub(bound.A()).abs(),
            mouse.sub(bound.B()).abs(),
            mouse.sub(bound.C()).abs(),
            mouse.sub(bound.D()).abs(),
        );
    }

    return res;

};


;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/NumberSpanInput.js



var NumberSpanInput_ = ACore/* default._ */.Z._;
var NumberSpanInput_$ = ACore/* default.$ */.Z.$;


/***
 * @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 (value) {
        this.contentEditable = !value;
    },
    get: function () {
        return this.contentEditable === false|| this.contentEditable === 'false';
    }
};

/***
 *
 * @type {NumberSpanInput}
 */
NumberSpanInput.property.value = {
    set: function (value) {
        this._autoAddZero();
        this.firstChild.data = value + '';
    },
    get: function () {
        return (this.firstChild && this.firstChild.data)||'';
    }
}

ACore/* default.install */.Z.install(NumberSpanInput);

/* harmony default export */ const js_NumberSpanInput = (NumberSpanInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/onscreenwindow.css
var onscreenwindow = __webpack_require__(8848);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/WindowBox.js
var WindowBox = __webpack_require__(774);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/OnsScreenWindow.js







var OnsScreenWindow_ = ACore/* default._ */.Z._;
var OnsScreenWindow_$ = ACore/* default.$ */.Z.$;

/***
 * @extends AElement
 * @constructor
 */
function OnScreenWindow() {
    var self = this;
    this._lastSize = {
        width: 0,
        height: 0
    }

    /***
     *
     * @type {WindowBox}
     */
    this.$windowBox = OnsScreenWindow_$(WindowBox/* default.tag */.Z.tag, this);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$windowBox, 'windowTitle');
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$windowBox, 'windowActions');
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$windowBox, 'windowIcon');
    this.$windowBox.on('action', function (event){
        self.emit('action', event, self);
    });

    this.$header = OnsScreenWindow_({ tag: Hanger/* default.tag */.Z.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 () {
        Dom/* default.addToResizeSystem */.ZP.addToResizeSystem(this);
    });
}

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

OnScreenWindow.render = function () {
    return OnsScreenWindow_({
        extendEvent: ['sizechange', 'drag', 'relocation', 'action'],
        class: 'absol-onscreen-window',
        child: [
            {
                tag: WindowBox/* default.tag */.Z.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 (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: (0,Dom/* getScreenSize */.tE)(),
        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 = Dom/* default.getScreenSize */.ZP.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)
    }
};


ACore/* default.install */.Z.install(OnScreenWindow);

/* harmony default export */ const OnsScreenWindow = (OnScreenWindow);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/pageselector.css
var pageselector = __webpack_require__(8526);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PageSelector.js




var PageSelector_ = ACore/* default._ */.Z._;
var PageSelector_$ = ACore/* default.$ */.Z.$;

/***
 * @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)
        .on('change', 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 = {};

/**
 *
 * @param {KeyboardEvent} event
 */
PageSelector.eventHandler.pressEnterKey = function (event) {
    if (event.key !== 'Enter' && event.type !== 'change') return;
    var index = parseInt(this.$pageInput.value.trim(), 10);
    if ((index < 1) || (index > this._pageCount)) {
        index = Math.max(1, Math.min(this._pageCount, index));
        this.$pageInput.value = index;
    }
    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 (value) {
        this.selectPage(value, false);
    },
    get: function () {
        return this._selectedIndex;
    }
};

PageSelector.property.pageCount = {
    set: function (value) {
        this.setPageCount(value);
    },
    get: function () {
        return this._pageCount;
    }
};

PageSelector.property.pageOffset = {
    set: function (value) {
        this.setStartPage(value);
    },
    get: function () {
        return this._pageOffset;
    }
};

PageSelector.property.pageRange = {
    set: function (value) {
        this.setPageRange(value);
    },
    get: function () {
        return this._pageRange;
    }
};

PageSelector.property.simpleMode = {
    set: function (value) {
        if (value) {
            this.addClass('as-simple-mode');
        }
        else {
            this.removeClass('as-simple-mode');
        }
    },
    get: function () {
        return this.hasClass('as-simple-mode');
    }
};


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;
    Object.assign(this, props);
};


ACore/* default.install */.Z.install(PageSelector);

/* harmony default export */ const js_PageSelector = (PageSelector);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/preinput.css
var preinput = __webpack_require__(4981);
// EXTERNAL MODULE: ./node_modules/absol/src/Detector/BrowserDetector.js
var BrowserDetector = __webpack_require__(9399);
// EXTERNAL MODULE: ./node_modules/absol/src/Print/printer.js + 2 modules
var printer = __webpack_require__(2691);
// EXTERNAL MODULE: ./node_modules/absol/src/Print/PrintSerialHandlers.js
var PrintSerialHandlers = __webpack_require__(5421);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PreInput.js








var PreInput_ = ACore/* default._ */.Z._;
var PreInput_$ = ACore/* default.$ */.Z.$;
var textDelay = BrowserDetector/* default.isSafari */.Z.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 Dom/* default.imageToCanvas */.ZP.imageToCanvas(img).then(function (canvas) {
                            var dataURI = canvas.toDataURL();
                            var blob = (0,Converter_file.dataURItoBlob)(dataURI);
                            var file = (0,Converter_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 (value) {
        value = value || '';
        this.applyData(value, value.length);
        this.commitChange(value, value.length);
    },
    get: function () {
        return this.stringOf(this);
    }
};

PreInput.property.disabled = {
    set: function (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 () {
        return this.hasClass('as-disabled');
    }
};


PreInput.property.readOnly = {
    set: function (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 () {
        return this.hasClass('as-read-only');
    }
};


ACore/* default.install */.Z.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/js/ProgressBar.js
var ProgressBar = __webpack_require__(6535);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/quicklistbutton.css
var quicklistbutton = __webpack_require__(5674);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FollowerToggler.js




var FollowerToggler_ = ACore/* default._ */.Z._;
var FollowerToggler_$ = ACore/* default.$ */.Z.$;

/***
 * @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 (EventEmitter/* default.hitElement */.ZP.hitElement(this, event) || EventEmitter/* default.hitElement */.ZP.hitElement(this.$follower, event))
        return;
    this.close();
};


FollowerToggler.eventHandler.click = function () {
    this.toggle();
};

ACore/* default.install */.Z.install(FollowerToggler);

/* harmony default export */ const js_FollowerToggler = (FollowerToggler);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickListButton.js




 var QuickListButton_ = ACore/* default._ */.Z._;
var QuickListButton_$ = ACore/* default.$ */.Z.$;

/****
 * @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 (value) {
        value = value || [];
        this._items = value;
        this._listUpdated = false;
    },
    get: function () {
        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 = Dom/* default.getScreenSize */.ZP.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 }));
};


ACore/* default.install */.Z.install(QuickListButton);

/* harmony default export */ const js_QuickListButton = (QuickListButton);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/SelectList.js
var SelectList = __webpack_require__(133);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/QuickMenu.js
var QuickMenu = __webpack_require__(1274);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/quickpath.css
var quickpath = __webpack_require__(7786);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickPath.js




var QuickPath_ = ACore/* default._ */.Z._;
var QuickPath_$ = ACore/* default.$ */.Z.$;

/***
 * @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) {
        QuickMenu/* default.toggleWhenClick */.Z.toggleWhenClick(buttom,
            {
                getAnchor: function () {
                    return [1, 2, 6, 5];
                },
                getMenuProps: function () {
                    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 () {
                    buttom.status = 'open';
                    thisQuickpath.emit('press', {
                        target: thisQuickpath,
                        pathItem: pathItem,
                        index: index
                    }, thisQuickpath);

                },
                onClose: function () {
                    buttom.status = 'close';
                },
                onSelect: function (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 (value) {
        this._path = value || [];
        this.updatePath();
    },
    get: function () {
        return this._path || [];
    }
};


QuickPath.property.textPath = {
    get: function () {
        return this.path.join('/');
    }
};

ACore/* default.install */.Z.install('quickpath', QuickPath);

/* harmony default export */ const js_QuickPath = (QuickPath);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/RadioButton.js
var RadioButton = __webpack_require__(7234);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Radio.js
var Radio = __webpack_require__(7002);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/XHR.js
var XHR = __webpack_require__(6069);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RemoteSvg.js



var RemoteSvg_ = ACore/* default._ */.Z._;
var RemoteSvg_$ = ACore/* default.$ */.Z.$;


function RemoteSvg() {

}

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

RemoteSvg.render = function () {
    return RemoteSvg_('svg').defineEvent('load');
};

RemoteSvg.property = {
    src: {
        set: function (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 () {
            return this._name;
        }
    }
};


RemoteSvg.attribute = {
    src: {
        set: function (value) {

        },
        get: function () {

        },
        remove: function () {

        }
    }
};

RemoteSvg.__cache__ = {};

RemoteSvg.__div_parser__ = document.createElement('div');

RemoteSvg.loadIcon = function (path) {
    if (RemoteSvg.__cache__[path]) {
        return RemoteSvg.__cache__[path];
    }
    else {
        RemoteSvg.__cache__[path] = XHR/* default.getRequest */.Z.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];
    }

};


ACore/* default.install */.Z.install(RemoteSvg);


/* harmony default export */ const js_RemoteSvg = (RemoteSvg);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ResizeBox.js
var ResizeBox = __webpack_require__(4860);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Searcher.js
var Searcher = __webpack_require__(9024);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectbox.css
var selectbox = __webpack_require__(7694);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectmenu.css
var selectmenu = __webpack_require__(7001);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectMenu2.js











ACore/* default.creator.dropdown-ico */.Z.creator["dropdown-ico"] = function () {
    return (0,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 = (0,ACore.$)('.absol-selectmenu-holder-item', this);
    this.$viewItem = (0,ACore.$)('.absol-selectmenu-holder-item selectlistitem', this);
    /***
     *
     * @type {SelectListBox}
     */
    this.$selectlistBox = (0,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 = () => {
        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;
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$selectlistBox, 'enableSearch');
    OOP/* default.drillProperty */.ZP.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 (0,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.addStyle = function (arg0, arg1) {
    if (arg0 === 'textAlign' || arg0 === 'text-align') {
        if (arg1 === 'center') {
            this.addClass('as-text-align-center');
            this.$selectlistBox.addClass('as-text-align-center');
        }
        else {
            this.removeClass('as-text-align-center');
            this.$selectlistBox.removeClass('as-text-align-center');
        }
    }
    else {
        return AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
    }
};

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 () {
    setTimeout(() => {
        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 && (0,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.findItemByValue = function (value) {
    return this.$selectlistBox.findItemByValue(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 (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 () {
        return this.$selectlistBox.items;
    }
};

SelectMenu.property.value = {
    set: function (value) {
        this.$selectlistBox.values = [value];
        this._lastValue = value;
        this._value = value;
        this.updateItem();
    },
    get: function () {
        return this._explicit(this._value);
    }
};

/***
 *
 * @type {SelectMenu|{}}
 */
SelectMenu.property.isFocus = {
    set: function (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 () {
                if (!BrowserDetector/* default.isMobile */.Z.isMobile)
                    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 () {
        return this._isFocus;
    }
};


SelectMenu.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};


SelectMenu.property.hidden = {
    set: function (value) {
        if (value) {
            this.addClass('as-hidden');
        }
        else {
            this.removeClass('as-hidden');
        }
    },
    get: function () {
        return this.addClass('as-hidden');
    }
};

SelectMenu.property.selectedIndex = {
    get: function () {
        var selectedItems = this.$selectlistBox.findItemsByValue(this._value);
        if (selectedItems.length > 0) {
            return selectedItems[0].idx;
        }
        return -1;
    }
};


SelectMenu.property.strictValue = {
    set: function (value) {
        if (value) {
            this.attr('data-strict-value', null);
        }
        else {
            this.attr('data-strict-value', 'false');
        }
        this.updateItem();
    },
    get: function () {
        return !this.attr('data-strict-value') || (this.attr('data-strict-value') !== 'false' && this.attr('data-strict-value') !== '0');
    }
};

SelectMenu.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};


/**
 * @type {SelectMenu|{}}
 */
SelectMenu.eventHandler = {};


SelectMenu.eventHandler.click = function (event) {
    if (this.readOnly) return;
    if (EventEmitter/* default.isMouseRight */.ZP.isMouseRight(event)) return;
    if (EventEmitter/* default.hitElement */.ZP.hitElement(this.$selectlistBox, event)) return;
    this.isFocus = !this.isFocus;
};


SelectMenu.eventHandler.bodyClick = function (event) {
    if (!EventEmitter/* default.hitElement */.ZP.hitElement(this, event) && !EventEmitter/* default.hitElement */.ZP.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 = (0,Dom/* getScreenSize */.tE)();
    var availableTop = bound.top - 5;
    var availableBot = screenSize.height - 5 - bound.bottom;
    this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
    var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(this);
    if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
        if (!BrowserDetector/* default.isMobile */.Z.isMobile)
        this.isFocus = false;
    }
};


ACore/* default.install */.Z.install(SelectMenu);

/* harmony default export */ const SelectMenu2 = (SelectMenu);

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectBoxItem.js






var SelectBoxItem_ = ACore/* default._ */.Z._;
var SelectBoxItem_$ = ACore/* default.$ */.Z.$;


/***
 * @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 (!EventEmitter/* default.hitElement */.ZP.hitElement(this.$close, event)) {
        this.emit('press', event, this);
    }
};

SelectBoxItem.property = {};

SelectBoxItem.property.data = {
    set: function (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 () {
        return this._data;
    }
};

SelectBoxItem.property.text = {
    get: function () {
        if (typeof this._data == 'string')
            return this._data;
        else return this._data.text;
    }
};

SelectBoxItem.property.value = {
    get: function () {
        if (typeof this._data == 'string')
            return this._data;
        else return this._data.value;
    }
};

SelectBoxItem.property.theme = {
    get: function () {
        return this._data.theme || null;
    }
};

SelectBoxItem.property.active = {
    set: function (value) {
        if (value) {
            this.addClass('as-active');
        } else {
            this.removeClass('as-active');
        }
    },
    get: function () {
        return this.hasClass('as-active');
    }
};


ACore/* default.install */.Z.install(SelectBoxItem);

/* harmony default export */ const js_SelectBoxItem = (SelectBoxItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectlistbox.css
var selectlistbox = __webpack_require__(6250);
;// 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 || {});
}
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/list/ListSearchMaster.js + 1 modules
var ListSearchMaster = __webpack_require__(4623);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectListBox.js










var SelectListBox_ = ACore/* default._ */.Z._;
var SelectListBox_$ = ACore/* default.$ */.Z.$;
var SelectListBox_$$ = ACore/* default.$$ */.Z.$$;

var VALUE_HIDDEN = -1;
var VALUE_NORMAL = 1;

var calcWidthLimit = () => {
    var width = (0,Dom/* getScreenSize */.tE)().width;
    if (BrowserDetector/* default.isMobile */.Z.isMobile) {
        width -= 20;
    }
    else {
        width = width * 0.9 - 250;
    }
    return Math.min(width, 1280);
}

var makeSearchItem = (it, idx2key) => {
    var res = { value: idx2key.length };
    var valueKey;
    res.text = it.text + '';
    if (it.desc) res.text += it.desc;
    valueKey = (0,utils.keyStringOf)(it.value);
    it.valueKey = valueKey;
    idx2key.push(valueKey);
    if (it.items && it.items.length > 0 && it.items.map) {
        res.items = it.items.map(cIt=>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;
    }
    /* return
    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 DelaySignal/* default */.Z();
    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();
        (0,SelectList/* releaseItem */.Ag)(itemElt);
    }
    while (pageElt.childNodes.length < n) {
        itemElt = (0,SelectList/* requireItem */.wA)(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 = (0,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) {
    if (!this.isDescendantOf(document.body)) {
        this.$attachhook.once('attached', ()=>{
            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 = (0,Dom/* getScreenSize */.tE)();
    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) {
    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(searchResult => {
        if (!searchResult) return;
        var scoreOf = it => {
            var idx = this.key2idx [it.valueKey];
            var sc = searchResult[idx];
            if (!sc) return -Infinity;
            return Math.max(sc[0], sc[1]) * 1000000 - idx;
        }
        var makeList = originItems => {
            var items = originItems.filter(it => {
                var idx = this.key2idx [it.valueKey];
                if (searchResult[idx]) return true;
                return false;
            }).map(it => {
                var cpItem = Object.assign({}, it);
                if (it.items) cpItem.items = makeList(it.items);
                return cpItem;
            });

            items.sort((a, b) => scoreOf(b) - scoreOf(a));

            return items;
        }
        return makeList(this._items);
    });

    return this._searchCache[text];
};

SelectListBox.prototype.resetSearchState = function () {
    this.$searchInput.value = '';
    this._preDisplayItems = this._itemsToNodeList(this._items);
    this._updateDisplayItem();
    this.domSignal.emit('viewListAt', 0);
    this.$listScroller.scrollTop = 0;
};

SelectListBox.prototype.notifyPressOut = function () {
    this.emit('pressout', { target: this, type: 'pressout' }, this);
};

SelectListBox.prototype.notifyPressClose = function () {
    this.emit('pressclose', { target: this, type: 'pressclose' }, this);
};

SelectListBox.prototype._findFirstPageIdx = function () {
    for (var i = 0; i < this.preLoadN; ++i) {
        if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) {
            return i;
        }
    }
    return -1;
};

SelectListBox.prototype._findLastPageIdx = function () {
    for (var i = this.preLoadN - 1; i >= 0; --i) {
        if (this._pageOffsets[i + 1] - this._pageOffsets[i] > 0) {
            return i;
        }
    }
    return -1;
};

SelectListBox.prototype._updateDisplayItemIndex = function () {
    this._displayItemHolderByValue = indexingByValue(this._displayItems, {});
};

SelectListBox.prototype._updateItemNodeIndex = function () {
    this._itemNodeHolderByValue = depthIndexingByValue(this._items);
};

SelectListBox.prototype._updateDisplayItem = function () {
    this._displayItems = this._filterDisplayItems(this._preDisplayItems);
    this._updateDisplayItemIndex();
    this.$content.addStyle({
        'height': this._displayItems.length * this.itemHeight / 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 = (0,SelectList/* measureListSize */.bw)(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 () {
    if (!this.searchMaster) return;
    this.idx2key = [];
    this.searchingItems = this._items.map(it => makeSearchItem(it, this.idx2key));
    this.key2idx = this.idx2key.reduce((ac, cr, i) => {
        ac[cr] = i;
        return ac;
    }, {});
    this.searchMaster.transfer(this.searchingItems);
};

SelectListBox.prototype.prepareSearch = function () {
    if (!this.searchMaster) {
        this.searchMaster = new ListSearchMaster/* default */.Z();
        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.prototype.findItemByValue = function (value) {
    var t = this._itemNodeHolderByValue[value];
    if (t && t.length > 0) {
        return t[0].item;
    }
    else return null;
};

SelectListBox.property = {};

/***
 *
 * @type {SelectListBox|{}}
 */
SelectListBox.property.items = {
    set: function (items) {
        items = items || [];
        if (!(items instanceof Array)) items = [];
        items = (0,utils.copySelectionItemArray)(items, { removeNoView: true, removeNewLine: true });

        this._items = items;
        this._itemNodeList = this._itemsToNodeList(this._items);
        this._updateItemNodeIndex();
        this._updateItems();
        this.viewListAt(0);
    },
    get: function () {
        return this._items;
    }
}


SelectListBox.property.values = {
    set: function (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 () {
        return this._explicit(this._values);
    }
};


SelectListBox.property.strictValue = {
    set: function (value) {
        if (value) {
            this.addClass('as-strict-value');
        }
        else {
            this.removeClass('as-strict-value');
        }
    },
    get: function () {
        return this.hasClass('as-strict-value');
    }
};

SelectListBox.property.displayValue = {
    set: function (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 () {
        return this._displayValue;
    }
}

SelectListBox.property.enableSearch = {
    set: function (value) {
        if (value) this.addClass('as-enable-search');
        else this.removeClass('as-enable-search');
    },
    get: function () {
        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 text = this.$searchInput.value;
    var searchSession = Math.random() + '';
    this._searchSession = searchSession;
    this.searchItemByText(text).then(searchedItems => {
        if (searchSession !== this._searchSession) return;
        this._preDisplayItems = this._itemsToNodeList(searchedItems);
        this._displayItems = this._filterDisplayItems(this._preDisplayItems);
        this.$content.addStyle({
            'height': this._displayItems.length * this.itemHeight / 14 + 'em'
        });
        this._updateItemNodeIndex();
        this.viewListAt(0);
        this.$listScroller.scrollTop = 0;
        this.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 = (0,Dom/* getScreenSize */.tE)();
    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();
        }
    }
};

ACore/* default.install */.Z.install(SelectListBox);

/* harmony default export */ const js_SelectListBox = (SelectListBox);

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectBox.js











var SelectBox_ = ACore/* default._ */.Z._;
var SelectBox_$ = ACore/* default.$ */.Z.$;


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 makeItem() {
    return SelectBox_({
        tag: 'selectboxitem',
        on: {
            close: pressCloseEventHandler,
            press: pressHandler
        }
    });
}

var itemPool = [];

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;
    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
        }
    });
    OOP/* default.drillProperty */.ZP.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 = requireItem(this);
        this.addChild(itemElt);
        this.$items.push(itemElt);
    }

    while (this.$items.length > n) {
        itemElt = this.$items.pop();
        this.removeChild(itemElt);
        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) {
        ResizeSystem/* default.updateUp */.Z.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 (items) {
        items = items || [];
        this.$selectlistBox.items = items;
        this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth + 'px');
        this._updateItems();
    },
    get: function () {
        return this.$selectlistBox.items
    }
};

SelectBox.property.values = {
    set: function (values) {
        values = values || [];
        values = (values instanceof Array) ? values : [values];
        this._values = values;
        this.$selectlistBox.values = values;
        this._updateItems();
    },
    get: function () {
        return this._values || [];
    }
};

SelectBox.property.orderly = {
    set: function (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 () {
        return !!this._orderly;
    }
};

SelectBox.property.disableClickToFocus = {
    set: function (value) {
        if (value) {
            this.addClass('as-disable-click-to-focus');
        } else {
            this.removeClass('as-disable-click-to-focus');
        }
    },
    get: function () {
        return this.hasClass('as-disable-click-to-focus');
    }
};

SelectBox.property.itemFocusable = {
    set: function (value) {
        if (value) {
            this.addClass('as-item-focusable');
        } else {
            this.removeClass('as-item-focusable');
        }
        this._updateFocusItem();
    },
    get: function () {
        return this.hasClass('as-item-focusable');
    }
};

SelectBox.property.activeValue = {
    set: function (value) {
        this._activeValue = value;
        if (this.itemFocusable) {
            this._updateFocusItem();
            //todo
        }
    },
    get: function () {
        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 (!EventEmitter/* default.hitElement */.ZP.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);
    }
};

ACore/* default.install */.Z.install(SelectBox);

/* harmony default export */ const js_SelectBox = (SelectBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttable.css
var selecttable = __webpack_require__(32);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringMatching.js
var stringMatching = __webpack_require__(991);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringFormat.js
var stringFormat = __webpack_require__(6382);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTable.js











var privateDom = new Dom/* default */.ZP().install(ACore/* default */.Z);
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();
    };
    Dom/* default.addToResizeSystem */.ZP.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', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, {}), this);
    this.updateScroller();
};

SelectTable.eventHandler.removeAllBtnClick = function (event) {
    this.removeAll();
    if (this.searching) {
        this.eventHandler.searchTextInputModify(event);
    }
    this.emit('removeall', EventEmitter/* default.copyEvent */.ZP.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 = (0,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 ((0,stringFormat.nonAccentVietnamese)(b.text) > (0,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 = ((0,stringMatching.phraseMatch)(text, filterText)
                + (0,stringMatching.phraseMatch)((0,stringFormat.nonAccentVietnamese)(text), (0,stringFormat.nonAccentVietnamese)(filterText))) / 2;
            if ((0,stringFormat.nonAccentVietnamese)(text).replace(/s/g, '').toLowerCase().indexOf((0,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 ((0,stringFormat.nonAccentVietnamese)(b.text) > (0,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 (value) {
        if (value)
            this.addClass('disable-move-all');
        else
            this.removeClass('disable-move-all');
    },
    get: function () {
        return this.hasClass('disable-move-all');
    }
};

SelectTable.property.removeAllText = {
    set: function (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 () {
        return this._removeAllText || 'Remove All'
    }
};

SelectTable.property.addAllText = {
    set: function (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 () {
        return this._addAllText || 'Add All'
    }
};

SelectTable.property.searching = {
    set: function (value) {
        if (value) {
            this.addClass('searching');
        }
        else {
            this.removeClass('searching');
        }
        this.updateScroller();
    },
    get: function () {
        return this.hasClass('searching');
    }
};


SelectTable.property.sorted = {
    set: function (value) {
        this._sort = value;
        this.requestSort();

    },
    get: function () {
        return this._sort;
    }
};

SelectTable.property.selectedItems = {
    set: function (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 (event) {
                            if (this.parentElement == $selectedItemsContainer) {
                                this.addTo($nonselectedItemsContainer);
                                self.emit('remove', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            else {
                                this.addTo($selectedItemsContainer);
                                self.emit('add', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            self.updateScroller();
                            self.requestSort();

                        }
                    }
                }).addTo(this.$selectedItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
        this.requestSort();
    },
    get: function () {
        return Array.prototype.map.call(this.$selectedItemsContainer.childNodes, function (e) {
            return e.data;
        });
    }

}

SelectTable.property.nonselectedItems = {
    set: function (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 (event) {
                            if (this.parentElement == $selectedItemsContainer) {
                                this.addTo($nonselectedItemsContainer);
                                self.emit('remove', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            else {
                                this.addTo($selectedItemsContainer);
                                self.emit('add', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            self.updateScroller();
                            self.requestSort();
                        }
                    }
                }).addTo(this.$nonselectedItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
        this.requestSort();
    },
    get: function () {
        return Array.prototype.map.call(this.$nonselectedItemsContainer.childNodes, function (e) {
            return e.data;
        });
    }
};


SelectTable.property.selectedSearchItems = {
    set: function (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 (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', EventEmitter/* default.copyEvent */.ZP.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', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), table);

                            }
                            table.updateScroller();
                            table.requestSort();
                        }
                    }
                }).addTo(this.$selectedSearchItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
    },
    get: function () {
        return Array.prototype.map.call(this.$selectedSearchItemsContainer.childNodes, function (e) {
            return e.data;
        });
    }

}

SelectTable.property.nonselectedSearchItems = {
    set: function (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 (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', EventEmitter/* default.copyEvent */.ZP.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', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), table);

                            }
                            table.updateScroller();
                            table.requestSort();

                        }
                    }
                }).addTo(this.$nonselectedSearchItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
    },
    get: function () {
        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 = OOP/* default.bindFunctions */.ZP.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 (!EventEmitter/* default.hitElement */.ZP.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 (value) {
        this._data = value;
        if (value) {
            var text;
            if (typeof value == "string") {
                text = value;
            }
            else {
                text = value.text;
            }
            this.$text.innerHTML = text;
        }
    },
    get: function () {
        return this._data;
    }
};

Item.property.text = {
    get: function () {
        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 Svg/* default.ShareInstance.buildSvg */.ZP.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 Svg/* default.ShareInstance.buildSvg */.ZP.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;


ACore/* default.install */.Z.install(SelectTable);

/* harmony default export */ const js_SelectTable = (SelectTable);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTable2.js










var SelectTable2_privateDom = new Dom/* default */.ZP().install(ACore/* default */.Z).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', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, {}), this);
    this.updateScroller();
};

SelectTable2.eventHandler.removeAllBtnClick = function (event) {
    this.removeAll();
    if (this.searching) {
        this.eventHandler.searchTextInputModify(event);
    }
    this.emit('removeall', EventEmitter/* default.copyEvent */.ZP.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 = (0,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 ((0,stringFormat.nonAccentVietnamese)(b.text) > (0,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 = ((0,stringMatching.phraseMatch)(text, filterText)
                + (0,stringMatching.phraseMatch)((0,stringFormat.nonAccentVietnamese)(text), (0,stringFormat.nonAccentVietnamese)(filterText))) / 2;
            if ((0,stringFormat.nonAccentVietnamese)(text).replace(/s/g, '').toLowerCase().indexOf((0,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 ((0,stringFormat.nonAccentVietnamese)(b.text) > (0,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 (value) {
        if (value)
            this.addClass('disable-move-all');
        else
            this.removeClass('disable-move-all');
    },
    get: function () {
        return this.hasClass('disable-move-all');
    }
};

SelectTable2.property.removeAllText = {
    set: function (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 () {
        return this._removeAllText || 'Remove All'
    }
};

SelectTable2.property.addAllText = {
    set: function (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 () {
        return this._addAllText || 'Add All'
    }
};

SelectTable2.property.searching = {
    set: function (value) {
        if (value) {
            this.addClass('searching');
        }
        else {
            this.removeClass('searching');
        }
        this.updateScroller();
    },
    get: function () {
        return this.hasClass('searching');
    }
};


SelectTable2.property.sorted = {
    set: function (value) {
        this._sort = value;
        this.requestSort();

    },
    get: function () {
        return this._sort;
    }
};

SelectTable2.property.selectedItems = {
    set: function (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 (event) {
                            if (this.parentElement == $selectedItemsContainer) {
                                this.addTo($nonselectedItemsContainer);
                                self.emit('remove', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            else {
                                this.addTo($selectedItemsContainer);
                                self.emit('add', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            self.updateScroller();
                            self.requestSort();

                        }
                    }
                }).addTo(this.$selectedItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
        this.requestSort();
    },
    get: function () {
        return Array.prototype.map.call(this.$selectedItemsContainer.childNodes, function (e) {
            return e.data;
        });
    }

}

SelectTable2.property.nonselectedItems = {
    set: function (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 (event) {
                            if (this.parentElement == $selectedItemsContainer) {
                                this.addTo($nonselectedItemsContainer);
                                self.emit('remove', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            else {
                                this.addTo($selectedItemsContainer);
                                self.emit('add', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), self);
                            }
                            self.updateScroller();
                            self.requestSort();
                        }
                    }
                }).addTo(this.$nonselectedItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
        this.requestSort();
    },
    get: function () {
        return Array.prototype.map.call(this.$nonselectedItemsContainer.childNodes, function (e) {
            return e.data;
        });
    }
};


SelectTable2.property.selectedSearchItems = {
    set: function (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 (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', EventEmitter/* default.copyEvent */.ZP.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', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), table);

                            }
                            table.updateScroller();
                            table.requestSort();
                        }
                    }
                }).addTo(this.$selectedSearchItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
    },
    get: function () {
        return Array.prototype.map.call(this.$selectedSearchItemsContainer.childNodes, function (e) {
            return e.data;
        });
    }

}

SelectTable2.property.nonselectedSearchItems = {
    set: function (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 (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', EventEmitter/* default.copyEvent */.ZP.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', EventEmitter/* default.copyEvent */.ZP.copyEvent(event, { item: item }), table);

                            }
                            table.updateScroller();
                            table.requestSort();

                        }
                    }
                }).addTo(this.$nonselectedSearchItemsContainer);
            }.bind(this))
        }
        else {
            // error
        }
        this.updateScroller();
    },
    get: function () {
        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 = OOP/* default.bindFunctions */.ZP.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 (!EventEmitter/* default.hitElement */.ZP.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 (value) {
        this._data = value;
        if (value) {
            var text;
            if (typeof value == "string") {
                text = value;
            }
            else {
                text = value.text;
            }
            this.$text.innerHTML = text;
        }
    },
    get: function () {
        return this._data;
    }
};

SelectTable2_Item.property.text = {
    get: function () {
        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

ACore/* default.install */.Z.install('selecttable2', SelectTable2);
/* harmony default export */ const js_SelectTable2 = (SelectTable2);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/spaninput.css
var spaninput = __webpack_require__(5351);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SpanInput.js





var SpanInput_ = ACore/* default._ */.Z._;
var SpanInput_$ = ACore/* default.$ */.Z.$;


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, '');
        (0,utils.insertTextAtCursor)(text);
        if (this._inputType == 1) {
            if (isNaN(this.value)) {
                this.value = NaN;
            }
        }
    }
};


SpanInput.property = {};
SpanInput.property.value = {
    set: function (value) {
        if (this._inputType == 1 && isNaN(value)) value = null;
        this.clearChild();
        if (value !== null) this.addChild(SpanInput_({ text: value + '' }));
    },
    get: function () {
        if (this._inputType == 1) {
            return parseFloat(this.text);
        }
        else {
            return this.text;
        }
    }
};

SpanInput.property.type = {
    set: function (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 () {
        return ['text', 'number'][this._inputType];
    }
};


SpanInput.property.text = {
    get: function () {
        return (0,Text.getTextIn)(this);
    }
}

SpanInput.tag = 'spaninput';

SpanInput.render = function () {
    return SpanInput_('span.absol-span-input[contenteditable="true"]');
};


ACore/* default.install */.Z.install(SpanInput);

/* harmony default export */ const js_SpanInput = (SpanInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/statictabbar.css
var statictabbar = __webpack_require__(4322);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/StaticTabbar.js





var StaticTabbar_$ = ACore/* default.$ */.Z.$;
var StaticTabbar_ = ACore/* default._ */.Z._;


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, value: this.value }, self);
}

StaticTabbar.property = {};

StaticTabbar.property.items = {
    set: function (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 || (0,stringGenerate.randomIdent)());
            var button = StaticTabbar_({
                tag: 'button',
                class: 'absol-static-tabbar-button',
                id: 'tab-' + ident,
                child: {
                    tag: 'span',
                    child: { text: tab.text }
                },
                on: {
                    click: function (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 () {
        return this._items || [];
    }
};


StaticTabbar.property.value = {
    set: function (value) {
        this._value = value;
        if (this.$buttons.length > 0) {
            this.sync.then(this.activeTab.bind(this, value));
        }
    },
    get: function () {
        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'
        });
    }
};

ACore/* default.install */.Z.install('statictabbar', StaticTabbar);

/* harmony default export */ const js_StaticTabbar = (StaticTabbar);



// EXTERNAL MODULE: ./node_modules/absol-acomp/css/switch.css
var css_switch = __webpack_require__(8252);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Switch.js





var Switch_ = ACore/* default._ */.Z._;
var Switch_$ = ACore/* default.$ */.Z.$;


function Switch() {
    var thisS = this;
    this.$input = Switch_$('input', this);
    this.$input.on('click', function (event) {
        thisS.emit('change', event, thisS);
    });
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$input, 'checked');
    OOP/* default.drillProperty */.ZP.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 (value) {
            if (value == 'false' || value == null) {
                this.checked = false;
            }
            else {
                this.checked = true;
            }

        },
        get: function () {
            return this.checked ? 'true' : 'false'
        },
        remove: function () {
            this.checked = false;
        }
    },
    disabled: {
        set: function (value) {
            if (value == 'false' || value == null) {
                this.disabled = false;
            }
            else {
                this.disabled = true;
            }

        },
        get: function () {
            return this.disabled ? 'true' : 'false'
        },
        remove: function () {
            this.disabled = false;
        }
    }
};


Switch.property = {
    disabled: {
        set: function (value) {
            this.$input.disabled = !!value;
            if (value) {
                this.addClass('disabled');
            }
            else {
                this.removeClass('disabled');
            }
        },
        get: function () {
            return this.$input.disabled;
        }
    },
    readOnly: CheckBoxInput/* default.property.readOnly */.Z.property.readOnly
};

ACore/* default.install */.Z.install('switch', Switch);

/* harmony default export */ const js_Switch = (Switch);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/CheckboxButton.js
var CheckboxButton = __webpack_require__(4654);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tablescroller.css
var tablescroller = __webpack_require__(5436);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tablescroller/TSLMoveTool.js
/***
 *
 * @param {TableScroller} elt
 * @constructor
 */




function TSLMoveTool(elt) {
    this.elt = elt;
    this.$table = null;
    Object.keys(TSLMoveTool.prototype).forEach((key) => {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    });


    this.init();
}

TSLMoveTool.prototype.init = function () {
    this.elt = (0,ACore._)({
        tag: Hanger/* default */.Z,
        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 = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.elt.$originTableBody.getBoundingClientRect()).y;
    var oldY = this.dragData.bodyBound.y;
    var dy = newY - oldY;
    var yArr = this.dragData.rowBounds.map((rect) => 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 = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.dragData.original.getBoundingClientRect());
    var bodyBound = Rectangle/* default.fromClientRect */.Z.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, elt => Rectangle/* default.fromClientRect */.Z.fromClientRect(elt.getBoundingClientRect()));


};

TSLMoveTool.prototype.ev_drag = function (event) {
    if (!this.dragData) return;
    var bodyBound = Rectangle/* default.fromClientRect */.Z.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, ${transform.y}px )`);
    this.dragData.copy.addStyle('transform', `translate(0, ${transform.y}px )`);
    this.dragData.hiddenCells = Array.prototype.filter.call(this.dragData.original.childNodes, e => e.tagName === 'TD')
        .slice(0, this.elt.fixedCol);
    this.dragData.hiddenCells.forEach(e => (0,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((elt, i) => {
        if (elt === originalRow) return;
        var copyElt = this.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, ${dy}px)`);
        copyElt.addStyle('transform', `translate(0, ${dy}px)`);
    });


};

TSLMoveTool.prototype.ev_dragEnd = function (event) {
    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(e => e.removeClass('as-transparent-fix'));
    var rows = this.elt.$originTableBody.childNodes;
    rows.forEach(elt => {
        var copyElt = this.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) {
            (0,ACore.$)(at.parentElement).addChildAfter(this.dragData.original, at);
            (0,ACore.$)(copyAt.parentElement).addChildAfter(this.dragData.copy, copyAt);
        }
        else {
            (0,ACore.$)(at.parentElement).addChildBefore(this.dragData.original, at);
            (0,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: (0,ACore.$)(this.elt.originalRows[id]),
        copy: (0,ACore.$)(this.elt.leftCopyRows[id])
    }
};

/* harmony default export */ const tablescroller_TSLMoveTool = (TSLMoveTool);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/tablescroller/TableScroller.js








var TableScroller_$ = ACore/* default.$ */.Z.$;
var TableScroller_ = ACore/* default._ */.Z._;


var 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 () {
        Dom/* default.addToResizeSystem */.ZP.addToResizeSystem(this);
    });

    this.$domSignal = TableScroller_('attachhook');
    this.appendChild(this.$domSignal);
    this.domSignal = new DomSignal/* default */.ZP(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 

Dom/* default.getScrollSize */.ZP.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');
    Dom/* default.updateResizeSystem */.ZP.updateResizeSystem();
    setTimeout(Dom/* default.updateResizeSystem.bind */.ZP.updateResizeSystem.bind(Dom/* default */.ZP), 30);// css load delay
});

TableScroller.eventHandler = {};


TableScroller.prototype.clearChild = function () {
    this.$fixXCol.clearChild();
    this.$fixedYHeader.clearChild();
    this.$fixedXYHeader.clearChild();
    if (this.$originTable) this.$originTable.remove();
    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();
        (0,utils.swapChildrenInElt)(pair[0], pair[1]);
    }
};


TableScroller.prototype._makeDataIdent = function () {
    this.originalRows = {};
    Array.prototype.slice.call(this.$originTableBody.childNodes).forEach((elt, i) => {
        var id;
        if (elt.tagName === 'TR') {
            id = elt.getAttribute('data-id') || (0,stringGenerate.randomIdent)(12) + '_' + i;
            elt.setAttribute('data-id', id);
            this.originalRows[id] = TableScroller_$(elt);
        }
        else {
            elt.remove();
        }
    });
};


TableScroller.prototype._updateFixedYHeader = function () {
    var head = TableScroller_$(this.$originTableThead.cloneNode(false));
    var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, elt => elt.tagName === 'TR')
        .map(tr => {
            var copyTr = TableScroller_$(tr.cloneNode(false));
            copyTr.$origin = tr;
            var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD')
                .map(td => TableScroller_$(Object.assign(td.cloneNode(true), { $origin: td })));
            copyTr.addChild(cells);
            sliceCellArray(cells, this.fixedCol).forEach(elt => {
                (0,utils.swapChildrenInElt)(elt, elt.$origin);
                this._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');
    if (this.$fixedYHeader.firstChild && this.$fixedYHeader.firstChild.firstChild)
        Array.prototype.forEach.call(this.$fixedYHeader.firstChild.firstChild.childNodes, 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');
            }
        });
    var headBound = this.$originTableThead.getBoundingClientRect();
    this.$fixedYHeader.addStyle('height', headBound.height + 'px');
    // this.$fixedYHeader

    this.$headLine.addStyle('top',headBound.height - 1 + 'px')
        .addStyle('max-width', bound.width + 'px');

};


TableScroller.prototype._updateFixedXCol = function () {
    this.$fixXCol.clearChild();
    var head = TableScroller_$(this.$originTableThead.cloneNode(false));
    var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, elt => elt.tagName === 'TR')
        .map(tr => {
            var copyTr = TableScroller_$(tr.cloneNode(false));

            copyTr.$origin = tr;
            var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD');
            cells = sliceCellArray(cells, 0, this.fixedCol)
                .map(td => 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, elt => elt.tagName === 'TR')
        .map(tr => {
            var copyTr = TableScroller_$(tr.cloneNode(false));
            copyTr.$origin = tr;
            var id = copyTr.attr('data-id');
            this.leftCopyRows[id] = copyTr;
            var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD');
            cells = sliceCellArray(cells, 0, this.fixedCol)
                .map(td => TableScroller_$(Object.assign(td.cloneNode(true), { $origin: td })));
            cells.forEach(elt => {
                (0,utils.swapChildrenInElt)(elt, elt.$origin);
                this._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');
    var width = 0;
    Array.prototype.forEach.call(this.$fixXCol.firstChild.childNodes, elt => {
        elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px');
    });

    Array.prototype.forEach.call(this.$fixXCol.firstChild.firstChild.childNodes, elt => {
        var bound = elt.$origin.getBoundingClientRect();
        width += bound.width + 1;//1 is border
        elt.addStyle('width', bound.width + 'px');
    });
    Array.prototype.forEach.call(this.$fixXCol.lastChild.childNodes, elt => {
        elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px');
    });
    this.$fixXCol.addStyle('width', width + 'px');
    this.$fixedXYHeader.addStyle('width', width + 'px');
};

TableScroller.prototype._updateFixedXYHeader = function () {
    var head = TableScroller_$(this.$originTableThead.cloneNode(false));
    var headRows = Array.prototype.filter.call(this.$originTableThead.childNodes, elt => elt.tagName === 'TR')
        .map(tr => {
            var copyTr = TableScroller_('tr');
            copyTr.$origin = tr;
            var cells = Array.prototype.filter.call(tr.childNodes, elt => elt.tagName === 'TH' || elt.tagName === 'TD');
            cells = sliceCellArray(cells, 0, this.fixedCol)
                .map(td => TableScroller_$(Object.assign(td.cloneNode(true), { $origin: td })));
            copyTr.addChild(cells);
            cells.forEach(cell => {
                (0,utils.swapChildrenInElt)(cell, cell.$origin);
                this._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 () {
    if (this.$fixedXYHeader.firstChild) {
        Array.prototype.forEach.call(this.$fixedXYHeader.firstChild.childNodes, elt => {
            elt.addStyle('height', elt.$origin.getBoundingClientRect().height + 'px');
        });
    }
    if (this.$fixedXYHeader.firstChild && this.$fixedXYHeader.firstChild.firstChild)
        Array.prototype.forEach.call(this.$fixedXYHeader.firstChild.firstChild.childNodes, elt => {
            elt.addStyle('width', elt.$origin.getBoundingClientRect().width + 'px');
        });
    this.$leftLine.addStyle('left', this.$fixedXYHeader.getBoundingClientRect().width - 1 + 'px');
};


TableScroller.prototype.updateContent = function () {
    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(() => {
        this.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;
    if (this.style.maxHeight) {
        this.addStyle('height', tableBound.height + 17 + 'px');
    }
};


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, elt => elt.tagName === 'TR')
        .forEach((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, (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 (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 () {
        return this._fixedCol || 0;
    }
};


ACore/* default.install */.Z.install(TableScroller);

/* harmony default export */ const tablescroller_TableScroller = (TableScroller);

/***
 *
 * @param {TableScroller} elt
 * @constructor
 */
function ScrollController(elt) {
    this.elt = elt;

    Object.keys(this.constructor.prototype).filter(k => k.startsWith('ev_'))
        .forEach(k => this[k] = this[k].bind(this));

    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__(2908);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableVScroller.js





var TableVScroller_ = ACore/* default._ */.Z._;
var TableVScroller_$ = ACore/* default.$ */.Z.$;

function TableVScroller() {
    var thisTS = this;
    this.$attachHook = TableVScroller_$('attachhook', this);
    this.$attachHook.updateSize = () => {
        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 () {
        Dom/* default.addToResizeSystem */.ZP.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 () {
    this.swappedContentPairs.forEach((originElt, copyElt) => {
        this.swappedContentPairs.push([originElt, copyElt])
    });
    this.swappedContentPairs = [];
   var elt = this.$table;
    this.$thead = TableVScroller_$('thead', elt);
    this.$tr = TableVScroller_$('tr', this.$thead);
    this.$topThead = (0,Dom/* depthClone */.qE)(this.$thead, (originElt, copyElt) => {
        if (originElt.tagName === 'TH') {
            (0,utils.swapChildrenInElt)(originElt, copyElt);
            this.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();
};


ACore/* default.install */.Z.install(TableVScroller);

/* harmony default export */ const js_TableVScroller = (TableVScroller);

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TextArea2.js
var TextArea2 = __webpack_require__(5789);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/textclipboard.css
var textclipboard = __webpack_require__(2568);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextClipboard.js



var TextClipboard_ = ACore/* default._ */.Z._;
var TextClipboard_$ = ACore/* default.$ */.Z.$;

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

ACore/* default.install */.Z.install(TextClipboard);

/* harmony default export */ const js_TextClipboard = (TextClipboard);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timeinput.css
var timeinput = __webpack_require__(9392);
;// 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_ = ACore/* default._ */.Z._;
var TimeInput_$ = ACore/* default.$ */.Z.$;

/***
 * @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 DomSignal/* default */.ZP(this.$domSignal);
    this.domSignal.on('request_auto_select', this._autoSelect.bind(this));
    OOP/* default.drillProperty */.ZP.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 (0,utils.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((0,utils.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 (value) {
        if (typeof value == "number") {
            value = (value % 24) || 0;
        }
        else {
            value = null;
        }
        this._applyValue(value, this._minute);
        this._lastEmitValue = this.dayOffset;
    },
    get: function () {
        return this._hour;
    }
};


TimeInput.property.minute = {
    set: function (value) {
        if (typeof value == "number") {
            value = (value % 60) || 0;
        }
        else {
            value = null;
        }
        this._applyValue(this._hour, value);
        this._lastEmitValue = this.dayOffset;
    },
    get: function () {
        return this._minute;
    }
};


TimeInput.property.value = {
    set: function (value) {
        if (typeof value == "number" || (value && value.getTime)) {
            value = value || 0;
            if (value.getTime)
                value = value.getTime() - (0,datetime.beginOfDay)(value).getTime();
            else {
                value = value % datetime.MILLIS_PER_DAY;
            }

            this.hour = Math.floor(value / datetime.MILLIS_PER_HOUR);
            this.minute = Math.floor((value % datetime.MILLIS_PER_HOUR) / datetime.MILLIS_PER_MINUTE);
        }
        else {
            this.hour = null;
            this.minute = null;
        }
    },
    get: function () {
        if (this._hour === null || this._minute === null) return null;
        return this._hour * datetime.MILLIS_PER_HOUR + this._minute * datetime.MILLIS_PER_MINUTE;
    }
}

TimeInput.property.disabled = {
    set: function (value) {
        value = !!value;
        this._disabled = value;
        if (value) this.addClass('as-disabled');
        else this.removeClass('as-disabled');
        this.$text.disabled = value;
    },
    get: function () {
        return this._disabled;
    }
};

TimeInput.property.format = {
    enumerable: true,
    configurable: true,
    set: function (value) {
        if (typeof value !== "string") value = "HH:mm";
        value = value || 'HH:mm';
        this._format = value;
        this.dayOffset = this['dayOffset'];
    },
    get: function () {
        return this._format;
    }
};

TimeInput.property.s24 = {
    get: function () {
        var t = this.format.match(new RegExp(this.tokenRegex.source, 'g'));
        return !t || t.indexOf('a') < 0;
    }
};

TimeInput.property.notNull = {
    set: function (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 () {
        return this.hasClass('as-must-not-null');
    }
};

TimeInput.property.readOnly = {
    set: function (value) {
        value = !!value;
        if (value) this.addClass('as-read-only');
        else this.removeClass('as-read-only');
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

TimeInput.property.min = {
    set: function (value) {
        if (!(0,utils.isRealNumber)(value)) value = 0;
        value = Math.floor(value);
        value = Math.max(0, Math.min(datetime.MILLIS_PER_DAY, value));
        this._min = value;
    },
    get: function () {
        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 ((0,EventEmitter/* hitElement */.EY)(this.share.$picker, event) && !(0,EventEmitter/* hitElement */.EY)(this.share.$closeBtn, event)) return;
    this._releasePicker();
};


TimeInput.eventHandler.pickerChange = function (event) {
    this._applyValue(event.hour, event.minute);
    this._notifyIfChange(event);
    ResizeSystem/* default.requestUpdateSignal */.Z.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 = (0,utils.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 = (0,datetime.formatDateTime)((0,datetime.beginOfDay)(new Date()), this.format);
            }
            else {
                this.$text.value = this._format;
            }
            this.$text.select();
        }
        else {
            if (this.notNull) {
                token.replace(token.ident === 'a' ? 'AM' : (0,utils.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((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this._editingData.state = TimeInput_STATE_EDITED;
                    if (dVal > 5) {
                        this._editNextToken();
                    }
                    break;
                case 'h':
                case 'hh':
                    token.replace((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this._editingData.state = TimeInput_STATE_EDITED;
                    if (dVal > 1) {
                        this._editNextToken();
                    }
                    break;
                case 'H':
                case 'HH':
                    token.replace((0,utils.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((0,utils.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((0,utils.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((0,utils.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;
};


ACore/* default.install */.Z.install(TimeInput);

/* harmony default export */ const js_TimeInput = (TimeInput);



// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timepicker.css
var timepicker = __webpack_require__(9099);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimePicker.js








//todo: add this to absol
var isTouchDevice = BrowserDetector/* default.hasTouch */.Z.hasTouch && !BrowserDetector/* default.os.type.match */.Z.os.type.match(/windows|X11|Ubuntu|Linux/);
//todo: re select text after click
var TimePicker_ = ACore/* default._ */.Z._;
var TimePicker_$ = ACore/* default.$ */.Z.$;

var TimePicker_$g = Svg/* default.ShareInstance.$ */.ZP.ShareInstance.$;
var TimePicker_g = Svg/* default.ShareInstance._ */.ZP.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 () {
        Dom/* default.addToResizeSystem */.ZP.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 (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 () {
        return this._hour;
    }
};


TimePicker.property.minute = {
    set: function (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 () {
        return this._minute;
    }
};


TimePicker.property.dayOffset = {
    set: function (value) {
        value = value || 0;
        if (value.getTime)
            value = value.getTime() - (0,datetime.beginOfDay)(value).getTime();
        else {
            value = value % datetime.MILLIS_PER_DAY;
        }

        this.hour = Math.floor(value / datetime.MILLIS_PER_HOUR);
        this.minute = Math.floor((value % datetime.MILLIS_PER_HOUR) / datetime.MILLIS_PER_MINUTE);
    },
    get: function () {
        return this._hour * datetime.MILLIS_PER_HOUR + this._minute * datetime.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
    }
};


ACore/* default.install */.Z.install('timepicker', TimePicker);
/* harmony default export */ const js_TimePicker = (TimePicker);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Tooltip.js
var Tooltip = __webpack_require__(5194);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/treelist.css
var treelist = __webpack_require__(7009);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeListItem.js




var TreeListItem_ = ACore/* default._ */.Z._;
var TreeListItem_$ = ACore/* default.$ */.Z.$;

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;
    OOP/* default.drillProperty */.ZP.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 () {
            prevented = true;
        },
        isPrevented: function () {
            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 (value) {
            value = value + '';
            this.$text.innerHTML = value;
        },
        get: function () {
            return this.$text.innerHTML;
        }
    },
    desc: {
        set: function (value) {
            value = value + '';
            this.$desc.innerHTML = value;
        },
        get: function () {
            return this.$desc.innerHTML
        }
    },
    level: {
        set: function (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 () {
            return this._level || 0;
        }
    },
    active: {
        set: function (value) {
            if (value) {
                this.addClass('active');
            }
            else {
                this.removeClass('active');
            }
        },
        get: function () {
            return this.hasClass('active');
        }
    },
    data: {
        set: function (value) {
            this._data = value;
        },
        get: function () {
            return this._data;
        }
    },
    value: {
        get: function () {
            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 (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 () {
        return this._extendClass || [];
    }
};


TreeListItem.property.extendStyle = {
    set: function (value) {
        this.$parent.removeStyle(this._extendStyle || {});
        this._extendStyle = value || {};
        this.$parent.addStyle(this.extendStyle);
    },
    get: function () {
        return this._extendStyle || {};
    }
};


ACore/* default.install */.Z.install(TreeListItem);

/* harmony default export */ const js_TreeListItem = (TreeListItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeList.js



var TreeList_ = ACore/* default._ */.Z._;
var TreeList_$ = ACore/* default.$ */.Z.$;

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 (event) {
                self.emit('press', event, this);
            }
        }
    });
    this.addChild(elt);

    this._items.push(item);
    return this;
};


TreeList.property = {};
TreeList.property.items = {
    set: function (value) {
        this.clearItems();

        (value || []).forEach(this.addItem.bind(this));
    },
    get: function () {
        return this.getAllItem();
    }
};


TreeList.property.level = {
    set: function (value) {
        value = value || 0;
        if (this.level == value) return;
        this._level = value;
        this.getAllItemElement().forEach(function (e) {
            e.level = value;
        });
    },
    get: function () {
        return this._level || 0;
    }
};

ACore/* default.install */.Z.install(TreeList);

/* harmony default export */ const js_TreeList = (TreeList);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreemenu.css
var selecttreemenu = __webpack_require__(7665);
;// 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_ = ACore/* default._ */.Z._;
var SelectTreeBox_$ = ACore/* default.$ */.Z.$;
var SelectTreeBox_$$ = ACore/* default.$$ */.Z.$$;

/***
 * @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);
};



ACore/* default.install */.Z.install(SelectTreeBox);

/* harmony default export */ const js_SelectTreeBox = (SelectTreeBox);

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeMenu.js






var SelectTreeMenu_ = ACore/* default._ */.Z._;
var SelectTreeMenu_$ = ACore/* default.$ */.Z.$;


/***
 * @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;
    OOP/* default.drillProperty */.ZP.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);


ACore/* default.install */.Z.install(SelectTreeMenu);

/* harmony default export */ const js_SelectTreeMenu = (SelectTreeMenu);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/widthheightresizer.css
var widthheightresizer = __webpack_require__(9360);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Draggable.js
var Draggable = __webpack_require__(5611);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/WidthHeightSizer.js




//can replace with other module
var WidthHeightSizer_ = ACore/* default._ */.Z._;
var WidthHeightSizer_$ = ACore/* default.$ */.Z.$;

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 = OOP/* default.bindFunctions */.ZP.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);

    (0,Draggable/* default */.Z)(res.$anchorBotRight).on('drag', res.eventHandler.dragBotRight).on('predrag', res.eventHandler.preDrag);
    (0,Draggable/* default */.Z)(res.$anchorTopRight).on('drag', res.eventHandler.dragTopRight).on('predrag', res.eventHandler.preDrag);
    (0,Draggable/* default */.Z)(res.$anchorBotLeft).on('drag', res.eventHandler.dragBotLeft).on('predrag', res.eventHandler.preDrag);
    (0,Draggable/* default */.Z)(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);
};

ACore/* default.creator.widthheightresizer */.Z.creator.widthheightresizer = WidthHeightResizer;

/* harmony default export */ const WidthHeightSizer = (WidthHeightResizer);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Modal.js
var Modal = __webpack_require__(9826);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/trackbar.css
var trackbar = __webpack_require__(5220);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TrackBar.js





var TrackBar_ = ACore/* default._ */.Z._;
var TrackBar_$ = ACore/* default.$ */.Z.$;

/***
 * @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 = (0,Math_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 (value) {
        value = parseFloat(value + '');
        if (isNaN(value)) value = 0;
        this._value = value;
        this._updateValue();
    },

    get: function () {
        return Math.max(this.leftValue, Math.min(this.rightValue, this._value));
    }
};


TrackBar.property.leftValue = {
    set: function (value) {
        value = parseFloat(value + '');
        if (isNaN(value)) value = 0;
        this._leftValue = value;
        this._updateValue();
    },
    get: function () {
        return this._leftValue || 0;
    }
};

TrackBar.property.rightValue = {
    set: function (value) {
        value = parseFloat(value + '');
        if (isNaN(value)) value = 1;
        this._rightValue = value;
        this._updateValue();
    },
    get: function () {
        return this._rightValue || 1;
    }
};

TrackBar.property.disabled = {
    get: function () {
        return this.hasClass('as-disabled');
    },
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    }
};

TrackBar.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

ACore/* default.install */.Z.install(TrackBar);

/* harmony default export */ const js_TrackBar = (TrackBar);


// EXTERNAL MODULE: ./node_modules/absol-acomp/css/trackbarinput.css
var trackbarinput = __webpack_require__(502);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TrackBarInput.js




var TrackBarInput_ = ACore/* default._ */.Z._;
var TrackBarInput_$ = ACore/* default.$ */.Z.$;

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

TrackBarInput.prototype.addStyle = function (arg0, arg1) {
    if (arg0 === 'textAlign' || arg0 === 'text-align') {
        this.$input.addStyle('text-align', arg1);
        return this;
    }
    else {
        AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
        return this;
    }
};

// absol.OOP.drillProperty(this, this.$trackbar, ['leftValue', 'rightValue']);


TrackBarInput.property = {};

TrackBarInput.property.leftValue = {
    set: function (value) {
        this.$trackbar.leftValue = value;
        this._calInputTextWidth();
    },
    get: function () {
        return this.$trackbar.leftValue;
    }
};

TrackBarInput.property.rightValue = {
    set: function (value) {
        this.$trackbar.rightValue = value;
        this._calInputTextWidth();
    },
    get: function () {
        return this.$trackbar.rightValue;
    }
};


TrackBarInput.property.value = {
    set: function (value) {
        this.$trackbar.value = value || 0;
        this.$input.value = this.value + '';
    },
    get: function () {
        return parseFloat((this.valueFixed === undefined ? this.$trackbar.value : this.$trackbar.value.toFixed(this.valueFixed)) + '');
    }
};

TrackBarInput.property.valueFixed = {
    set: function (value) {
        if (value === undefined || value === null) value = undefined;
        this._valueFixed = value;
        this.$input.value = this.value + '';
        this._calInputTextWidth();
    },
    get: function () {
        return this._valueFixed;
    }
};

TrackBarInput.property.inputTextWidth = {
    set: function (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 () {
        return this._inputTextWidth;
    }
};

TrackBarInput.property.disabled = {
    get: function () {
        return this.hasClass('as-disabled');
    },
    set: function (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 (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 () {
        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__(9872);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ButtonRange.js






var ButtonRange_ = ACore/* default._ */.Z._;
var ButtonRange_$ = ACore/* default.$ */.Z.$;


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 && (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 (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 () {
        return this._items;
    }
};

ButtonRange.property.value = {
    set: function (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 () {
        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;
    Dom/* default.addToResizeSystem */.ZP.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();
};


ACore/* default.install */.Z.install(ButtonRange);

/* harmony default export */ const js_ButtonRange = (ButtonRange);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/DropZone.js
var DropZone = __webpack_require__(1577);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/radioinput.css
var radioinput = __webpack_require__(1646);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RadioInput.js




//new tech, not working version

var RadioInput_ = ACore/* default._ */.Z._;
var RadioInput_$ = ACore/* default.$ */.Z.$;

/***
 * @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 (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
        this.$input.disabled = !!value;
    },
    get: function () {
        this.$input.disabled;
    }
};

/***
 *
 * @type {RadioInput}
 */
RadioInput.property.checked = {
    set: function (value) {
        this.$input.checked = !!value;
        this._updateCheckedClass();
    },
    get: function () {
        return this.$input.checked;
    }
}

RadioInput.attribute = {
    checked: {
        set: function (value) {
            if (value === 'false' || value === null) {
                this.checked = false;
            }
            else {
                this.checked = true;
            }
        },
        get: function () {
            return this.checked ? 'true' : 'false'
        },
        remove: function () {
            this.checked = false;
        }
    },
    disabled: {
        set: function (value) {
            if (value === 'false' || value === null) {
                this.disabled = false;
            }
            else {
                this.disabled = true;
            }
        },
        get: function () {
            return this.disabled ? 'true' : 'false'
        },
        remove: function () {
            this.disabled = false;
        }
    }
};

/***
 *
 * @type {RadioInput}
 */
RadioInput.eventHandler = {};

RadioInput.eventHandler.click = function () {
    this._updateCheckedClass();
};


ACore/* default.install */.Z.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 (){
    Dom/* default.documentReady.then */.ZP.documentReady.then(function (){
        RadioInput.autoReplace();
    })
};


/* harmony default export */ const js_RadioInput = (RadioInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/OnScreenWidget.js
var OnScreenWidget = __webpack_require__(7315);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/RibbonSplitButton.js
var RibbonSplitButton = __webpack_require__(6455);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/RibbonButton.js
var RibbonButton = __webpack_require__(9664);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timeselectinput.css
var timeselectinput = __webpack_require__(7931);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeSelectInput.js











var TimeSelectInput_ = ACore/* default._ */.Z._;
var TimeSelectInput_$ = ACore/* default.$ */.Z.$;


/***
 * @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, datetime.MILLIS_PER_DAY, datetime.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 / datetime.MILLIS_PER_DAY) * datetime.MILLIS_PER_DAY;
    }
    var min = Math.floor(mil / (datetime.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 = (0,utils.positiveIntMod)(parseInt(nums[0]), 24);
    var m = (0,utils.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 * datetime.MILLIS_PER_HOUR + m * datetime.MILLIS_PER_MINUTE;
};


TimeSelectInput.prototype.isActive = function () {
    return document.activeElement == this || AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(document.activeElement, this)
        || AElement/* default.prototype.isDescendantOf.call */.Z.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 () {
        return this.hasClass('as-focus');
    },
    set: function (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 (value) {
        this._hour = (0,utils.positiveIntMod)(value, 24);
        this._lastDayOffset = this.dayOffset;
        this._updateValueText();
    },
    get: function () {
        return this._hour;
    }
};

TimeSelectInput.property.minute = {
    set: function (value) {
        this._minute = (0,utils.positiveIntMod)(value, 60);
        this._lastDayOffset = this.dayOffset;
        this._updateValueText();
    },
    get: function () {
        return this._minute;
    }
};

TimeSelectInput.property.dayOffset = js_TimeInput.property.dayOffset;
TimeSelectInput.property.disabled = {
    set: function (value) {
        this.$text.disabled = !!value;
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    }
    ,
    get: function () {
        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 = (0,Dom/* getScreenSize */.tE)();
    var availableTop = bound.top - 5;
    var availableBot = screenSize.height - 5 - bound.bottom;
    this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
    var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(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 / datetime.MILLIS_PER_HOUR);
    this._minute = Math.floor(mil / datetime.MILLIS_PER_MINUTE) % 60;
    this.$selectlistBox.values = [mil];
    this.$selectlistBox.viewListAtFirstSelected();
};

TimeSelectInput.eventHandler.click = function (event) {
    if (!EventEmitter/* default.hitElement */.ZP.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 (EventEmitter/* default.hitElement */.ZP.hitElement(this, event) || EventEmitter/* default.hitElement */.ZP.hitElement(this.$selectlistBox, event)) return;
    this.isFocus = false;
};


ACore/* default.install */.Z.install(TimeSelectInput);

/* harmony default export */ const js_TimeSelectInput = (TimeSelectInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/snackbar.css
var snackbar = __webpack_require__(3007);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Snackbar.js






var Snackbar_ = ACore/* default._ */.Z._;
var Snackbar_$ = ACore/* default.$ */.Z.$;

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 (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 ((0,Dom/* isDomNode */.mV)(value)) {
            this.clearChild()
                .addChild(value);
        }
        else if (value && 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 () {
        return this._message;
    }
}


ACore/* default.install */.Z.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__(3010);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/LanguageSystem.js
var LanguageSystem = __webpack_require__(6013);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiSelectMenu.js













var MultiSelectMenu_ = ACore/* default._ */.Z._;
var MultiSelectMenu_$ = ACore/* default.$ */.Z.$;


/***
 * @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);

    OOP/* default.drillProperty */.ZP.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: [
            {
                attr:{
                  'data-ml-key': 'txt_select_value'
                },
                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 = requireItem(this);
        this.$itemCtn.addChild(itemElt);
        this.$items.push(itemElt);
    }

    while (this.$items.length > n) {
        itemElt = this.$items.pop();
        this.$itemCtn.removeChild(itemElt);
        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) {
        ResizeSystem/* default.updateUp */.Z.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 = 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 (items) {
        items = items || [];
        this.$selectlistBox.items = items;
        this.addStyle('--list-min-width', this.$selectlistBox._estimateWidth + 'px');
        this._updateItems();
    },
    get: function () {
        return this.$selectlistBox.items
    }
};

MultiSelectMenu.property.values = {
    set: function (values) {
        values = this._implicit(values);
        this._values = values;
        this.$selectlistBox.values = values;
        this._updateItems();
    },
    get: function () {
        return this._explicit(this._values);
    }
};

MultiSelectMenu.property.orderly = {
    set: function (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 () {
        return !!this._orderly;
    }
};

MultiSelectMenu.property.disableClickToFocus = {
    set: function (value) {
        if (value) {
            this.addClass('as-disable-click-to-focus');
        } else {
            this.removeClass('as-disable-click-to-focus');
        }
    },
    get: function () {
        return this.hasClass('as-disable-click-to-focus');
    }
};

MultiSelectMenu.property.itemFocusable = {
    set: function (value) {
        if (value) {
            this.addClass('as-item-focusable');
        } else {
            this.removeClass('as-item-focusable');
        }
        this._updateFocusItem();
    },
    get: function () {
        return this.hasClass('as-item-focusable');
    }
};

MultiSelectMenu.property.activeValue = {
    set: function (value) {
        this._activeValue = value;
        if (this.itemFocusable) {
            this._updateFocusItem();
            //todo
        }
    },
    get: function () {
        return this._activeValue;
    }
};

MultiSelectMenu.property.strictValue = {
    set: function (value) {
        if (value){
            this.attr('data-strict-value', null);
        }
        else {
            this.attr('data-strict-value', 'false');
        }
    },
    get: function () {
        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 (!EventEmitter/* default.hitElement */.ZP.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);
    }
};

ACore/* default.install */.Z.install(MultiSelectMenu);

/* harmony default export */ const js_MultiSelectMenu = (MultiSelectMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/countdownclock.css
var countdownclock = __webpack_require__(5197);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CountdownClock.js






var CountdownClock_ = ACore/* default._ */.Z._;
var CountdownClock_$ = ACore/* default.$ */.Z.$;


/***
 * @extends AElement
 * @constructor
 */
function CountdownClock() {
    var thisC = this;
    this.$attachhook = CountdownClock_('attachhook').addTo(this)
        .on('attached', function () {
            ResizeSystem/* default.add */.Z.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 [(0,Math_int.numberAutoFixed)(50 + 60 * Math.cos(angle), 5) + '%', (0,Math_int.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 (value) {
        if (!(value >= 0)) {
            value = 0;
        }
        this._totalSecond = value;
        this._updateBorder();
    },
    get: function () {
        return this._totalSecond;
    }
};


CountdownClock.property.remainSecond = {
    set: function (value) {
        if (!(value >= 0)) {
            value = 0;
        }
        this._remainSecond = value;
        this._updateBorder();
        this._updateText();
    },
    get: function () {
        return this._remainSecond;
    }
}


ACore/* default.install */.Z.install(CountdownClock);

/* harmony default export */ const js_CountdownClock = (CountdownClock);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Toast.js
var Toast = __webpack_require__(1376);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Icons.js + 22 modules
var Icons = __webpack_require__(2380);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojipickertooltip.css
var emojipickertooltip = __webpack_require__(1158);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiAnims.js
var EmojiAnims = __webpack_require__(4670);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/pageindicator.css
var pageindicator = __webpack_require__(8895);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PageIndicator.js



var PageIndicator_ = ACore/* default._ */.Z._;
var PageIndicator_$ = ACore/* default.$ */.Z.$;

/***
 * @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 (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 () {
        return this.childNodes.length;
    }
};

PageIndicator.property.idx = {
    set: function (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 () {
        return this._idx;
    }
};


ACore/* default.install */.Z.install(PageIndicator);

/* harmony default export */ const js_PageIndicator = (PageIndicator);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiPickerTooltip.js














var EmojiPickerTooltip_ = ACore/* default._ */.Z._;
var EmojiPickerTooltip_$ = ACore/* default.$ */.Z.$;
var isMobile = BrowserDetector/* default.isMobile */.Z.isMobile;

/***
 * @augments Tooltip
 * @augments AElement
 * @augments Hanger
 * @constructor
 */
function EmojiPickerTooltip() {
    if (isMobile) {
        EmojiPickerTooltip_({
            tag: Hanger/* default.tag */.Z.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 = EmojiAnims/* default.reduce */.Z.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(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 = EmojiPicker/* default.assetRoot */.Z.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 () {
                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 (icons) {
        this._icons = icons || [];
        this._updateIconList();
        this.viewOffset = 0;
        this.$pageIndicatior.length = Math.ceil(this._icons.length / 6);
    },
    get: function () {
        return this._icons;
    }
};

EmojiPickerTooltip.property.viewOffset = {
    set: function (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 () {
        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)
};

ACore/* default.install */.Z.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 = Rectangle/* default.fromClientRect */.Z.fromClientRect((0,Dom/* traceOutBoundingClientRect */.DI)(EmojiPickerTooltip.$element));
    var eBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(EmojiPickerTooltip.$element.getBoundingClientRect());
    if (!outBound.isCollapse(eBound, 0)) {
        EmojiPickerTooltip._scrollOutListener && EmojiPickerTooltip._scrollOutListener();
    }
    (0,Tooltip/* updateTooltipPosition */.J)(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);
    ResizeSystem/* default.add */.Z.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 (event) {
            if (event && ((0,EventEmitter/* hitElement */.EY)(EmojiPickerTooltip.$tooltip.$leftBtn, event) || (0,EventEmitter/* hitElement */.EY)(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__(8364);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/emojiuserlisttooltip.css
var emojiuserlisttooltip = __webpack_require__(9864);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiUserListTooltip.js






var EmojiUserListTooltip_ = ACore/* default._ */.Z._;
var EmojiUserListTooltip_$ = ACore/* default.$ */.Z.$;

/***
 * @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 () {
                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 (users) {
        this._users = users || [];
        this._updateUsers();
    },
    get: function () {
        return this._users;
    }
};

EmojiUserListTooltip.property.text = {
    set: function (value) {
        if (value === this._text) return;
        var icon = js_EmojiPickerTooltip.emojiDict[value];
        if (!value) return;
        var url = EmojiPicker/* default.assetRoot */.Z.assetRoot + '/anim/x60/' + icon.imageFileName;
        this._text = value;
        this.$sprite.src = url;
    },
    get: function () {
        return this._text;
    }
};

ACore/* default.install */.Z.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_$ = ACore/* default.$ */.Z.$;
var EmojiCounter_ = ACore/* default._ */.Z._;

var EmojiCounter_isMobile = BrowserDetector/* default.isMobile */.Z.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 = EmojiPicker/* default.assetRoot */.Z.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 () {
                            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 (value) {
        var icon = js_EmojiPickerTooltip.emojiDict[value];
        if (!icon) return;
        if (this._text === value) return;
        this.$sprite.src = EmojiPicker/* default.assetRoot */.Z.assetRoot + '/anim/x40/' + icon.imageFileName;
        this._text = value;
    },
    get: function () {
        return this._text;
    }
};

EmojiCounter.property.count = {
    set: function (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 () {
        return this._count;
    }
}

ACore/* default.install */.Z.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();
        (0,Tooltip/* updateTooltipPosition */.J)(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 = Rectangle/* default.fromClientRect */.Z.fromClientRect((0,Dom/* traceOutBoundingClientRect */.DI)(EmojiCounter.$element));
    var eBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(EmojiCounter.$element.getBoundingClientRect());
    if (!outBound.isCollapse(eBound, 0)) {
        js_EmojiPickerTooltip._scrollOutListener && EmojiCounter._scrollOutListener();
    }
    (0,Tooltip/* updateTooltipPosition */.J)(EmojiCounter);
};


EmojiCounter.updatePosition = EmojiCounter.updatePosition.bind(EmojiCounter);


/* harmony default export */ const js_EmojiCounter = (EmojiCounter);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EmojiCounterList.js



var EmojiCounterList_ = ACore/* default._ */.Z._;
var EmojiCounterList_$ = ACore/* default.$ */.Z.$;

/***
 * @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 (counters) {
        this._counters = Object.keys(counters || {}).reduce(function (ac, key) {
            var counter = counters[key];
            if (typeof counter === "object") {
                if (counter.count > 0 && js_EmojiPickerTooltip.emojiDict[key]) {
                    ac[key] = counter;
                }
            }
            return ac;
        }, {})
        this._updateCounters();
    },
    get: function () {
        return this._counters;
    }
}

ACore/* default.install */.Z.install(EmojiCounterList);

/* harmony default export */ const js_EmojiCounterList = (EmojiCounterList);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/rotatedtext.css
var rotatedtext = __webpack_require__(1854);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RotatedText.js




/***
 * @extends AElement
 * @constructor
 */
function RotatedText() {
    this.$attachHook = (0,ACore.$)('attachhook', this);
    this.$attachHook.requestUpdateSize = this.eventHandler.positionChange;
    this.$attachHook.on('attached', this.eventHandler.attached);
    this.$anchor = (0,ACore.$)('.as-rotated-text-anchor', this);
    this.$content = (0,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 (0,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 () {
        return this.$contentText.data;
    },
    set: function (value) {
        value = value || '';
        value = value + '';
        this.$contentText.data = value;
    }
};

RotatedText.property.angle = {
    set: function (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 () {
        return this._angle;
    }
};

RotatedText.eventHandler = {};

RotatedText.eventHandler.attached = function () {
    ResizeSystem/* default.add */.Z.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'
    });
};

ACore/* default.install */.Z.install(RotatedText);

/* harmony default export */ const js_RotatedText = (RotatedText);



// EXTERNAL MODULE: ./node_modules/absol-acomp/css/verticaltreediagram.css
var verticaltreediagram = __webpack_require__(7817);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/VerticalTreeDiagram.js





function VerticalTreeDiagramNode() {
    this.$childCtn = (0,ACore.$)('.as-vertical-tree-diagram-child-ctn', this);
    this.$name = (0,ACore.$)('.as-vertical-tree-diagram-node-name', this);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$name.firstChild, 'name', 'data');
    this.name = "UndefinedNodeName";
}

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


VerticalTreeDiagramNode.render = function () {
    return (0,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 (0,ACore._)(VerticalTreeDiagramNode.tag, true);
}

VerticalTreeDiagram.property = {};

VerticalTreeDiagram.property.data = {
    set: function (data) {
        data = data || {};
        this._data = data;

        function makeNode(nodeData) {
            return (0,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 () {
        return this._data;
    }
};

ACore/* default.install */.Z.install(VerticalTreeDiagramNode);
ACore/* default.install */.Z.install(VerticalTreeDiagram);

/* harmony default export */ const js_VerticalTreeDiagram = (VerticalTreeDiagram);


// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tokenfield.css
var tokenfield = __webpack_require__(5347);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TokenField.js










/***
 * @extends AElement
 * @constructor
 */
function TokenField() {
    this.on('click', this.eventHandler.click);
    this.$input = (0,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 = (0,ACore.$)('attachhook', this)
        .on('attached', function () {
            ResizeSystem/* default.add */.Z.add(this);
            this.requestUpdateSize();
        });
    this.$attachhook.requestUpdateSize = this.updateSize.bind(this);


    /***
     *
     * @type {SelectListBox}
     */
    this.$selectlistBox = (0,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 (0,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 = (0,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 (value) {
        if (typeof value !== "string") value = ' ';
        this._separator = value;
    },
    get: function () {
        return this._separator;
    }
};

TokenField.property.placeHolder = {
    set: function (value) {
        this.$input.attr('placeholder', value || '');
    },
    get: function () {
        return this.$input.attr('placeholder');
    }
};

TokenField.property.items = {
    set: function (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 () {
        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 (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 () {
        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 Vec2/* default */.Z(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 Vec2/* default */.Z(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 && ((0,EventEmitter/* hitElement */.EY)(this.$selectlistBox, event) || (0,EventEmitter/* hitElement */.EY)(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();
            (0,Text.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();
            (0,Text.setCaretPosition)(this.$input, 0);
        }
        else {
            nextElt.focus();
        }
    }
    else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
        var currentItemBound = itemElt.getBoundingClientRect();
        var center = new Vec2/* default */.Z(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 Vec2/* default */.Z(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 Vec2/* default */.Z(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 = (0,Dom/* getScreenSize */.tE)();
    var availableTop = bound.top - 5;
    var availableBot = screenSize.height - 5 - bound.bottom;
    this.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
    var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(this);
    if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
        // this.isFocus = false;
        //
    }
};

TokenField.eventHandler.selectListBoxPressItem = function (event) {
    var text = event.data.value;
    var newItem = this._makeItem(text);
    this._appendItem(newItem);
    this.updateSize();
    this._notifyChange({ action: 'add', item: text, itemElt: newItem });
    this.eventHandler.inputOut();
    this.$input.value = '';
    setTimeout(()=>{
        this.$input.focus();
    }, 30);
}

ACore/* default.install */.Z.install(TokenField);

/* harmony default export */ const js_TokenField = (TokenField);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dvexptree.css
var dvexptree = __webpack_require__(2265);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DVExpTree.js





/***
 * @extends ExpTree
 * @constructor
 */
function DVExpTree() {
    this.injectInput();

}

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

DVExpTree.render = function () {
    return (0,ACore._)({
        tag: ExpTree/* default.tag */.ZP.tag,
        extendEvent: ['radiochange', 'indexclick'],
        class: 'as-dv-exp-tree'
    }, true);
};

DVExpTree.prototype.injectInput = function () {
    this.$radio = (0,ACore._)({
        tag: 'radiobutton',
        on: {
            change: this.eventHandler.radioChange
        }
    });
    this.$node.insertBefore(this.$radio, this.$node.$extIcon);
    this.$index = (0,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 (value) {
        if (!value) {
            this.removeClass('as-has-radio');
            this.$radio.name = undefined;
        }
        else {
            this.addClass('as-has-radio');
            this.$radio.name = value + '';
        }
    },
    get: function () {
        return this.$radio.name;
    }
};

DVExpTree.property.radioValue = {
    enumerable: true,
    set: function (value) {
        this.$radio.value = value;
    },
    get: function () {
        return this.$radio.value;
    }
};

DVExpTree.property.radioChecked = {
    enumerable: true,
    set: function (value) {
        this.$radio.checked = value;
    },
    get: function () {
        return this.$radio.checked;
    }
};


DVExpTree.property.hasIndex = {
    enumerable: true,
    set: function (value) {
        if (value)
            this.addClass('as-has-index-input');
        else
            this.removeClass('as-has-index-input');
    },
    get: function () {
        return this.hasClass('as-has-index-input');
    }
};

DVExpTree.property.indexValue = {
    enumerable: true,
    set: function (value) {
        this.$index.innerHTML = value;
    },
    get: function () {
        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 ((0,EventEmitter/* hitElement */.EY)(this.$index, event) || (0,EventEmitter/* hitElement */.EY)(this.$radio, event) || (0,EventEmitter/* hitElement */.EY)(this.$node.$toggleIcon, event)) return;
    if ((0,EventEmitter/* hitElement */.EY)(this.$node, event) && this.radioName)
        this.$radio.click();
};

ACore/* default.install */.Z.install(DVExpTree);


/* harmony default export */ const js_DVExpTree = (DVExpTree);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checklistitem.css
var checklistitem = __webpack_require__(1100);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/Ref.js
var Ref = __webpack_require__(4446);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Attributes.js
/***
 *
 * @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 (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 (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 (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 (name, handler) {
        var self = this;
        this._definedProperties[name] = handler;
        var hadValue = !!(name in this);
        var privateValueRef = new Ref/* default */.Z(this[name]);
        var objectDescriptor = {
            enumerable: true, configurable: true,
            set: function (value) {
                if (handler.set)
                    privateValueRef.set(handler.set.apply(self.$$node, Array.prototype.slice.call(arguments).concat([privateValueRef])));
                else privateValueRef.set(value);
            },
            get: function () {
                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 (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 (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 () {
        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 (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: typeof value }
    }
});

/* harmony default export */ const AppPattern_Attributes = (Attributes);

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/SelectListItem.js
var SelectListItem = __webpack_require__(6843);
;// 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 = (0,ACore.$)('span.absol-selectlist-item-text', this);
    this.$textValue = this.$text.childNodes[0];
    this.$descCtn = (0,ACore.$)('.absol-selectlist-item-desc-container', this);
    this.$desc = (0,ACore.$)('span.absol-selectlist-item-desc', this.$descCtn);
    this.$descValue = this.$desc.childNodes[0];
    this.$checkbox = (0,ACore.$)(CheckboxButton/* default.tag */.Z.tag, this)
        .on('change', this.eventHandler.checkboxChange);
    this.$icon = null;
    this._icon = null;
    this._viewData = new AppPattern_Attributes(this);
    this._viewData.loadAttributeHandlers(this.viewHandlers);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this._viewData, 'extendClasses');
    OOP/* default.drillProperty */.ZP.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 (0,ACore._)({
        extendEvent: ['select'],
        class: ['as-check-list-item', "absol-selectlist-item"],
        child: [
            {
                tag: CheckboxButton/* default.tag */.Z.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: SelectListItem/* default.property.text */.ZP.property.text,
    value: SelectListItem/* default.property.value */.ZP.property.value,
    icon: SelectListItem/* default.property.icon */.ZP.property.icon,
    lastInGroup: SelectListItem/* default.property.lastInGroup */.ZP.property.lastInGroup,
};

CheckListItem.property.data = {
    set: function (value) {
        this._data = value;
        var viewData = {
            text:'',
            desc: '',
            noSelect: false,
            extendStyle: null,
            extendClasses: null,
            icon: null,
            lastInGroup:false
        };
        if (typeof value === 'string') {
            viewData.text = value
        } else {
            Object.assign(viewData, value);
        }
        Object.assign(this._viewData, viewData);
    },
    get: function () {
        return this._data;
    }
};

CheckListItem.property.selected = {
    set: function (value) {
        this.$checkbox.checked = !!value;
    },
    get: function () {
        return this.$checkbox.checked;
    }
};

CheckListItem.property.level = {
    set: function (value) {
        value = value || 0;
        this._level = value;
        this.$checkbox.addStyle('margin-left', value * 1.75 + 'em');
    },
    get: function () {
        return this._level;
    }
};


CheckListItem.prototype.viewHandlers = {};
CheckListItem.prototype.viewHandlers.text = {
    set: function (value) {
        this.$textValue.data = value;
    },
    get: function () {
        return this.$textValue.data;
    }
};

CheckListItem.prototype.viewHandlers.desc = {
    set: function (value) {
        this.$descValue.data = value;
    },
    get: function () {
        return this.$descValue.data;
    }
};

CheckListItem.prototype.viewHandlers.extendClasses = {
    set: function (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 (value, ref) {
        this.removeStyle(ref.get() || {});
        this._extendStyle = Object.assign({}, value || {});
        this.addStyle(this._extendStyle);
    },
    get: function () {
        return this._extendClasses;
    }
};

CheckListItem.prototype.viewHandlers.noSelect = {
    set: function (value){
        if (value) this.addClass('as-no-select');
        else  this.removeClass('as-no-select');
        return value;
    }
};


CheckListItem.prototype.viewHandlers.icon = {
    set: function (icon){
        this.icon = icon;
    },
    get: function (){
        return this.icon;
    }
};

CheckListItem.prototype.viewHandlers.lastInGroup = {
    set: function (value){
        this.lastInGroup = value;
    },
    get: function (){
        return this.lastInGroup;
    }
}

CheckListItem.eventHandler = {};

CheckListItem.eventHandler.clickText = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(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
    });
};

ACore/* default.install */.Z.install(CheckListItem);

/* harmony default export */ const js_CheckListItem = (CheckListItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checklistbox.css
var checklistbox = __webpack_require__(6801);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/tool/TextMeasurement.js
var TextMeasurement = __webpack_require__(1866);
// EXTERNAL MODULE: ./node_modules/absol/src/DataStructure/Array.js
var DataStructure_Array = __webpack_require__(7835);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringUtils.js
var stringUtils = __webpack_require__(2973);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckListBox.js



















var CheckListBox_itemPool = [];


function CheckListBox_makeItem() {
    return (0,ACore._)({
        tag: js_CheckListItem,
        on: {
            select: function (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 = text => {
    if (!mTextMeasurement) {
        mTextMeasurement = new TextMeasurement/* default */.Z();
        mTextMeasurement.compute('14px arial');
    }
    return mTextMeasurement.measureTextWidth(text, '14px arial');
}

var keyStringOfItem = item => {
    return (0,utils.keyStringOf)(item.value) + (0,stringUtils/* stringHashCode */.$)(item.text + '');
}

/***
 * TODO: check all duplicate value when select
 * @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 = (0,ACore.$)('.as-select-list-box-scroller', this);
    this.$content = (0,ACore.$)('.as-select-list-box-content', this);
    this.$pages = (0,ACore.$$)('.as-select-list-box-page', this);
    this.$searchInput = (0,ACore.$)('searchtextinput', this).on('stoptyping', this.eventHandler.searchModify);
    this.pagingCtrl = new CLPagingController(this);
    this.searchMaster = new ListSearchMaster/* default */.Z();


    this._initDomHook();
    this._initFooter();
    this.domSignal.on('viewListAtValue', this.viewListAtValue.bind(this));
    this.domSignal.on('viewListAtItem', this.viewListAtItem.bind(this));
    /***
     * @name selectedAll
     * @type {boolean}
     * @memberOf CheckListBox#
     */
    /***
     * @name selectedItems
     * @type {Array<>}
     * @memberOf CheckListBox#
     */


}

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

CheckListBox.render = function () {
    return (0,ACore._)({
        tag: Follower/* default.tag */.Z.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: LanguageSystem/* default.getText */.ZP.getText('txt_check_all') || LanguageSystem/* default.getText */.ZP.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.revokeResource = function () {
    this.searchMaster.revokeResource();
};

CheckListBox.prototype._initDomHook = function () {
    this.domSignal = new DelaySignal/* default */.Z();
    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', () => {
        this.$checkAll.checked = this.selectedAll;
    });

};

CheckListBox.prototype._initFooter = function () {
    this.$checkAll = (0,ACore.$)('.as-select-list-box-check-all', this)
        .on('change', this.eventHandler.checkAllChange);
    this.$cancelBtn = (0,ACore.$)('.as-select-list-box-cancel-btn', this)
        .on('click', this.eventHandler.clickCancelBtn);
    this.$closeBtn = (0,ACore.$)('.as-select-list-box-close-btn', this);
    if (this.$closeBtn)//mobile ref
        this.$closeBtn.on('click', this.eventHandler.clickCloseBtn);
};


CheckListBox.prototype.viewListAtFirstSelected = noop/* default */.Z;

CheckListBox.prototype.viewListAtValue = function (value) {
    if (this.isDescendantOf(document.body)) {
        this.pagingCtrl.viewListAtValue(value);
    }
};

CheckListBox.prototype.viewListAtItem = function (item) {
    if (this.isDescendantOf(document.body)) {
        this.pagingCtrl.viewListAtItem(item);
    }
};


/**
 * wrong function name
 * @deprecated
 * @param value
 * @returns {*}
 */
CheckListBox.prototype.findItemsByValue = function (value) {
    return this._holderDict[(0,utils.keyStringOf)(value)];
};

CheckListBox.prototype.findItemHoldersByValue = function (value) {
    return this._holderDict[(0,utils.keyStringOf)(value)];
};

CheckListBox.prototype.findItemByValue = function (value) {
    var holders = this._holderDict[(0,utils.keyStringOf)(value)];
    if (holders && holders.length > 0) {
        return holders[0].item;
    }
    else return null;
};

/**
 *
 * @param {number | Array<number>}idx
 */
CheckListBox.prototype.getItemByIndex = function (idx) {
    var arr = this._items;
    if (!Array.isArray(idx)) {
        idx = [idx];
    }
    for (var i = 0; i < idx.length; ++i) {
        if (!arr) return null;
        if (i + 1 === idx.length) return arr[idx[i]];
        arr = arr[idx[i]].items;
    }
};


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 (values) {
        values = values || [];
        var dict = values.reduce((ac, cr) => {
            var key = (0,utils.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 () {
        var values = 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;
        }, []);

        return (0,DataStructure_Array.arrayUnique)(values);
    }
};

CheckListBox.property.selectedIndexes = {
    set: function (indexes) {
        if (!Array.isArray(indexes)) indexes = [];

    },
    get: function () {
        var genVisit = (rootValue) => {
            return (ac, holder, i) => {
                if (holder.selected && !holder.data.noSelect) {
                    if (rootValue)
                        ac.push(rootValue.concat([i]));
                    else
                        ac.push(i);
                }
                if (holder.children) holder.children.reduce(genVisit((rootValue || []).concat([i])), ac);
                return ac;
            }
        };


        return this.itemHolders.reduce(genVisit(), []);
    }
};

CheckListBox.property.selectedItems = {
    get: function () {
        return this.selectedIndexes.map((idx) => this.getItemByIndex(idx)).filter(it => !!it);
    }
};


CheckListBox.prototype.resetSearchState = function () {
    this.$searchInput.value = '';
    this.pagingCtrl.viewArr(this.itemHolders);
};


CheckListBox.property.enableSearch = js_SelectListBox.property.enableSearch;


CheckListBox.property.items = {
    set: function (items) {
        items = items || [];
        items = (0,utils.copySelectionItemArray)(items, { removeNoView: true, removeNewLine: true });
        this._items = items;
        this.itemHolders = items.map(it => new CLHolder(this, 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.addStyle('--select-list-estimate-width', this._estimateWidth + 'px');
        this.$scroller.scrollTop = 0;
        this.pagingCtrl.viewArr(this.itemHolders);
        this.searchMaster.transfer(this.itemHolders.map(it => it.getSearchItem()));
        this.domSignal.emit('updateCheckedAll');
    },
    get: function () {
        return (0,utils.copySelectionItemArray)(this._items);
    }
};

CheckListBox.property.selectedAll = {
    get: function () {
        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 checked = this.$checkAll.checked;
    var changed = false;
    var visit = (holder) => {
        var canCheck = checked && !holder.data.noSelect;
        if (holder.selected !== canCheck) {
            changed = true;
            holder.selected = canCheck;
        }
        if (canCheck) {
            this._valueDict[holder.valueKey] = holder.data.value;
        }
        else {
            delete this._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.$checkAll.checked = this.selectedAll;
    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 text = this.$searchInput.value;
    if (text) {
        this.searchMaster.query({ text: text }).then(result => {
            if (text !== this.$searchInput.value) return;
            if (!result) return;//why?
            var arr = this.itemHolders.filter(it => !!result[it.id]);
            arr.sort((a, b) => result[b.id][1] - result[a.id][1]);
            var searchHolders = arr.map(holder => new CLHolderRef(this, holder, null, result));
            this.$scroller.scrollTop = 0;
            this.pagingCtrl.viewArr(searchHolders);
            ResizeSystem/* default.update */.Z.update();
        });
    }
    else {
        this.pagingCtrl.viewArr(this.itemHolders.reduce((ac, holder) => holder.toArray(ac), []));
        ResizeSystem/* default.update */.Z.update();
    }
};

ACore/* default.install */.Z.install(CheckListBox);

/**
 * @param boxElt
 * @param data
 * @param parent
 * @constructor
 */
function CLHolder(boxElt, data, parent) {
    this.id = (0,stringGenerate.randomIdent)(8);
    this.parent = parent;
    this.level = parent ? parent.level + 1 : 0;
    this.boxElt = boxElt;
    this.data = data;
    (0,OOP/* drillProperty */.pj)(this, this, 'item', 'data');//adapt mobile and desktop
    this.valueKey = (0,utils.keyStringOf)(data.value);
    this.itemKey = keyStringOfItem(data);
    this.itemElt = null;
    this.children = null;
    this.selected = this.valueKey in boxElt._valueDict;
    var Clazz = this.constructor;
    if (data.items && data.items.length > 0) {
        this.children = data.items.map(it => new Clazz(boxElt, it, this));
    }
}


CLHolder.prototype.toArray = function (ac) {
    ac = ac || [];
    ac.push(this);
    if (this.children) this.children.reduce((ac, holder) => holder.toArray(ac), ac);
    return ac;
};

CLHolder.prototype.toDictionary = function (ac) {
    ac = ac || {};
    ac[this.valueKey] = this;
    if (this.children) this.children.reduce((ac, holder) => holder.toDictionary(ac), ac);
    return ac;
};


CLHolder.prototype.attachView = function (itemElt) {
    if (itemElt.clHolder) itemElt.clHolder.detachView();
    if (!this.textLength)
        this.textLength = (0,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(c => c.getSearchItem())
    return res;
};


function CLHolderRef(boxElt, origin, parent, result) {
    this.boxElt = boxElt;
    this.origin = origin;
    this.data = origin.data;
    this.parent = parent;
    this.level = origin.level;
    OOP/* default.drillProperty */.ZP.drillProperty(this, origin, 'selected');
    var Clazz = this.constructor;
    var arr, children;
    if (origin.children) {
        arr = origin.children.filter(it => !!result[it.id]);
        arr.sort((a, b) => result[b.id][1] - result[a.id][1]);
        children = arr.map(holder => new Clazz(boxElt, holder, this, result));
        if (children.length > 0) this.children = children;
    }
}

OOP/* default.mixClass */.ZP.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((0,Dom/* getScreenSize */.tE)().height / this.itemHeight * 2);
    this.holderArr = [];
    this.holderDict = {};
}

CLPagingController.prototype.itemHeight = 30;

CLPagingController.prototype.ev_scroll = function (event) {
    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, (elt, i) => this.holderArr[(pageIdx - 1) * this.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, (elt, i) => this.holderArr[(pageIdx + 1) * this.itemPerPage + i].attachView(elt));
        }
        else {
            this.$pages[2].addStyle('display', 'none');
        }
    }
    else {
        this.update();
    }
};

CLPagingController.prototype.update = function () {
    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, (child, i) => {
                this.holderArr[ii].attachView(child);
                ii++;
            });
        }
    }

};

CLPagingController.prototype.viewListAtIdx = function (idx) {
    var bound = this.$scroller.getBoundingClientRect();
    if (!bound.height) return;
    var y = idx * this.itemHeight;
    var maxY = this.holderArr.length * this.itemHeight - bound.height;
    this.$scroller.scrollTop = Math.min(maxY, y);
};

CLPagingController.prototype.viewListAtValue = function (value) {
    var idx = this.holderDict[(0,utils.keyStringOf)(value)];
    if (idx === undefined) return;
    this.viewListAtIdx(idx);

};

CLPagingController.prototype.viewListAtItem = function (item) {
    var idx = this.holderHashDict[keyStringOfItem(item)];
    if (idx === undefined) return;
    this.viewListAtIdx(idx);
};


CLPagingController.prototype.viewArr = function (itemHolders) {
    this.holderArr = itemHolders.reduce((ac, holder) => holder.toArray(ac), []);
    this.holderDict = this.holderArr.reduce((ac, cr, idx) => {
        if (!(0,utils.isNaturalNumber)(ac[cr.valueKey]))
            ac[cr.valueKey] = idx;
        return ac;
    }, {});

    this.holderHashDict = this.holderArr.reduce((ac, cr, idx) => {
        ac[cr.itemKey] = 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(pageElt => {
        Array.prototype.forEach.call(pageElt.childNodes, 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 (0,ACore._)({
        tag: Follower/* default.tag */.Z.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: LanguageSystem/* default.getText */.ZP.getText('txt_check_all') || LanguageSystem/* default.getText */.ZP.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 = (0,ACore.$)('.as-select-list-box-check-all', this)
        .on('change', this.eventHandler.checkAllChange);
    this.$cancelBtn = (0,ACore.$)('.as-select-list-box-cancel-btn', this)
        .on('click', this.eventHandler.clickCancelBtn);
    this.$closeBtn = (0,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/* default */.Z;

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

ACore/* default.install */.Z.install('checklistboxv1', CheckListBoxV1);


/* harmony default export */ const js_CheckListBox = ((/* unused pure expression or super */ null && (CheckListBoxV1)));
// EXTERNAL MODULE: ./node_modules/absol/src/JSX/attribute.js + 1 modules
var attribute = __webpack_require__(2953);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/MultiLanguageCSS.js
var MultiLanguageCSS = __webpack_require__(1812);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MSelectListItem.js



/***
 *
 * @extends {AElement}
 * @constructor
 */
function MSelectListItem() {
    this.$textCtn = (0,ACore.$)('.am-selectlist-item-text-ctn', this);
    this.$text = (0,ACore.$)('span.am-selectlist-item-text', this);
    this.$textValue = this.$text.childNodes[0];
    this.$descCtn = (0,ACore.$)('.am-selectlist-item-desc-ctn', this);
    this.$desc = (0,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 (0,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({}, SelectListItem/* default.property */.ZP.property);

MSelectListItem.property.icon = {
    set: function (icon) {
        if (this.$icon) {
            this.$icon.remove();
            this.$icon = null;

        }
        this._icon = icon || null;
        if (this._icon) {
            this.$icon = (0,ACore._)(this._icon).addClass('am-selectlist-item-icon');
            this.$textCtn.addChildAfter(this.$icon, null);
        }
    },
    get: function () {
        return this._icon;
    }
};




/* harmony default export */ const selectlistbox_MSelectListItem = (MSelectListItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multicheckmenu/MChecklistItem.js






/****
 * @extends MSelectListItem
 * @constructor
 */
function MChecklistItem() {
    this.$checkbox = (0,ACore.$)('.am-selectlist-item-check-ctn > '+CheckboxButton/* default.tag */.Z.tag, this)
        .on('change', this.eventHandler.checkboxChange);
    selectlistbox_MSelectListItem.call(this);
    this.on('click', this.eventHandler.clickText);
}


MChecklistItem.tag = 'MChecklistItem'.toLowerCase();
MChecklistItem.property = Object.assign({}, selectlistbox_MSelectListItem.property);

MChecklistItem.render = function () {
    return (0,ACore._)({
        extendEvent:['change', 'select'],
        class: 'am-selectlist-item',
        child: [
            {
                class: 'am-selectlist-item-check-ctn',
                child: {
                    tag: CheckboxButton/* default.tag */.Z.tag
                }
            },
            {
                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: ''}
                }
            }
        ]
    });
};


MChecklistItem.eventHandler = {};

MChecklistItem.eventHandler.clickText = js_CheckListItem.eventHandler.clickText

MChecklistItem.eventHandler.checkboxChange =  js_CheckListItem.eventHandler.checkboxChange;

MChecklistItem.property.selected = js_CheckListItem.property.selected;

ACore/* default.install */.Z.install(MChecklistItem);

/* harmony default export */ const multicheckmenu_MChecklistItem = (MChecklistItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectlistbox/MSelectList.js







function measureListSize(items) {
    var descWidth = (0,SelectList/* measureMaxDescriptionWidth */.jG)(items);
    var textWidth = (0,SelectList/* measureMaxTextWidth */.up)(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 (0,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 = (0,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 (0,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 = 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 = 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({}, SelectList/* default.property */.ZP.property);

MSelectList.prototype.init = SelectList/* default.prototype.init */.ZP.prototype.init;

MSelectList.eventHandler = {};


/* harmony default export */ const selectlistbox_MSelectList = ((/* unused pure expression or super */ null && (MSelectList)));
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TextMeasure.js + 1 modules
var TextMeasure = __webpack_require__(2610);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/list/search.js
var search = __webpack_require__(2551);
;// 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 (0,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 = (0,ACore._)('attachhook').addTo(this);

    this.$attachhook._isAttached = false;
    this.$attachhook.requestUpdateSize = this.updateSize.bind(this);
    this.$attachhook.on('attached', function () {
        Dom/* default.addToResizeSystem */.ZP.addToResizeSystem(this);
        this.requestUpdateSize();
        this._isAttached = true;
    });

    this.domSignal = new DelaySignal/* default */.Z();
    this.domSignal.on('viewListAt', this.viewListAt.bind(this));
    this.domSignal.on('viewListAtFirstSelected', this.viewListAtFirstSelected.bind(this));
    this.searchMaster = new ListSearchMaster/* default */.Z();
};

MListModal.prototype.cancelWaiting = function () {
    this.$attachhook.cancelWaiting();
}

MListModal.prototype._initControl = function () {
    this._currentOffset = 0;
    this._startItemIdx = 0;

    this.$closeBtn = (0,ACore.$)('.am-list-popup-close-btn', this)
        .on('click', this.notifyPressClose.bind(this));

    this.on('click', this.eventHandler.click);

    this.$box = (0,ACore.$)('.am-list-popup-box', this);


    this.$searchInput = (0,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 = (0,ACore.$)('.am-list-popup-list-scroller', this)
        .on('scroll', this.eventHandler.scroll);
    this.$content = (0,ACore.$)('.am-list-popup-content', this);
    this.$listPages = (0,ACore.$$)('.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) {//keep
    return this._itemsByValue[(0,utils.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) {//keep
    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 = Dom/* default.getScreenSize */.ZP.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 = (0,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 () {
        return this._items;
    },
    set: function (items) {
        items = items || [];
        if (!Array.isArray(items)) items = [];//no
        items = (0,utils.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 = (0,utils.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 = it => {
            var res = { value: this.idx2key.length };
            var valueKey;
            res.text = it.text + '';
            if (it.desc) res.text += it.desc;
            valueKey = (0,utils.keyStringOf)(it.value);
            it.keyValue = 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((ac, cr, i) => {
            ac[cr] = i;
            return ac;
        }, {});
        this.searchMaster.transfer(this.searchingItems);
        /*****************/

        this._searchCache = {};
        var estimateSize = 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(Dom/* default.getScreenSize */.ZP.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 (values) {
        values = values || [];
        values = values.slice();
        this._values = values;
        this._valueDict = values.reduce(function (ac, cr) {
            ac[cr + ''] = true;
            ac[(0,utils.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 () {
        return this._values;
    }
};

MListModal.property.displayValue = {
    set: function (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 () {
        return this._displayValue;
    }
}

MListModal.property.enableSearch = {
    set: function (value) {
        if (value) this.$box.addClass('am-enable-search');
    },
    get: function () {
        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 text = this.$searchInput.value;
    var searchSession = Math.random() + '';
    this._seachSession = searchSession;
    this.searchItemByText(text).then(searchedItems => {
        if (this._seachSession !== searchSession) return;
        this._preDisplayItems = this._listToDisplay(searchedItems);
        this._displayItems = this._filterValue(this._preDisplayItems);
        this._updateItemIndex();
        this.viewListAt(0);
        this.$listScroller.scrollTop = 0;
    });
};


MListModal.eventHandler.scroll = function () {
    var scrollerBound = this.$listScroller.getBoundingClientRect();
    var topIdx = this._findFirstPageIdx();
    var fontSize = this.$listScroller.getFontSize() || 14;
    var screenSize = Dom/* default.getScreenSize */.ZP.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);

ACore/* default.install */.Z.install('mlistmodal', MListModal);
Dom/* default.ShareInstance.install */.ZP.ShareInstance.install('mlistmodal', MListModal);

/**
 * @extends AElement
 * @constructor
 */
function MListModalV2() {
    this.estimateSize = { textWidth: 0, descWidth: 0 };
    this.itemHolders = [];
    this.itemHolderByValue = {};
    this.screenSize = (0,Dom/* getScreenSize */.tE)();
    this.pagingCtrl = new MLMPagingController(this);
    this.layoutCtrl = new MLMLayoutController(this);
    this.on('pressitem', this.eventHandler.selectItem);
    this._value = undefined;
    this.selectedHolder = null;
    this.searchCtrl = new MLMSearchController(this);
    this.$closeBtn = (0,ACore.$)('.am-list-popup-close-btn', this)
    this.on('click', this.eventHandler.click);
    this.$closeBtn.on('click', this.eventHandler.clickCloseBtn);
    /**
     * @type {any}
     * @name value
     * @memberof MListModalV2#
     */

    /**
     * @type {Array}
     * @name items
     * @memberof MListModalV2#
     */

    /**
     * @type {boolean}
     * @name enableSearch
     * @memberof MListModalV2#
     */

    /**
     * @type {boolean}
     * @name strictValue
     * @memberof MListModalV2#
     */

    /**
     * @type {number}
     * @name selectedIndex
     * @memberof MListModalV2#
     */
}

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

MListModalV2.render = function () {
    return (0,ACore._)({
        extendEvent: ['pressitem', 'pressclose', 'pressout'],
        class: 'am-list-modal-v2',
        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')
                        }
                    }
                ]
            }
        ]
    });
};


MListModalV2.prototype.resetSearchState = function () {
    this.searchCtrl.resetSearchState();
};

MListModalV2.prototype.cancelWaiting = function () {

}

MListModalV2.prototype.findItemsByValue = function (value) {
    var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (!holder) return null;
    return [holder.data];
};

MListModalV2.prototype.findItemByValue = function (value) {
    var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (!holder) return null;
    return holder.data;
};

MListModalV2.prototype.viewListAt = function (idx) {
    var offset = this.pagingCtrl.offsetTopOfHolders[idx];
    offset = offset || 0;
    this.pagingCtrl.$listScroller.scrollTop = offset;
    this.pagingCtrl.update();
};

MListModalV2.prototype.viewListAtFirstSelected = function () {
    var selectedIndex = this.selectedIndex;
    this.viewListAt(selectedIndex);
};

MListModalV2.prototype.updateSelectedItem = function () {
    if (this.selectedHolder) {
        this.selectedHolder.selected = false;
        this.selectedHolder.updateView();
    }
    var value = this.value;//computed value
    this.selectedHolder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (this.selectedHolder) {
        this.selectedHolder.selected = true;
        this.selectedHolder.updateView();
    }
};

MListModalV2.property = {};

MListModalV2.property.items = {
    set: function (items) {
        this.itemHolders.forEach(holder => {
            holder.detachView();
        });
        this.selectedHolder = null;

        if (!Array.isArray(items)) items = [];
        this.itemHolders = items.map(it => new MLMHolder(this, it));
        this.itemHolders.forEach((holder, i) => {
            holder.idx = i;
        });

        this.itemHolderByValue = this.itemHolders.reduce(function reducer(ac, cr) {
            ac[cr.keyValue] = cr;
            return ac;
        }, {});
        this.updateSelectedItem();

        this.layoutCtrl.calcSize();
        this.pagingCtrl.viewArr(this.itemHolders);
    },
    get: function () {
        return this.itemHolders.map(it => it.data);
    }
};

MListModalV2.property.enableSearch = {
    /***
     * @this SelectListBox
     * @param {boolean} value
     */
    set: function (value) {
        if (value) this.addClass('as-enable-search');
        else this.removeClass('as-enable-search');
    },
    /***
     * @this SelectListBox
     */
    get: function () {
        return this.hasClass('as-enable-search');
    }
};

MListModalV2.property.values = {
    set: function (values) {
        values = values || [];
        this.value = values[0];
    },
    get: function () {
        return [this.value];
    }
}

MListModalV2.property.value = {
    set: function (value) {
        this._value = value;
        this.updateSelectedItem();

    },
    /**
     * @this MListModalV2
     * @returns {*}
     */
    get: function () {
        var value = this._value;
        var holder;
        if (this.strictValue) {
            holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
            if (holder) return value;
            if (this.itemHolders.length > 0) {
                return this.itemHolders[0].data.value;
            }
            else {
                return value;
            }
        }
        else return value;
    }
};

MListModalV2.property.strictValue = {
    set: function (value) {
        if (value) {
            this.addClass('as-strict-value');
        }
        else {
            this.removeClass('as-strict-value');
        }
    },
    get: function () {
        return this.hasClass('as-strict-value');
    }
};

MListModalV2.property.selectedItem = {
    get: function () {
        var value = this._value;
        var holder;
        holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)] || null;
        if (this.strictValue) {
            if (!holder && this.itemHolders.length > 0)
                holder = this.itemHolders[0];

        }
        if (holder) return holder.data;
        return null;
    }
};

MListModalV2.property.selectedIndex = {
    get: function () {
        var value = this._value;
        var holder;
        holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)] || null;
        if (this.strictValue) {
            if (!holder && this.itemHolders.length > 0)
                holder = this.itemHolders[0];

        }
        if (holder) return holder.idx;
        return 0;
    }
};


MListModalV2.eventHandler = {};

MListModalV2.eventHandler.selectItem = function (event) {
    var value = event.value;
    var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (this.selectedHolder !== holder && this.selectedHolder) {
        this.selectedHolder.selected = false;
        this.selectedHolder.updateView();
    }
    if (holder) {
        holder.selected = true;
        holder.updateView();
    }
};

MListModalV2.eventHandler.click = function (event) {
    if (event.target === this) {
        this.emit('pressclose', { target: this, type: 'pressclose' }, this);
    }
};

MListModalV2.eventHandler.clickCloseBtn = function (event) {
    this.emit('pressclose', { target: this, type: 'pressclose' }, this);
};

/**
 *
 * @param {MListModalV2} boxElt
 * @constructor
 */
function MLMLayoutController(boxElt) {
    this.boxElt = boxElt;
}

MLMLayoutController.prototype.calcSize = function () {
    var holders = this.boxElt.itemHolders;
    var screenSize = this.boxElt.screenSize;
    var maxAvailableWidth = Math.max(0, screenSize.width - 20);
    var col1maxWidth = 0;
    var col2maxWidth = 0;

    var visit = (nd) => {
        if (nd.computedSize.col1maxWidth > col1maxWidth) {
            col1maxWidth = nd.computedSize.col1maxWidth;
        }
        if (nd.computedSize.col2maxWidth > col2maxWidth) {
            col2maxWidth = nd.computedSize.col2maxWidth;
        }
    }
    holders.forEach(visit);
    var col1Width = col1maxWidth;
    var col2Width = col2maxWidth;

    if (col1maxWidth + col2maxWidth > maxAvailableWidth) {
        col1Width = col1maxWidth / ((col1maxWidth + col2maxWidth) || 1) * maxAvailableWidth;
        col2Width = Math.max(maxAvailableWidth - col1Width, 0);
    }

    var visit2 = (nd) => {
        nd.applyViewWidth(col1Width, col2Width);
        if (nd.children && nd.children.length) {
            nd.children.forEach(visit2);
        }
    }
    holders.forEach(visit2);
    this.boxElt.estimateSize.textWidth = col1maxWidth - 30;
    this.boxElt.estimateSize.descWidth = Math.max(0, col2maxWidth - 20);
    this.boxElt.addStyle('--col1-width', col1Width + 'px');
    this.boxElt.addStyle('--col2-width', col2Width + 'px');
};

/**
 *
 * @param {MListModalV2} boxElt
 * @constructor
 */
function MLMPagingController(boxElt) {
    this.boxElt = boxElt;
    this.$content = (0,ACore.$)('.am-list-popup-content', this.boxElt);
    this.$listScroller = (0,ACore.$)('.am-list-popup-list-scroller', this.boxElt);
    this.holderArr = [];
    this.$listPages = [];
    this.$listScroller.on('scroll', this.ev_scroll.bind(this));
}

MLMPagingController.prototype.itemPerPage = 100;
MLMPagingController.prototype.preloadN = 5;

MLMPagingController.prototype.fillPage = 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.boxElt);
        pageElt.addChild(itemElt);
    }
}

MLMPagingController.prototype.viewArr = function (itemHolders) {
    this.holderArr = itemHolders;
    var pageN = Math.ceil(this.holderArr.length / this.itemPerPage);
    while (this.$listPages.length > pageN) {
        this.$listPages.pop().remove();
    }
    var pageElt;
    while (this.$listPages.length < pageN) {
        pageElt = (0,ACore._)({
            class: 'am-check-list-page',
            child: []
        }).addTo(this.$content);
        this.$listPages.push(pageElt);
    }
    // console.log('viewArr', holderArr.length);
    var itemIdx = 0;
    var k;
    var pageHeights = Array(pageN).fill(0);
    var pageIdx;
    this.offsetTopOfHolders = [0];
    for (pageIdx = 0; pageIdx < pageN; ++pageIdx) {
        pageElt = this.$listPages[pageIdx];
        pageElt.clearChild();
        for (k = 0; (k < this.itemPerPage) && (itemIdx < this.holderArr.length); ++k, ++itemIdx) {
            pageHeights[pageIdx] += this.holderArr[itemIdx].computedSize.height;
            this.offsetTopOfHolders[itemIdx + 1] = this.offsetTopOfHolders[itemIdx] + this.holderArr[itemIdx].computedSize.height;
        }
    }

    for (pageIdx = 0; pageIdx < pageN; ++pageIdx) {
        pageElt = this.$listPages[pageIdx];
        pageElt.addStyle('height', pageHeights[pageIdx] + 'px');
    }
    this.$listScroller.scrollTop = 0;
    this.update();
};

MLMPagingController.prototype.update = function () {
    //by scrollTop
    var offset = this.$listScroller.scrollTop;
    var low = 0;
    var high = this.offsetTopOfHolders.length - 1;
    var mid;
    while (low < high) {
        mid = Math.floor((low + high) / 2);
        if (this.offsetTopOfHolders[mid] < offset) {
            low = mid + 1;
        }
        else {
            high = mid;
        }
    }
    var itemPerPage = this.itemPerPage;
    var startPageIdx = Math.max(0, Math.floor(low / this.itemPerPage - 1));
    var endPageIdx = Math.min(this.$listPages.length, startPageIdx + this.preloadN);
    var pageIdx;
    var pageLength;
    var itemStartIdx, itemEndIdx;
    var itemIdx;
    for (pageIdx = 0; pageIdx < startPageIdx; pageIdx++) {
        this.fillPage(this.$listPages[pageIdx], 0);
    }
    for (pageIdx = endPageIdx; pageIdx < this.$listPages.length; pageIdx++) {
        this.fillPage(this.$listPages[pageIdx], 0);
    }

    for (pageIdx = startPageIdx; pageIdx < endPageIdx; pageIdx++) {
        itemStartIdx = pageIdx * itemPerPage;
        itemEndIdx = Math.min(itemStartIdx + itemPerPage, this.holderArr.length);
        pageLength = itemEndIdx - itemStartIdx;
        this.fillPage(this.$listPages[pageIdx], pageLength);
        for (itemIdx = itemStartIdx; itemIdx < itemEndIdx; itemIdx++) {
            this.holderArr[itemIdx].attachView(this.$listPages[pageIdx].childNodes[itemIdx - itemStartIdx]);
        }
    }
};

MLMPagingController.prototype.ev_scroll = function () {
    this.update();
}

/**
 *
 * @param {MListModalV2} boxElt
 * @param data
 * @constructor
 */
function MLMHolder(boxElt, data) {
    this.boxElt = boxElt;
    this.id = (0,stringGenerate.randomIdent)(6);
    this.idx = 0;
    this.data = data;
    this.selected = false;
    (0,OOP/* drillProperty */.pj)(this, this, 'item', 'data');//adapt old
    this.value = data.value;
    this.wrappedText = [this.data.text];
    this.wrappedDesc = [this.data.desc];
    this.keyValue = (0,utils.keyStringOf)(data.value);
    this.itemElt = null;
    this.computedSize = { width: 0, height: 30, col1maxWidth: 0, col2maxWidth: 0 };
    this.calcInitSize();
}

MLMHolder.prototype.getSearchItem = function () {
    var res = { value: this.id };
    res.text = this.data.text + '';
    if (this.data.desc) res.text += " " + this.data.desc;
    return res;
};

MLMHolder.prototype.calcInitSize = function () {
    this.computedSize.textWidth = Math.ceil(TextMeasure/* default.measureWidth */.Z.measureWidth(this.data.text + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14));
    //- 30px  - 21px - 10px
    this.computedSize.col1maxWidth = this.computedSize.textWidth + 30;
    if (this.data.desc) {
        this.computedSize.descWidth = Math.ceil(TextMeasure/* default.measureWidth */.Z.measureWidth((this.data.desc || '') + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14));
        this.computedSize.col2maxWidth = this.computedSize.descWidth + 20;
    }
    else {
        this.computedSize.descWidth = 0;
    }
}


MLMHolder.prototype.applyViewWidth = function (col1Width, col2Width) {
    this.computedSize.availableTextWidth = col1Width - 30;
    this.computedSize.availableDescWidth = col2Width - 20;
    if (this.computedSize.availableTextWidth < this.computedSize.textWidth) {
        this.wrappedText = TextMeasure/* default.wrapText */.Z.wrapText(this.data.text + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14, this.computedSize.availableTextWidth);
    }
    else {
        this.wrappedText = [this.data.text + ''];
    }
    if (this.data.desc && this.computedSize.availableDescWidth < this.computedSize.descWidth) {
        this.wrappedDesc = TextMeasure/* default.wrapText */.Z.wrapText((this.data.desc || '') + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14, this.computedSize.availableDescWidth);
    }
    else {
        this.wrappedDesc = [(this.data.desc || '') + ''];
    }
    this.computedSize.height = Math.max(this.wrappedText.length, this.wrappedDesc.length) * 20 + 10;
};

MLMHolder.prototype.attachView = function (itemElt) {
    if (this.itemElt === itemElt) {
        this.updateView();
        return;
    }
    if (itemElt.mlmHolder) {
        itemElt.mlmHolder.detachView();
    }
    this.itemElt = itemElt;
    this.itemElt.mlmHolder = this;
    this.itemElt.data = this.data;
    this.itemElt.selected = this.data.selected;
    this.itemElt.addStyle('height', this.computedSize.height + 'px');
    this.itemElt.$text.firstChild.data = this.wrappedText.join('\n');
    this.itemElt.$desc.firstChild.data = this.wrappedDesc.join('\n');
};

MLMHolder.prototype.detachView = function () {
    if (this.itemElt) {
        this.itemElt.mlmHolder = null;
        this.itemElt = null;
    }
};

MLMHolder.prototype.updateView = function () {
    if (this.itemElt) {
        this.itemElt.selected = this.selected;
    }
};


/**
 *
 * @param {MListModalV2} boxElt
 * @constructor
 */
function MLMSearchController(boxElt) {
    this.boxElt = boxElt;
    this.$searchInput = (0,ACore.$)('searchtextinput', this.boxElt)
        .on('stoptyping', this.ev_searchModify.bind(this));
    this.cache = {};
    this.searchItems = null;
    this.holderDict = {};
}

MLMSearchController.prototype.reset = function () {
    this.cache = {};
    this.searchItems = null;
    this.holderDict = {};
}

MLMSearchController.prototype.prepareSearchingHolders = function () {
    if (this.searchItems) return;
    this.searchItems = [];
    this.holderDict = {};
    var visit = holder => {
        var it = holder.getSearchItem();
        this.holderDict[it.value] = holder;
        this.searchItems.push(it);
    };

    this.boxElt.itemHolders.forEach(visit);
    (0,search/* prepareSearchForList */.Lb)(this.searchItems);
};

MLMSearchController.prototype.resetSearchState = function () {
    this.$searchInput.value = '';
    this.ev_searchModify();

};

/**
 *
 * @param query
 * @returns {string[]} array of id
 */
MLMSearchController.prototype.query = function (query) {
    this.prepareSearchingHolders();
    var result = this.cache[query];
    var lcList;
    var visit;
    if (!result) {
        lcList = (0,search/* searchListByText */.o)(query, this.searchItems);
        result = [];
        visit = (it) => {
            result.push(it.value)
        };
        lcList.forEach(visit);
        this.cache[query] = result;
    }

    return result;
};

MLMSearchController.prototype.ev_searchModify = function () {
    var query = this.$searchInput.value;
    query = query.trim();
    if (query.length === 0) {
        this.boxElt.pagingCtrl.viewArr(this.boxElt.itemHolders);
        return;
    }
    var result = this.query(query);
    var arr = [];
    for (var i = 0; i < result.length; ++i) {
        arr.push(this.holderDict[result[i]]);
    }

    this.boxElt.pagingCtrl.viewArr(arr);
};


// EXTERNAL MODULE: ./node_modules/absol-acomp/js/SelectMenu.js
var js_SelectMenu = __webpack_require__(5357);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selectmenu/MSelectMenu.js






/***
 * @extends AElement
 * @constructor
 */
function MSelectMenu() {
    this._value = undefined;
    this._isFocus = false;
    this._itemsByValue = {};
    this.$holderItem = (0,ACore.$)('.am-selectmenu-holder-item', this);

    /***
     * @type {MListModalV2}
     */
    this.$selectlist = (0,ACore._)({
        tag: MListModalV2
    });

    this.$selectlist.cancelWaiting();

    var 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 = (0,ACore.$)('attachhook', this).on('error', this.eventHandler.attached);
    /**
     * @name value
     * @memberof MSelectMenu#
     */
    /**
     * @name items
     * @memberof MSelectMenu#
     */
}

MSelectMenu.tag = 'mselectmenu';
MSelectMenu.render = function () {
    return (0,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.findItemByValue = function (value) {
    return this.$selectlist.findItemByValue(value);
};

MSelectMenu.prototype.updateItem = function () {
    this.$holderItem.clearChild();
    var selected = this.findItemsByValue(this.value);
    if (selected) {
        var elt = (0,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/* default.prototype._dictByValue */.Z.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/* default.prototype.init */.Z.prototype.init;

MSelectMenu.property = {};


MSelectMenu.property.items = {
    set: function (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 () {
        return this._items || [];
    }
};

MSelectMenu.property.value = {
    set: function (value) {
        this._value = value;

        this.$selectlist.values = [value];
        this.updateItem();
    },
    get: function () {
        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 (value) {
        if (value) {
            this.addClass('as-strict-value');
        }
        else {
            this.removeClass('as-strict-value');
        }
    },
    get: function () {
        return this.hasClass('as-strict-value');
    }
};


MSelectMenu.property.enableSearch = {
    set: function (value) {
        this.$selectlist.enableSearch = !!value;
    },
    get: function () {
        return this.$selectlist.enableSearch;
    }
};


MSelectMenu.property.isFocus = {
    set: function (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 () {
        return this._isFocus;
    }
};

MSelectMenu.property.selectedIndex = js_SelectMenu/* default.property.selectedIndex */.Z.property.selectedIndex;

MSelectMenu.property.disabled = js_SelectMenu/* default.property.disabled */.Z.property.disabled;
MSelectMenu.property.hidden = js_SelectMenu/* default.property.hidden */.Z.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);
};


ACore/* default.install */.Z.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 = (0,ACore.$)('.am-selectmenu-holder-item', this);

    /***
     * @type {MTreeModal}
     */
    this.$selectlist = (0,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 = (0,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;
    }, {})
};

ACore/* default.install */.Z.install(MSelectTreeMenu);

/* harmony default export */ const selecttreemenu_MSelectTreeMenu = ((/* unused pure expression or super */ null && (MSelectTreeMenu)));
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multicheckmenu/MCheckListModal.js


















function MCheckListModal_measureListSize(items) {
    var descWidth = measureMaxDescriptionWidth(items);
    var textWidth = measureMaxTextWidth(items);
    var width = descWidth + 20 + textWidth + 12 + 15 + 18;//padding, margin
    return {
        width: width,
        descWidth: descWidth,
        textWidth: textWidth
    };
}

var MCheckListModal_itemPool = [];

function MCheckListModal_onClickItem(event) {
    var thisSL = this.$parent;
    if (thisSL) {
        thisSL.eventHandler.selectItem(this, event);
    }
}

/**
 * @returns {MSelectListItem}
 */
function MCheckListModal_makeItem() {
    return (0,ACore._)({
        tag: multicheckmenu_MChecklistItem,
        on: {
            select: MCheckListModal_onClickItem
        }
    });
}

function MCheckListModal_requireItem($parent) {
    var item;
    if (MCheckListModal_itemPool.length > 0) {
        item = MCheckListModal_itemPool.pop();
    }
    else {
        item = MCheckListModal_makeItem();
    }
    item.$parent = $parent;
    return item;
}

function MCheckListModal_releaseItem(item) {
    item.$parent = null;
    item.attr('class', 'am-selectlist-item');
    item.selected = false;
    MCheckListModal_itemPool.push(item);
}


/***
 * @extends MListModal
 * @constructor
 */
function MCheckListModal() {
    this.itemHolderByValue = {};
    this.itemHolders = [];
    this.domSignal = new DelaySignal/* default */.Z();
    this.$checkAll = (0,ACore.$)('.as-select-list-box-check-all', this);
    this.$attachhook = (0,ACore._)('attachhook').addTo(this);
    this.$box = (0,ACore.$)('.am-list-popup-box', this);
    this.$scroller = (0,ACore.$)('.am-check-list-scroller', this);
    this.pagingCtrl = new MCLPagingController(this);
    this.actionCtrl = new MCLActionController(this);
    this.searchCtrl = new MCLSearchController(this);
    this.screenSize = (0,Dom/* getScreenSize */.tE)();
    this.widthLimit = this.screenSize.width - 20;
    this._values = [];
    this._valueDict = {};
    this.layoutCtrl = new MCLLayoutController(this);
    /**
     * @type {boolean}
     * @name selectedAll
     * @memberOf MCheckListModal#
     * @readonly
     */

    /**
     * @type {[]}
     * @name values
     * @memberOf MCheckListModal#
     */

    /**
     * @type {[]}
     * @name items
     * @memberOf MCheckListModal#
     */
}


MCheckListModal.tag = 'MChecklistModal'.toLowerCase();

Object.assign(MCheckListModal.prototype, selectlistbox_MListModal.prototype);
MCheckListModal.property = Object.assign({}, selectlistbox_MListModal.property);
MCheckListModal.eventHandler = Object.assign({}, selectlistbox_MListModal.eventHandler);

delete MCheckListModal.property.orderly;

MCheckListModal.render = function () {
    return (0,ACore._)({
        extendEvent: ['change', 'close', 'cancel'],
        class: ['am-list-modal', 'am-check-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-check-list-scroller',
                        child: {
                            class: 'am-list-popup-content'
                        }
                    },
                    {
                        class: 'as-dropdown-box-footer',
                        child: [
                            {
                                tag: 'checkbox',
                                class: 'as-select-list-box-check-all',
                                props: {
                                    checked: false,
                                    text: 'Check All'
                                }
                            },
                            {
                                class: 'as-dropdown-box-footer-right',
                                child: {
                                    tag: 'a',
                                    class: 'as-select-list-box-cancel-btn',
                                    child: { text: 'Cancel' }
                                }
                            }
                        ]
                    }
                ]
            }
        ]
    });
};

MCheckListModal.prototype.addTo = function (parent) {
    AElement/* default.prototype.addTo.apply */.Z.prototype.addTo.apply(this, arguments);
    this.pagingCtrl.viewListAt(0);
};

/**
 * wrong function name
 * @deprecated
 * @param value
 * @returns {*|null}
 */
MCheckListModal.prototype.findItemsByValue = function (value) {
    var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (holder) return holder.data;
    return null;
};

MCheckListModal.prototype.findItemByValue = function (value) {
    var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (holder) return holder.data;
    return null;
};


MCheckListModal.prototype.refollow = noop/* default */.Z;
MCheckListModal.prototype.updatePosition = noop/* default */.Z;

MCheckListModal.prototype.resetSearchState = function () {
    this.searchCtrl.resetSearchState();
};

/**
 *
 * @param value
 * @returns {null|[*]}
 */
MCheckListModal.prototype.findItemHoldersByValue = function (value) {
    var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (holder) return [holder];
    return null;
};


MCheckListModal.prototype.viewListAtValue = function (value) {
    this.pagingCtrl.viewListAtValue(value);
};

MCheckListModal.prototype.viewListAtFirstSelected = function () {
    var value = this.values[0];
    var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (!holder) return;
    var idx = holder.idx;
    this.pagingCtrl.viewListAt(idx);
};


MCheckListModal.property.values = {
    set: function (values) {
        values = values || [];
        if (!Array.isArray(values)) {
            values = [];
        }
        this._values = values.slice();
        this._valueDict = this._values.reduce((ac, cr) => {
            ac[(0,utils.keyStringOf)(cr)] = cr;
            return ac;
        }, {});
        this.itemHolders.forEach(holder => {
            holder.selected = holder.valueKey in this._valueDict;
            holder.updateView();
        });
        this.$checkAll.checked = this.selectedAll;
    },
    get: function () {
        var valueHolders = this._values.map(value => {
            var holder = this.itemHolderByValue[(0,utils.keyStringOf)(value)];
            return holder ? {
                value: value,
                idx: holder.idx,
            } : null;
        }).filter(x => !!x);

        valueHolders.sort((a, b) => a.idx - b.idx);
        return valueHolders.map(x => x.value);
    }
};

MCheckListModal.property.items = {
    /**
     * @this {MCheckListModal}
     * @param items
     */
    set: function (items) {
        items = items || [];
        if (!Array.isArray(items)) items = [];
        items = (0,utils.copySelectionItemArray)(items, { removeNoView: true, removeNewLine: true });
        this._items = items;

        this.itemHolders = this._items.map(it => new MCLHolder(this, it, null));
        this.itemHolderByValue = this.itemHolders.reduce((ac, cr) => {
            return cr.toDictionary(ac);
        }, {});
        //update idx
        var idx = 0;
        var visit = (nd) => {
            nd.idx = idx++;
            if (nd.children && nd.children.length) {
                nd.children.forEach(visit);
            }
        }
        this.itemHolders.forEach(visit);

        this.layoutCtrl.calcSize();
        this.pagingCtrl.viewArr(this.itemHolders);
        this.$checkAll.checked = this.selectedAll;
    },
    get: function () {
        return this._items;
    }
};

MCheckListModal.property.selectedItems = {
    get: function () {
        var holders = this._values.map(value => this.itemHolderByValue[(0,utils.keyStringOf)(value)]).filter(x => !!x);
        holders.sort((a, b) => a.idx - b.idx);
        return holders.map(it => it.data);
    }
};


MCheckListModal.property.selectedAll = {
    get: function () {
        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 {MCheckListModal}
 * @param itemElt
 * @param event
 */
MCheckListModal.eventHandler.selectItem = function (itemElt, event) {
    var selected = itemElt.selected;
    var data = itemElt.data;
    var value = itemElt.value;
    var key = (0,utils.keyStringOf)(value);
    var holder = this.itemHolderByValue[key];
    if (holder) {
        holder.selected = selected;
    }
    var idx;
    if (selected) {
        this._valueDict[key] = true;
        this._values.push(value);
        this.$checkAll.checked = this.selectedAll;
    }
    else {
        delete this._valueDict[key];
        idx = this._values.indexOf(value);
        if (idx >= 0)
            this._values.splice(idx, 1);
        this.$checkAll.checked = false;
    }

    this.emit('change', {
        type: 'change',
        target: this,
        itemElt: this,
        value: value,
        data: data,
        itemData: data,
        action: selected ? "check" : "uncheck",
        originalEvent: event.originalEvent || event.originEvent || event
    });
};


MCheckListModal.eventHandler.checkAllChange = CheckListBox.eventHandler.checkAllChange;

MCheckListModal.eventHandler.clickCancelBtn = CheckListBox.eventHandler.clickCancelBtn;

ACore/* default.install */.Z.install(MCheckListModal);


/* harmony default export */ const multicheckmenu_MCheckListModal = (MCheckListModal);


/**
 *
 * @param {MCheckListModal} boxElt
 * @constructor
 */
function MCLLayoutController(boxElt) {
    this.boxElt = boxElt;
}

MCLLayoutController.prototype.calcSize = function () {
    var holders = this.boxElt.itemHolders;
    var screenSize = this.boxElt.screenSize;
    var maxAvailableWidth = Math.max(0, screenSize.width - 20);
    var col1maxWidth = 0;
    var col2maxWidth = 0;

    var visit = (nd) => {
        if (nd.computedSize.col1maxWidth > col1maxWidth) {
            col1maxWidth = nd.computedSize.col1maxWidth;
        }
        if (nd.computedSize.col2maxWidth > col2maxWidth) {
            col2maxWidth = nd.computedSize.col2maxWidth;
        }
        if (nd.children && nd.children.length) {
            nd.children.forEach(visit);
        }
    }
    holders.forEach(visit);
    var col1Width = col1maxWidth;
    var col2Width = col2maxWidth;

    if (col1maxWidth + col2maxWidth > maxAvailableWidth) {
        col1Width = col1maxWidth / ((col1maxWidth + col2maxWidth) || 1) * maxAvailableWidth;
        col2Width = Math.max(maxAvailableWidth - col1Width, 0);
    }

    var visit2 = (nd) => {
        nd.applyViewWidth(col1Width, col2Width);
        if (nd.children && nd.children.length) {
            nd.children.forEach(visit2);
        }
    }
    holders.forEach(visit2);
    this.boxElt.addStyle('--col1-width', col1Width + 'px');
    this.boxElt.addStyle('--col2-width', col2Width + 'px');


};

/**
 * @extends CLHolder
 * @param {MCheckListModal} boxElt
 * @param data
 * @param parent
 * @constructor
 */
function MCLHolder(boxElt, data, parent) {
    this.idx = 0;
    this.id = (0,stringGenerate.randomIdent)(8);
    this.parent = parent;
    this.level = parent ? parent.level + 1 : 0;
    this.boxElt = boxElt;
    this.data = data;
    (0,OOP/* drillProperty */.pj)(this, this, 'item', 'data');//adapt mobile and desktop
    this.valueKey = (0,utils.keyStringOf)(data.value);
    this.itemKey = keyStringOfItem(data);
    this.itemElt = null;
    this.children = null;
    this.selected = this.valueKey in boxElt._valueDict;
    var Clazz = this.constructor;
    if (data.items && data.items.length > 0) {
        this.children = data.items.map(it => new Clazz(boxElt, it, this));
    }

    this.computedSize = {
        textWidth: 0,
        descWidth: 0,
        width: 0,
        height: 0,
        col1maxWidth: 0,
        col2maxWidth: 0,
        col1Width: 0,
        col2width: 0,
        availableTextWidth: 0,
        availableDescWidth: 0,
        levelWidth: 0,
    };
    this.calcInitSize();
    this.wrappedText = [this.data.text];
    this.wrappedDesc = [this.data.desc];
}

(0,OOP/* mixClass */.Jx)(MCLHolder, CLHolder);


MCLHolder.prototype.calcInitSize = function () {
    this.computedSize.textWidth = Math.ceil(TextMeasure/* default.measureWidth */.Z.measureWidth(this.data.text + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14));
    this.computedSize.levelWidth = this.level * 12;
    //- 30px  - 21px - 10px
    this.computedSize.col1maxWidth = this.computedSize.textWidth + 30 + this.computedSize.levelWidth + 21 + 10;//todo
    if (this.data.desc) {
        this.computedSize.descWidth = Math.ceil(TextMeasure/* default.measureWidth */.Z.measureWidth((this.data.desc || '') + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14));
        this.computedSize.col2maxWidth = this.computedSize.descWidth + 20;
    }
    else {
        this.computedSize.descWidth = 0;
    }
};


MCLHolder.prototype.applyViewWidth = function (col1Width, col2Width) {
    this.computedSize.col1Width = col1Width;
    this.computedSize.col2Width = col2Width;
    this.computedSize.availableTextWidth = col1Width - 30 - this.computedSize.levelWidth - 21 - 10;
    if (col1Width < this.computedSize.col1maxWidth) {//must wrap
        this.wrappedText = TextMeasure/* default.wrapText */.Z.wrapText(this.data.text + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14,
            this.computedSize.availableTextWidth);
    }
    else {
        this.wrappedText = [this.data.text];
    }
    if (col2Width && col2Width < this.computedSize.col2maxWidth && this.data.desc) {//must wrap
        this.computedSize.availableDescWidth = col2Width - 20;
        this.wrappedDesc = TextMeasure/* default.wrapText */.Z.wrapText((this.data.desc || '') + '', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14,
            this.computedSize.availableDescWidth);
    }
    else {
        this.wrappedDesc = [(this.data.desc || '') + ''];
    }
    this.computedSize.height = 10 + Math.max(this.wrappedText.length, this.wrappedDesc.length, 1) * 20;
    this.computedSize.width = Math.ceil(this.boxElt.screenSize.width - 20);
};


MCLHolder.prototype.toArray = function (ac) {
    ac = ac || [];
    ac.push(this);
    if (this.children) this.children.reduce((ac, holder) => holder.toArray(ac), ac);
    return ac;
};

MCLHolder.prototype.toDictionary = function (ac) {
    ac = ac || {};
    ac[this.valueKey] = this;
    if (this.children) this.children.reduce((ac, holder) => holder.toDictionary(ac), ac);
    return ac;
};


MCLHolder.prototype.detachView = function () {
    if (this.itemElt) {
        this.itemElt.attr('title', null);
        this.itemElt.clHolder = null;
        this.itemElt = null;
    }
};

MCLHolder.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(c => c.getSearchItem())
    return res;
};


MCLHolder.prototype.attachView = function (itemElt) {
    if (this.itemElt === itemElt) return;
    if (itemElt.clHolder) itemElt.clHolder.detachView();

    itemElt.clHolder = this;
    this.itemElt = itemElt;
    itemElt.data = this.data;
    itemElt.level = this.level;
    itemElt.selected = this.selected;
    itemElt.$text.firstChild.data = this.wrappedText.join('\n');
    itemElt.$desc.firstChild.data = this.wrappedDesc && this.wrappedDesc.length ? this.wrappedDesc.join('\n') : '';
    itemElt.addStyle('height', this.computedSize.height + 'px');
}

MCLHolder.prototype.updateView = function () {
    if (this.itemElt) {
        this.itemElt.selected = this.selected;
    }
};


/**
 * @extends MCLHolder
 * @param  {MCheckListModal} boxElt
 * @param origin
 * @param parent
 * @param result
 * @constructor
 */
function MCLHolderRef(boxElt, origin, parent, result) {
    this.boxElt = boxElt;
    this.origin = origin;
    this.data = origin.data;
    this.parent = parent;
    this.level = origin.level;
    this.wrappedText = origin.wrappedText;
    this.wrappedDesc = origin.wrappedDesc;
    OOP/* default.drillProperty */.ZP.drillProperty(this, origin, 'selected');
    var Clazz = this.constructor;
    var arr, children;
    if (origin.children) {
        arr = origin.children.filter(it => !!result[it.id]);
        arr.sort((a, b) => result[a.id] - result[b.id]);
        children = arr.map(holder => new Clazz(boxElt, holder, this, result));
        if (children.length > 0) this.children = children;
    }
    this.computedSize = origin.computedSize;
}

(0,OOP/* mixClass */.Jx)(MCLHolderRef, MCLHolder);


/**
 *
 * @param {MCheckListModal} boxElt
 * @constructor
 */
function MCLPagingController(boxElt) {
    this.boxElt = boxElt;
    this.$listScroller = (0,ACore.$)('.am-check-list-scroller', this.boxElt)
        .on('scroll', this.ev_scroll.bind(this));
    this.$listPages = [];
    this.$content = (0,ACore.$)('.am-list-popup-content', this.boxElt);
    this.holderArr = [];
    this.offsetTopOfHolders = [];//y of each item
}

MCLPagingController.prototype.preLoadN = 3;
MCLPagingController.prototype.itemPerPage = 100;

MCLPagingController.prototype._requireItem = function (pageElt, n) {
    var itemElt;
    while (pageElt.childNodes.length > n) {
        itemElt = pageElt.lastChild;
        itemElt.selfRemove();
        MCheckListModal_releaseItem(itemElt);
    }
    while (pageElt.childNodes.length < n) {
        itemElt = MCheckListModal_requireItem(this.boxElt);
        pageElt.addChild(itemElt);
    }
};

MCLPagingController.prototype.viewArr = function (itemHolders) {
    this.holderArr = itemHolders.reduce((ac, holder) => holder.toArray(ac), []);

    var pageN = Math.ceil(this.holderArr.length / this.itemPerPage);
    while (this.$listPages.length > pageN) {
        this.$listPages.pop().remove();
    }
    var pageElt;
    while (this.$listPages.length < pageN) {
        pageElt = (0,ACore._)({
            class: 'am-check-list-page',
            child: []
        }).addTo(this.$content);
        this.$listPages.push(pageElt);
    }
    var itemIdx = 0;
    var k;
    var pageHeights = Array(pageN).fill(0);
    var pageIdx;
    this.offsetTopOfHolders = [0];
    for (pageIdx = 0; pageIdx < pageN; ++pageIdx) {
        pageElt = this.$listPages[pageIdx];
        pageElt.clearChild();
        for (k = 0; (k < this.itemPerPage) && (itemIdx < this.holderArr.length); ++k, ++itemIdx) {
            pageHeights[pageIdx] += this.holderArr[itemIdx].computedSize.height;
            this.offsetTopOfHolders[itemIdx + 1] = this.offsetTopOfHolders[itemIdx] + this.holderArr[itemIdx].computedSize.height;
        }
    }

    for (pageIdx = 0; pageIdx < pageN; ++pageIdx) {
        pageElt = this.$listPages[pageIdx];
        pageElt.addStyle('height', pageHeights[pageIdx] + 'px');
    }
    this.$listScroller.scrollTop = 0;
    this.update();
};

MCLPagingController.prototype.update = function () {
    var now = Date.now();
    //by scrollTop
    var offset = this.$listScroller.scrollTop;
    var low = 0;
    var high = this.offsetTopOfHolders.length - 1;
    var mid;
    while (low < high) {
        mid = Math.floor((low + high) / 2);
        if (this.offsetTopOfHolders[mid] < offset) {
            low = mid + 1;
        }
        else {
            high = mid;
        }
    }
    var itemPerPage = this.itemPerPage;
    var startPageIdx = Math.max(0, Math.floor(low / this.itemPerPage - 1));
    var endPageIdx = Math.min(this.$listPages.length, startPageIdx + this.preLoadN);
    var pageIdx;
    var pageLength;
    var itemStartIdx, itemEndIdx;
    var itemIdx;
    for (pageIdx = 0; pageIdx < startPageIdx; pageIdx++) {
        this._requireItem(this.$listPages[pageIdx], 0);
    }
    for (pageIdx = endPageIdx; pageIdx < this.$listPages.length; pageIdx++) {
        this._requireItem(this.$listPages[pageIdx], 0);
    }

    for (pageIdx = startPageIdx; pageIdx < endPageIdx; pageIdx++) {
        itemStartIdx = pageIdx * itemPerPage;
        itemEndIdx = Math.min(itemStartIdx + itemPerPage, this.holderArr.length);
        pageLength = itemEndIdx - itemStartIdx;
        this._requireItem(this.$listPages[pageIdx], pageLength);
        for (itemIdx = itemStartIdx; itemIdx < itemEndIdx; itemIdx++) {
            this.holderArr[itemIdx].attachView(this.$listPages[pageIdx].childNodes[itemIdx - itemStartIdx]);
        }
    }
}

MCLPagingController.prototype.viewListAtValue = function (value) {
    var holder = this.boxElt.itemHolderByValue[(0,utils.keyStringOf)(value)];
    if (!holder) return;
    var idx = holder.idx;
    this.$listScroller.scrollTop = this.offsetTopOfHolders[idx] || 0;
    this.update();
};

MCLPagingController.prototype.viewListAt = function (offset) {
    this.$listScroller.scrollTop = this.offsetTopOfHolders[offset] || 0;
    this.update();
};

MCLPagingController.prototype.ev_scroll = function () {
    this.update();
};

function MCLSearchController(boxElt) {
    this.boxElt = boxElt;
    this.$searchInput = (0,ACore.$)('searchtextinput', boxElt)
        .on('stoptyping', this.ev_searchModify.bind(this));
    this.cache = {};
    this.searchItems = null;
    this.holderDict = null;
    this.session = Math.floor(Math.random() * 1000000);
}

MCLSearchController.prototype.reset = function () {
    this.cache = {};
    this.searchItems = null;
    this.holderDict = null;//by id
    this.session = Math.floor(Math.random() * 1000000);
};

MCLSearchController.prototype.prepareSearchingHolders = function () {
    if (this.searchItems) return;
    this.searchItems = this.boxElt.itemHolders.map(it => it.getSearchItem());
    (0,search/* prepareSearchForList */.Lb)(this.searchItems);
    var holderDict = {};
    var visit = (nd) => {
        var id = nd.id;
        holderDict[id] = nd;
        if (nd.children && nd.children.length) {
            nd.children.forEach(visit);
        }
    }

    this.boxElt.itemHolders.forEach(visit);
    this.holderDict = holderDict;
};

MCLSearchController.prototype.resetSearchState = function () {
    this.$searchInput.value = '';
    this.session = Math.floor(Math.random() * 1000000);
    this.ev_searchModify();
};

/**
 *
 * @param query
 * @returns {null|{}} return dictionary of id
 */
MCLSearchController.prototype.query = function (query) {
    //todo: async or split task
    this.prepareSearchingHolders();
    var result = this.cache[query];
    var lcList;
    var visit, idx;
    if (!result) {
        lcList = (0,search/* searchTreeListByText */.$l)(query, this.searchItems);
        result = {};
        idx = 0;
        visit = (it) => {
            result[it.value] = ++idx;
            if (it.items && it.items.length) {
                it.items.forEach(visit);
            }
        };
        lcList.forEach(visit);
        this.cache[query] = result;
    }
    this.ev_queryComplete(result);
    return result;
};

MCLSearchController.prototype.ev_queryComplete = function (result) {
    var arr = this.boxElt.itemHolders.filter(it => !!result[it.id]);
    arr.sort((a, b) => result[a.id] - result[b.id]);
    var searchHolders = arr.map(holder => new MCLHolderRef(this.boxElt, holder, null, result));
    this.boxElt.pagingCtrl.viewArr(searchHolders);
};

MCLSearchController.prototype.ev_searchModify = function () {
    var query = this.$searchInput.value;
    query = query.trim();
    if (query.length === 0) {
        this.boxElt.pagingCtrl.viewArr(this.boxElt.itemHolders);
        return;
    }
    this.query(query);
};

/**
 *
 * @param {MCheckListModal} boxElt
 * @constructor
 */
function MCLActionController(boxElt) {
    this.boxElt = boxElt;
    this.$checkAll = this.boxElt.$checkAll;
    this.$cancelBtn = (0,ACore.$)('.as-select-list-box-cancel-btn', boxElt);
    this.$closeBtn = (0,ACore.$)('.am-list-popup-close-btn', boxElt);
    this.$checkAll.on('change', this.ev_checkedChange.bind(this));
    this.boxElt.on('click', this.ev_clickModal.bind(this));
    this.$closeBtn.on('click', this.ev_clickClose.bind(this));
    this.$cancelBtn.on('click', this.ev_clickCancel.bind(this));
}

MCLActionController.prototype.ev_checkedChange = function () {
    var values = this.boxElt._values;
    var dict = this.boxElt._valueDict;
    while (values.length > 0) values.pop();
    Object.keys(dict).forEach(function (key) {
        delete dict[key];
    });
    var checked = this.$checkAll.checked;
    var visit = (nd) => {
        if (!nd.data.noSelect)
            nd.selected = checked;
        if (checked && !dict[nd.valueKey]) {
            dict[nd.valueKey] = true;
            values.push(nd.data.value);
        }
        if (nd.children && nd.children.length) {
            nd.children.forEach(visit);
        }
    };

    this.boxElt.itemHolders.forEach(visit);
    this.boxElt.pagingCtrl.holderArr.forEach(hd => hd.updateView());
    this.boxElt.emit('change', { type: 'change' }, this);
};

MCLActionController.prototype.ev_clickCancel = function () {
    this.boxElt.emit('cancel', { type: 'cancel' }, this);
};

MCLActionController.prototype.ev_clickClose = function () {
    this.boxElt.emit('close', { type: 'close' }, this);
};

MCLActionController.prototype.ev_clickModal = function (event) {
    if (event.target === this.boxElt) {
        this.boxElt.emit('close', { type: 'close' }, this);
    }
};


;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MultiCheckMenu.js
















var hitItem = event => {
    var target = event.target;
    for (var i = 0; i < 5 && target; ++i) {
        if (target.hasClass && target.hasClass('absol-selectbox-item')) return true;
        target = target.parentElement;
    }
    return false;
}

var hitClose = event => {
    var target = event.target;
    if (target.hasClass && target.hasClass('absol-selectbox-item-close')) return true;
    target = target.parentElement;
    return !!(target.hasClass && target.hasClass('absol-selectbox-item-close'));
};


/***
 * @extends AElement
 * @constructor
 */
function MultiCheckMenu() {
    (0,MultiLanguageCSS/* loadLanguageModule */.q)();
    this.addClass('as-multi-check-menu');

    // this.on('click', this.eventHandler.click);
    /***
     * @type {CheckListBox|MCheckListModal}
     */
    this.$selectlistBox = (0,ACore._)({
        tag: BrowserDetector/* default.isMobile */.Z.isMobile ? multicheckmenu_MCheckListModal : CheckListBox,//use new version//TODO: in process
        props: {
            anchor: [1, 6, 2, 5],
        }
    });
    (0,OOP/* drillProperty */.pj)(this, this.$selectlistBox, 'debug')

    this.addStyle('--as-width-limit', Math.max(140, (this.$selectlistBox.widthLimit || 0)) + 'px');

    this.$itemCtn = (0,ACore.$)('.as-multi-select-menu-item-ctn', this);
    this.$attachhook = (0,ACore.$)('attachhook', this)
        .on('attached', this.eventHandler.attached);
    this.$attachhook.requestUpdateSize = this.updateSize.bind(this);

    this.boxCtrl = new MSMBoxController(this);
    this.itemsViewCtrl = new MSMItemsViewController(this);


    OOP/* default.drillProperty */.ZP.drillProperty(this, this.boxCtrl, 'isFocus');
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$selectlistBox, 'enableSearch');
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.itemsViewCtrl, '$items');//adapt
    this.commitedValues = [];//commit value


    this.$selectlistBox.followTarget = this;
    this.$selectlistBox.sponsorElement = this;
    this.disableClickToFocus = false;
    this.orderly = true;//always true
    this.itemFocusable = false;


    /**
     * @type {boolean}
     * @memberof MultiCheckMenu#
     * @name disabled
     */

    /**
     * @type {boolean}
     * @memberof MultiCheckMenu#
     * @name readOnly
     */

    /**
     * @type {Array<number|null|string|Date>}
     * @memberof MultiCheckMenu#
     * @name values
     */


}


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);
delete MultiCheckMenu.property.isFocus;
delete MultiCheckMenu.property.orderly;


MultiCheckMenu.prototype.styleHandlers = {};

MultiCheckMenu.prototype.styleHandlers.maxWidth = function (value) {
    var parsedValue = (0,attribute.parseMeasureValue)(value);
    if (parsedValue.unit === 'px') {
        this.addClass('as-has-max-width');
        this.addStyle('--max-width', value);
    }
    else {
        this.removeClass('as-has-max-width');
    }
};

MultiCheckMenu.prototype.styleHandlers['max-width'] = MultiCheckMenu.prototype.styleHandlers.maxWidth;

MultiCheckMenu.prototype.styleHandlers.width = function (value) {
    var parsedValue = (0,attribute.parseMeasureValue)(value);
    if (parsedValue.unit === 'px') {
        this.addClass('as-has-max-width');
        this.addStyle('--max-width', value);
        this.style.width = value;
    }
    else {
        this.removeClass('as-has-max-width');
    }
};

/**
 * @this MultiCheckMenu
 * @param value
 */
MultiCheckMenu.prototype.styleHandlers.maxHeight = function (value) {
    var psValue = (0,attribute.parseMeasureValue)(value);
    if (psValue) {
        switch (psValue.unit) {
            case 'px':
                psValue.value = Math.min(psValue.value, 90);
                break;
            case 'em':
            case 'rem':
                psValue.value = Math.min(psValue.value, 90 / 14);
                break;
        }
        this.$itemCtn.addStyle('max-height', psValue.value + psValue.unit);
    }
    else {
        this.$itemCtn.removeStyle('max-height');
    }
};

MultiCheckMenu.prototype.styleHandlers['max-height'] = MultiCheckMenu.prototype.styleHandlers.maxHeight;
MultiCheckMenu.prototype.styleHandlers.hidden = function (value) {
    if (value === 'hidden') {
        this.style.overflow = 'hidden';
        this.$itemCtn.style.overflow = 'hidden';
    }
    else {
        this.style.overflow = '';
        this.$itemCtn.style.overflow = '';

    }
}


MultiCheckMenu.prototype.addStyle = function (arg0, arg1) {
    if ((typeof arg0 === "string") && (this.styleHandlers[arg0])) {
        this.styleHandlers[arg0].apply(this, Array.prototype.slice.call(arguments, 1));
        return this;
    }
    else {
        return AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
    }
};

MultiCheckMenu.prototype.removeStyle = function (arg0) {
    if ((typeof arg0 === "string") && (this.styleHandlers[arg0])) {
        this.styleHandlers[arg0].call(this, '');
        return this;
    }
    else {
        return AElement/* default.prototype.removeStyle.apply */.Z.prototype.removeStyle.apply(this, arguments);
    }
};

MultiCheckMenu.prototype._updateOverflow = function () {
    //todo: calc item size before render
    var bound, i;
    var fromIdx = Infinity;
    if (this.getComputedStyleValue('overflow') === 'hidden') {
        bound = this.getBoundingClientRect();
        if (bound.width === 0) return;
        this.$itemCtn.removeClass('as-has-more');
        var hasMore = false;
        var elt;
        for (i = 0; i < this.$itemCtn.childNodes.length; ++i) {
            elt = this.$itemCtn.childNodes[i];
            if (!hasMore) {
                elt.removeStyle('display');
                var cBound = elt.getBoundingClientRect();
                if (cBound.bottom > bound.bottom) {
                    hasMore = true;
                    fromIdx = i - 1;
                    break;
                }
            }
        }
        if (hasMore) {
            this.$itemCtn.addClass('as-has-more');
            for (i = 0; i < this.$itemCtn.childNodes.length; ++i) {
                elt = this.$itemCtn.childNodes[i];
                if (i > 0 && i >= fromIdx) {
                    elt.addStyle('display', 'none');
                }
                else {
                    elt.removeStyle('display');
                }
            }
        }
        else {
            for (i = 0; i < this.$itemCtn.childNodes.length; ++i) {
                elt = this.$itemCtn.childNodes[i];
                elt.removeStyle('display');
            }
        }
    }
};


MultiCheckMenu.property.values = {
    set: function (values) {
        if (values === undefined || values === null) values = [];
        else if (!Array.isArray(values)) values = [values];
        this.$selectlistBox.values = values;
        this.commitedValues = this.$selectlistBox.values;
        this.itemsViewCtrl.update();
    },
    get: function () {
        return this.commitedValues;
    }
};

MultiCheckMenu.property.items = {
    /**
     * @this MultiCheckMenu
     * @param items
     */
    set: function (items) {
        this.$selectlistBox.items = items;
        this.commitedValues = this.$selectlistBox.values;

        this.addStyle('--list-min-width', Math.max(140, this.$selectlistBox._estimateWidth || 0) + 'px');
        this.itemsViewCtrl.update();
    },
    get: function () {
        return this.$selectlistBox.items;
    }
};

MultiCheckMenu.property.placeholder = {
    set: function (value) {
        if (typeof value === "string") value = value.trim();
        if (value) {
            this.$itemCtn.attr('data-placeholder', value + '');
        }
        else {
            this.$itemCtn.attr('data-placeholder', null);
        }
    },
    get: function () {
        return this.$itemCtn.attr('data-placeholder') || '';
    }
};

MultiCheckMenu.prototype.updateSize = function () {
    var bound;
    if (this.boxCtrl.isFocus) {
        bound = this.getBoundingClientRect();
        if (!BrowserDetector/* default.isMobile */.Z.isMobile)
            this.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.$selectlistBox.getFontSize() * 18.5) + 'px');
        this.$selectlistBox.refollow();
        this.$selectlistBox.updatePosition();
    }
};


MultiCheckMenu.prototype.findItemsByValue = function (value) {
    return this.$selectlistBox.findItemsByValue(value);
};


MultiCheckMenu.prototype.findItemByValue = function (value) {
    return this.$selectlistBox.findItemByValue(value);
}


MultiCheckMenu.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
}

/***
 * call after close checklistbox
 * @param event
 */


MultiCheckMenu.eventHandler.selectListBoxPressItem = function (event) {
    console.log('press')
    var prevValues = this.commitedValues;
    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.commitedValues = 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);
};


ACore/* default.install */.Z.install(MultiCheckMenu);

/* harmony default export */ const js_MultiCheckMenu = (MultiCheckMenu);


/**
 *
 * @param {MultiCheckMenu} elt
 * @constructor
 */
function MSMItemsViewController(elt) {
    this.elt = elt;
    this.$items = [];
}

MSMItemsViewController.prototype.share = {
    pool: [],
    pressCloseEventHandle: function pressCloseEventHandle(event) {
        var parentElt = this.$parent;
        if (!parentElt) return;
        parentElt.itemsViewCtrl.ev_pressCloseItem(this, event);
    },
    pressHandler: function pressHandler(event) {
        var parentElt = this.$parent;
        if (!parentElt) return;
        parentElt.itemsViewCtrl.ev_pressItem(this, event);
    }
};


MSMItemsViewController.prototype.revokeResource = function () {
    delete this.elt;
};


MSMItemsViewController.prototype.makeItem = function () {
    return (0,ACore._)({
        tag: 'selectboxitem',
        on: {
            close: this.share.pressCloseEventHandle,
            press: this.share.pressHandler
        }
    });
};

MSMItemsViewController.prototype.releaseItem = function (itemElt) {
    this.share.pool.push(itemElt);
    itemElt.$parent = null;
};

MSMItemsViewController.prototype.requireItem = function () {
    var itemElt;
    if (this.share.pool.length > 0) {
        itemElt = this.share.pool.pop();
    }
    else {
        itemElt = this.makeItem();
    }
    itemElt.$parent = this.elt;
    return itemElt;
}


MSMItemsViewController.prototype.requireListLength = function (n) {
    if (!(0,utils.isNaturalNumber)(n)) n = 0;
    var itemElt;
    while (this.$items.length < n) {
        itemElt = this.requireItem();
        this.elt.$itemCtn.addChild(itemElt);
        this.$items.push(itemElt);
    }

    while (this.$items.length > n) {
        itemElt = this.$items.pop();
        this.elt.$itemCtn.removeChild(itemElt);
        this.releaseItem(itemElt);
    }

};

MSMItemsViewController.prototype.assignItems = function (items) {
    for (var i = 0; i < this.$items.length && i < items.length; ++i) {
        this.$items[i].data = items[i];
    }
};


MSMItemsViewController.prototype.viewItems = function (items) {
    var cBound = this.elt.getBoundingClientRect();
    this.requireListLength(items.length);
    this.assignItems(items);
    setTimeout(this.elt._updateOverflow.bind(this.elt), 10)
    setTimeout(this.elt._updateOverflow.bind(this.elt), 100)
    setTimeout(this.elt._updateOverflow.bind(this.elt), 150)

    var nBound = this.elt.getBoundingClientRect();
    if (nBound.width !== cBound.width || nBound.height !== cBound.height) {
        ResizeSystem/* default.updateUp */.Z.updateUp(this.elt);
    }
};

MSMItemsViewController.prototype.viewItemsByIndexes = function (indexes) {
    var items = [];
    var item;
    for (var i = 0; i < indexes.length; ++i) {
        item = this.elt.$selectlistBox.getItemByIndex(indexes[i]);
        if (item) items.push(item);
    }
    this.viewItems(items);
};

MSMItemsViewController.prototype.viewItemsByValues = function (values) {
    values = values || [];
    var items = [];
    var holders;
    for (var i = 0; i < values.length; ++i) {
        holders = this.elt.$selectlistBox.findItemHoldersByValue(values[i]);
        if (holders) {
            holders = holders.map(hd => hd.item);
            items = items.concat(holders);
        }
    }
    this.viewItems(items);
};

MSMItemsViewController.prototype.update = function () {
    this.viewItemsByValues(this.elt.values);
};


MSMItemsViewController.prototype.ev_pressCloseItem = function (itemElt, event) {
    var values = this.elt.$selectlistBox.values;
    var value = itemElt.value;
    var newValues = values.filter(x => x !== value);
    var data = itemElt.data;

    this.elt.$selectlistBox.values = newValues;
    if (this.elt.boxCtrl.isFocus) {
        this.viewItemsByValues(newValues);
    }
    else {
        this.elt.commitedValues = this.elt.$selectlistBox.values;
        this.update();
        this.elt.emit('change', { type: 'change', action: 'remove', data: data, value: value, target: this.elt });
    }
};

MSMItemsViewController.prototype.ev_pressItem = function (itemElt, event) {
    if (!this.disableClickToFocus && this.itemFocusable) {
        this.elt.$selectlistBox.viewListAtItem(itemElt.data);
        //todo: focus
    }
};


Object.defineProperty(MSMItemsViewController.prototype, 'disableClickToFocus', {
    set: function (value) {
        if (value) {
            this.elt.addClass('as-disable-click-to-focus');
        }
        else {
            this.elt.removeClass('as-disable-click-to-focus');
        }
    },
    get: function () {
        return this.elt.hasClass('as-disable-click-to-focus');
    }
});


Object.defineProperty(MSMItemsViewController.prototype, 'itemFocusable', {
    set: function (value) {
        if (value) {
            this.elt.addClass('as-item-focusable');
        }
        else {
            this.elt.removeClass('as-item-focusable');
        }
        this._updateFocusItem();
    },
    get: function () {
        return this.elt.hasClass('as-item-focusable');
    }
});


Object.defineProperty(MSMItemsViewController.prototype, 'activeValue', {
    set: function (value) {
        this._activeValue = value;
        if (this.itemFocusable) {
            this._updateFocusItem();
            //todo
        }
    },
    get: function () {
        return this._activeValue;
    }
});


/**
 *
 * @param {MultiCheckMenu} elt
 * @constructor
 */
function MSMBoxController(elt) {
    Object.keys(this.constructor.prototype).forEach(key => {
        if (key.startsWith('ev_')) this[key] = this[key].bind(this);
    });
    this.elt = elt;
    if (this.elt.$selectlistBox.cancelWaiting)
        this.elt.$selectlistBox.cancelWaiting();
    this.lockOpen = false;
    this.elt.on('mousedown', this.ev_click);
    this.elt.$selectlistBox.on({
        preupdateposition: this.ev_preUpdateListPosition,
        change: this.ev_listChange,
        cancel: this.ev_listCancel,
        close: this.ev_listClose
    });
}

Object.defineProperty(MSMBoxController.prototype, 'isFocus', {
    /**
     * @this MSMBoxController
     * @returns {*}
     */
    set: function (value) {
        value = !!value;
        if (value) {
            this.open();
        }
        else {
            this.close();
        }
    },
    /**
     * @this MSMBoxController
     * @returns {*}
     */
    get: function () {
        return this.elt.hasClass('as-focus');
    }
});


MSMBoxController.prototype.open = function () {
    if (this.lockOpen || this.elt.disabled || this.elt.readOnly) return;
    if (this.elt.hasClass('as-focus')) return;
    this.elt.addClass('as-focus');
    this.elt.$selectlistBox.addTo(document.body);
    this.elt.off('mousedown', this.ev_click);
    var bound = this.elt.getBoundingClientRect();
    if (!BrowserDetector/* default.isMobile */.Z.isMobile)// not modal
        this.elt.$selectlistBox.addStyle('min-width', Math.max(bound.width, this.elt.$selectlistBox.getFontSize() * 18.5) + 'px');
    this.elt.$selectlistBox.followTarget = this.elt;
    this.addListennerTO = setTimeout(() => {
        document.addEventListener('mousedown', this.ev_mousedownOut);
        if (!BrowserDetector/* default.isMobile */.Z.isMobile) {
            this.elt.$selectlistBox.focus();
            this.elt.$selectlistBox.viewListAtFirstSelected();
        }
    }, 50);
};


MSMBoxController.prototype.close = function () {
    if (!this.elt.hasClass('as-focus')) return;
    this.elt.removeClass('as-focus');
    this.elt.$selectlistBox.resetSearchState();
    this.elt.$selectlistBox.selfRemove();
    clearTimeout(this.addListennerTO);
    document.removeEventListener('mousedown', this.ev_mousedownOut);
    this.elt.on('mousedown', this.ev_click);
    var values = this.elt.$selectlistBox.values;
    if (!(0,DataStructure_Array.arrayCompare)(values, this.elt.commitedValues)) {
        this.elt.commitedValues = values;
        this.elt.emit('change', Object.assign({}, event, {
            type: 'change',
            action: 'submit',
            target: this,
        }), this);
    }
};

MSMBoxController.prototype.ev_click = function (event) {
    if (hitClose(event)) return;
    this.open();
};

MSMBoxController.prototype.ev_preUpdateListPosition = function () {
    var bound = this.elt.getBoundingClientRect();
    var screenSize = (0,Dom/* getScreenSize */.tE)();
    var availableTop = bound.top - 5;
    var availableBot = screenSize.height - 5 - bound.bottom;
    this.elt.$selectlistBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
    var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(this.elt);
    if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
        if (!BrowserDetector/* default.isMobile */.Z.isMobile)
            this.close();
    }
};


MSMBoxController.prototype.ev_listChange = function (event) {
    setTimeout(() => {
        this.elt.itemsViewCtrl.viewItems(this.elt.$selectlistBox.selectedItems);
    }, 1);
};

MSMBoxController.prototype.ev_listCancel = function () {
    this.elt.$selectlistBox.values = this.elt.commitedValues;
    this.close();
    this.elt.itemsViewCtrl.update();
};

MSMBoxController.prototype.ev_listClose = function (event) {
    var newValues = this.elt.$selectlistBox.values;
    if (!(0,DataStructure_Array.arrayCompare)(this.elt.commitedValues, newValues)) {
        this.elt.commitedValues = newValues;
        this.elt.emit('change', Object.assign({}, event, {
            type: 'change',
            target: this.elt,
            originalEvent: event.originalEvent || event
        }));
    }
    this.elt.itemsViewCtrl.update();
    this.close();
};


MSMBoxController.prototype.ev_mousedownOut = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(this.elt.$selectlistBox, event)) return;
    if (!this.elt.disableClickToFocus && this.elt.itemFocusable && hitItem(event)) return;
    this.lockOpen = true;
    this.close();
    document.addEventListener('mouseup', this.ev_mouseupOut);
};

MSMBoxController.prototype.ev_mouseupOut = function () {
    setTimeout(() => {
        this.lockOpen = false;
    }, 50);
};

ACore/* default.install */.Z.install(MultiCheckMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/chrometime24picker.css
var chrometime24picker = __webpack_require__(9216);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeTime24Picker.js










/**
 *
 * @param {number} leftOffset
 */
function calcMinHMTime(leftOffset) {
    var h = Math.floor(leftOffset / datetime.MILLIS_PER_HOUR);
    var m = Math.floor(leftOffset / datetime.MILLIS_PER_MINUTE) % 60;
    if (leftOffset % datetime.MILLIS_PER_MINUTE > 0) {
        if (m === 59) {
            h++;
            m = 0;
        }
        else {
            m++;
        }
    }
    var offset = h * datetime.MILLIS_PER_HOUR + m * datetime.MILLIS_PER_MINUTE;
    return { m: m, h: h, offset: offset };
}

/***
 * @extends AElement
 * @constructor
 */
function ChromeTime24Picker() {
    var tText = `24 ${LanguageSystem/* default.getText */.ZP.getText('txt_next_day') || 'Next day'})`;
    this.addStyle('--next-day-h24-width', Math.ceil((0,utils.measureText)(tText, '16px arial').width  + 15) + 'px');

    this.$lists = (0,ACore.$$)('.as-chrome-time-picker-list', this);
    this.$scrollers = (0,ACore.$$)('.as-chrome-time-picker-scroller', this);
    this.minuteController = new CTPMinuteListController(this);
    this.hourController = new CTPHourListController(this);


    this._dayOffset = 0;
    this._value = 0;

    /**
     * @name dayOffset
     * @type {number}
     * @memberOf ChromeTime24Picker#
     */

    /**
     * @name value
     * @type {number | null}
     * @memberOf ChromeTime24Picker#
     */

}


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


ChromeTime24Picker.render = function () {
    return (0,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',  'as-chrome-time-picker-infinity-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-infinity-viewport', 'as-chrome-time-picker-h24', 'as-chrome-time-picker-list'],
                        child: Array(25).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: ` (${LanguageSystem/* default.getText */.ZP.getText('txt_next_day') || 'Next day'})` }
                                    }
                                ],
                                props: {
                                    __hour__: i
                                }
                            }
                        })
                    }
                ]

            },
            {
                class: ['as-chrome-time-picker-scroller', 'as-chrome-time-picker-infinity-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-infinity-viewport', 'as-chrome-time-picker-m60', '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.updateViewByValue = function () {
    var offset = this.dayOffset;
    var offsetMH = calcMinHMTime(offset);
    var value = this.value;
    this.hourController.hourOffset = offsetMH.h;

    var valueMH;
    if ((0,utils.isRealNumber)(value)) {
        valueMH = calcMinHMTime(offset + value);
        this.hourController.hour = valueMH.h;
        if (valueMH.h === offsetMH.h) {
            this.minuteController.activeItem(offsetMH.m, Infinity);
        }
        else if (valueMH.h === offsetMH.h + 24) {
            this.minuteController.activeItem(Infinity, offsetMH.m + 1);
        }
        this.minuteController.minute = valueMH.m;
    }
    else {
        this.hourController.hour = null;
        this.minuteController.minute = null;
    }
};

ChromeTime24Picker.prototype.scrollIntoSelected = function () {
    this.hourController.scrollIntoSelected(true);
    this.minuteController.scrollIntoSelected(true);
};

ChromeTime24Picker.prototype.flushViewToValue = function () {
    var hour = this.hourController.hour;
    var minute = this.minuteController.minute;
    var endMil, newValue;
    if ((0,utils.isRealNumber)(hour) && (0,utils.isRealNumber)(minute)) {
        endMil = hour * datetime.MILLIS_PER_HOUR + minute * datetime.MILLIS_PER_MINUTE;
        newValue = endMil - this.dayOffset;
        if (newValue !== this._value) {
            this._value = newValue;
            this.notifyChange();
        }
    }
};

ChromeTime24Picker.prototype.notifyChange = function () {
    this.emit('change', { type: 'change' }, this);
};


ChromeTime24Picker.property = {};

ChromeTime24Picker.property.dayOffset = {
    /***
     * @this ChromeTime24Picker
     * @param {number|Date} value
     */
    set: function (value) {
        if (value instanceof Date) {
            value = value.getTime() - (0,datetime.beginOfDay)(value).getTime();
        }
        if ((0,utils.isRealNumber)(value)) {
            value = Math.round(value);
            value = value % datetime.MILLIS_PER_DAY;
            if (value < 0) value += datetime.MILLIS_PER_DAY;
        }
        else {
            value = 0;
        }
        this._dayOffset = calcMinHMTime(value).offset;//round to minute
        this.updateViewByValue();
    },
    /**
     * @this ChromeTime24Picker
     * @returns {number|*}
     */
    get: function () {
        return this._dayOffset;
    }
};


ChromeTime24Picker.property.value = {
    /***
     * @this ChromeTime24Picker
     * @param value
     */
    set: function (value) {
        if ((0,utils.isRealNumber)(value)) {
            value = Math.min(datetime.MILLIS_PER_DAY, Math.max(0, Math.round(value)));
            value = calcMinHMTime(value).offset;
        }
        else {
            value = null;
        }
        this._value = value;
        this.updateViewByValue();
    },
    /**
     * @this ChromeTime24Picker
     * @returns {number|*}
     */
    get: function () {
        return this._value;
    }
};

ChromeTime24Picker.property.hour = {
    get: function () {
        return Math.floor((this.dayOffset + this.value) / datetime.MILLIS_PER_HOUR);
    }
};


ChromeTime24Picker.property.minute = {
    get: function () {
        return Math.floor((this.dayOffset + this.value) / datetime.MILLIS_PER_MINUTE) % 60;
    }
};


ACore/* default.install */.Z.install(ChromeTime24Picker);

/* harmony default export */ const js_ChromeTime24Picker = (ChromeTime24Picker);


function CTPHourListController(elt) {
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }
    this.elt = elt;
    this.hourScroller = new CTPInfinityVerticalScroller(this.elt.$scrollers[0]);
    this.$list = (0,ACore.$)('.as-chrome-time-picker-h24.as-chrome-time-picker-list', elt);
    this.$items = Array.prototype.slice.call(this.$list.childNodes);
    this.$list.on('click', this.ev_clickList);
    this._offset = 0;
    this.selectedValue = null;
    this.$selectedItem = null;
    this.itemLength = this.$items.length;
    /**
     * @type {number}
     * @name hour - from 0 to 23, 24... is next day
     * @memberOf CTPHourListController
     */
}

Object.defineProperty(CTPHourListController.prototype, 'hourOffset', {
    set: function (value) {
        if (!(0,utils.isRealNumber)(value)) value = 0;
        value = Math.round(value);
        value = value % 24;
        if (value < 0) value += 24;
        this._offset = value;
        for (var i = 0; i < this.$items.length; ++i) {
            this.$items[i].firstChild.firstChild.data = (i + value)% 24;
            this.$items[i].__hour__ = i + value;
            if ((value + i) >= 24) {
                this.$items[i].addClass('as-in-tomorrow');
            }
            else {
                this.$items[i].removeClass('as-in-tomorrow');
            }
        }

        this.updateSelected();
    },
    get: function () {
        return this._offset;
    }
});


CTPHourListController.prototype.updateSelected = function () {
    if (this.$selectedItem) {
        this.$selectedItem.removeClass('as-selected');
    }
    if ((0,utils.isRealNumber)(this.selectedValue)) {
        this.$selectedItem = this.$items[this.selectedValue - this._offset];
    }
    else {
        this.$selectedItem = null;
    }

    if (this.$selectedItem) {
        this.$selectedItem.addClass('as-selected');
    }

};

CTPHourListController.prototype.ev_clickList = function (event) {
    this.hour = this.itemValueOf(event.target);
    this.scrollIntoSelected(false);
    var offsetMH = calcMinHMTime(this.elt.dayOffset);
    if (this.hour === offsetMH.h) {
        this.elt.minuteController.activeItem(offsetMH.m, Infinity);

        if (!(0,utils.isRealNumber)(this.elt.minuteController.minute) || this.elt.minuteController.minute < offsetMH.m) {
            this.elt.minuteController.minute = offsetMH.m;
            this.elt.minuteController.scrollIntoSelected(true);
        }
    }
    else if (this.hour === offsetMH.h + 24) {
        this.elt.minuteController.activeItem(Infinity, offsetMH.m + 1);
        if (!(0,utils.isRealNumber)(this.elt.minuteController.minute)  || this.elt.minuteController.minute > offsetMH.m ) {
            this.elt.minuteController.minute = offsetMH.m;
            this.elt.minuteController.scrollIntoSelected(true);
        }
    }
    else {
        if (!(0,utils.isRealNumber)(this.elt.minuteController.minute)) {
            this.elt.minuteController.minute = 0;
            this.elt.minuteController.scrollIntoSelected(true);
        }
        this.elt.minuteController.activeItem(Infinity, Infinity);
    }
    this.elt.flushViewToValue();
};

CTPHourListController.prototype.scrollIntoSelected = function (onTop) {
    if (this.selectedValue == null) return;
    var curOffset = this.hourScroller.offset;
    var targetOffset = this.selectedValue - this.hourOffset;
    var k, minCost = Infinity;
    var cost;
    var t;
    for (k = -2; k <= 2; ++k) {
        t = (this.selectedValue  - this.hourOffset)+ k * this.itemLength;
        if (t >= curOffset && t <= curOffset + 3 && !onTop) {
            minCost = 0;
            targetOffset = curOffset;
        }
        else {
            cost = Math.abs(t - curOffset);
            if (cost < minCost) {
                minCost = cost;
                targetOffset = t;
            }
            cost = Math.abs(t - curOffset - 3);
            if (cost < minCost && !onTop) {
                minCost = cost;
                targetOffset = t - 3;
            }
        }
    }

    this.hourScroller.makeAnimation(targetOffset, 200);

};

CTPHourListController.prototype.itemValueOf = function (itemElt) {
    while (itemElt) {
        if (itemElt.hasClass && itemElt.hasClass('as-chrome-time-picker-btn')) break;
        itemElt = itemElt.parentElement;
    }
    if (!itemElt) return undefined;
    return itemElt.__hour__;
};


Object.defineProperty(CTPHourListController.prototype, 'hour', {
    set: function (value) {
        if ((0,utils.isRealNumber)(value)) {
            value = Math.round(value);
        }
        else {
            value = null;
        }
        this.selectedValue = value;
        this.updateSelected();
    },
    get: function () {
        return this.selectedValue;
    }
});

function CTPInfinityVerticalScroller(elt) {
    this.elt = elt;
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }
    this.$upBtn = (0,ACore.$)('.as-chrome-time-picker-scroller-up', this.elt)
        .on('pointerdown', this.ev_pressUpBtn);
    this.$downBtn = (0,ACore.$)('.as-chrome-time-picker-scroller-down', this.elt)
        .on('pointerdown', this.ev_pressDownBtn);
    this.$upBtn.addEventListener('contextmenu', function (event) {
        event.preventDefault();
    }, BrowserDetector/* default.supportPassiveEvent */.Z.supportPassiveEvent ? { passive: false } : true);
    this.$downBtn.addEventListener('contextmenu', function (event) {
        event.preventDefault();
    }, BrowserDetector/* default.supportPassiveEvent */.Z.supportPassiveEvent ? { passive: false } : true);

    this.$viewport = (0,ACore.$)('.as-chrome-time-picker-infinity-viewport', this.elt);
    this.offset = 0;
    this.buttonHeight = 28;//2em
    this.elt.addEventListener('wheel', this.ev_wheel);
    this.$items = (0,ACore.$$)('.as-chrome-time-picker-btn', this.$viewport);
    this.updateItemPosition();
    this.$viewport.addEventListener('touchstart', this.ev_touchStart, BrowserDetector/* default.supportPassiveEvent */.Z.supportPassiveEvent ? { passive: false } : true);

    /**
     *
     * @type {null|{startTime: number, endTime: number, startValue: number, endValue: number, type: string}}
     */
    this.animation = null;

    this.touchInfo = {};
}

CTPInfinityVerticalScroller.prototype.ev_touchStart = function (event) {
    var evFlag = BrowserDetector/* default.supportPassiveEvent */.Z.supportPassiveEvent ? { passive: false } : true;
    document.addEventListener('touchmove', this.ev_touchMove, evFlag);
    document.addEventListener('touchend', this.ev_touchEnd, evFlag);
    var touch = event.changedTouches[0];
    var now = Date.now();
    this.touchInfo.prevY = touch.clientY;
    this.touchInfo.prevTime = now;
    this.touchInfo.target = touch.target;
    this.touchInfo.identifier = touch.identifier;
    this.touchInfo.state = 0;//init
    this.touchInfo.checkPoints = [{ time: now, y: touch.clientY }];
    event.preventDefault();
};

CTPInfinityVerticalScroller.prototype.ev_touchMove = function (event) {
    var touch = (0,EventEmitter/* findChangedTouchByIdent */.VY)(event, this.touchInfo.identifier);
    if (!touch) return;
    var dy = touch.clientY - this.touchInfo.prevY;
    var now = Date.now();
    if (this.touchInfo.state === 0) {
        if (Math.abs(dy) > 2) {
            this.touchInfo.state = 1;
        }
    }
    if (this.touchInfo.state === 1) {
        this.makeAnimation(this.offset - dy / this.buttonHeight, 0);
        this.touchInfo.prevY = touch.clientY;
        this.touchInfo.prevTime = now;
        this.touchInfo.checkPoints.push({ time: now, y: touch.clientY });
    }
    event.preventDefault();
};

/**
 *
 * @returns {number} - offset/s
 */
CTPInfinityVerticalScroller.prototype.getTouchSped = function () {
    var checkPoints = this.touchInfo.checkPoints;
    if (checkPoints.length < 2) return 0;
    var minTime = 100;
    var lastTime = checkPoints[checkPoints.length - 1].time;
    var dy;
    var dt;

    for (var i = checkPoints.length - 2; i >= 0; --i) {
        dy = checkPoints[i].y - checkPoints[checkPoints.length - 1].y;
        dt = checkPoints[i].time - checkPoints[checkPoints.length - 1].time;
        if (lastTime - checkPoints[i].time > minTime) break
    }
    if (dy === 0) return 0;
    return dy / this.buttonHeight / (dt / 1000);
};

CTPInfinityVerticalScroller.prototype.ev_touchEnd = function (event) {
    var touch = (0,EventEmitter/* findChangedTouchByIdent */.VY)(event, this.touchInfo.identifier);
    if (!touch) return;
    var evFlag = BrowserDetector/* default.supportPassiveEvent */.Z.supportPassiveEvent ? { passive: false } : true;
    document.removeEventListener('touchmove', this.ev_touchMove, evFlag);
    document.removeEventListener('touchend', this.ev_touchEnd, evFlag);
    var speed = 0, acc = 10;
    var target;
    if (this.touchInfo.state === 1) {
        speed = this.getTouchSped();
        this.makeAnimation(this.offset - speed * Math.abs(speed) / acc / 2, Math.abs(speed) / acc * 1000, 'pow2');
    }
    else {
        target = this.touchInfo.target;
        var now = Date.now();
        while (target && target !== this.elt) {
            if (target.isSupportedEvent && target.isSupportedEvent('press')) {
                if (!target.lastPressTime || now - target.lastPressTime > 300) {
                    target.emit('press', { target: this.touchInfo.target });
                    target.lastPressTime = now;
                }
            }
            target = target.parentElement;
        }
    }

};

CTPInfinityVerticalScroller.prototype.ev_pressUpBtn = function (event) {
    this.makeAnimation(this.offset - 250, 25e3, 'linear');
    document.addEventListener('pointerup', this.ev_ReleaseUpDownBtn);
    event.preventDefault();
};

CTPInfinityVerticalScroller.prototype.ev_pressDownBtn = function (event) {
    this.makeAnimation(this.offset + 250, 25 * 1000, 'linear');
    document.addEventListener('pointerup', this.ev_ReleaseUpDownBtn);
    event.preventDefault();
};

CTPInfinityVerticalScroller.prototype.ev_ReleaseUpDownBtn = function (event) {
    this.makeAnimation(this.offset, 0);
    event.preventDefault();
};


CTPInfinityVerticalScroller.prototype.updateItemPosition = function () {
    while (this.offset < 0) this.offset += this.$items.length;
    while (this.offset >= this.$items.length) this.offset -= this.$items.length;
    var offset = this.offset;
    this.$items.forEach((itemElt, i) => {
        var k = i - offset;
        if (k < -this.$items.length / 2) k += this.$items.length;
        itemElt.addStyle('top', k * 2 + 'em');
    });
};


CTPInfinityVerticalScroller.prototype.ev_wheel = function (event) {
    event.preventDefault();
    var delta = event.deltaY;
    this.makeAnimation(this.offset + delta / this.buttonHeight, 200);
};

CTPInfinityVerticalScroller.prototype.makeAnimation = function (value, inTime, type) {
    if (inTime <= 0) {
        this.offset = value;
        this.updateItemPosition();
        this.animation = null;
        return;
    }
    var isNewAnimation = !this.animation;
    this.animation = {
        startTime: Date.now(),
        endTime: Date.now() + inTime,
        startValue: this.offset,
        endValue: value,
        type: type || 'linear'
    };


    if (isNewAnimation) {
        requestAnimationFrame(this.ev_animationFrame);
    }
};

CTPInfinityVerticalScroller.prototype.ev_animationFrame = function () {
    if (!this.animation) return;

    function easeInOutCubic(t) {
        return t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2;
    }

    var now = Date.now();
    var t = (0,Math_int.map)(Math.min(this.animation.endTime, now), this.animation.startTime, this.animation.endTime, 0, 1);
    if (this.animation.type === 'easeIn') {
        t = easeInOutCubic(t / 2);
    }
    else if (this.animation.type === 'easeOut') {
        t = easeInOutCubic(0.5 + t / 2);
    }
    else if (this.animation.type === 'pow2') {
        t = Math.sqrt(t);
    }

    this.offset = (0,Math_int.map)(t, 0, 1, this.animation.startValue, this.animation.endValue);

    this.updateItemPosition();
    if (now >= this.animation.endTime) {
        this.animation = null;
    }
    else {
        requestAnimationFrame(this.ev_animationFrame);
    }
};


/**
 * @param {ChromeTime24Picker} elt
 * @param elt
 * @constructor
 */
function CTPMinuteListController(elt) {
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }
    this.elt = elt;
    this.minuteScroller = new CTPInfinityVerticalScroller(this.elt.$scrollers[1]);
    this.$list = (0,ACore.$)('.as-chrome-time-picker-m60', this.elt);

    this.$list.defineEvent('press');
    this.$list.addEventListener('click', function (event) {
        var now = Date.now();
        if (!this.lastPressTime || now - this.lastPressTime > 50) {
            this.emit('press', { target: event.target });
            this.lastPressTime = now;
        }
    }, true);
    this.$list.on('press', this.ev_clickList);
    this.$items = Array.prototype.slice.call(this.$list.childNodes);
    this.selectedValue = null;
    this.itemLength = this.$items.length;
}

/**
 *
 * @param start
 * @param end - end not include
 */
CTPMinuteListController.prototype.activeItem = function (start, end) {
    if (!(0,utils.isNaturalNumber)(start)) start = 0;
    if (!(0,utils.isNaturalNumber)(end)) end = this.$list.children.length;
    for (var i = 0; i < this.$list.children.length; ++i) {
        this.$list.children[i].disabled = i < start || i >= end;
    }
};

CTPMinuteListController.prototype.ev_clickList = function (event) {
    var value = this.itemValueOf(event.target);
    if ((0,utils.isNaturalNumber)(value)) {
        this.minute = value;
        this.scrollIntoSelected(false);
        this.elt.flushViewToValue();
    }
};

CTPMinuteListController.prototype.itemValueOf = function (itemElt) {
    while (itemElt) {
        if (itemElt.hasClass && itemElt.hasClass('as-chrome-time-picker-btn')) break;
        itemElt = itemElt.parentElement;
    }
    if (!itemElt) return undefined;
    return itemElt.__min__;
};

CTPMinuteListController.prototype.scrollIntoSelected = function (onTop) {
    if (this.selectedValue == null) return;
    var curOffset = this.minuteScroller.offset;
    var targetOffset = this.selectedValue;
    var k, minCost = Infinity;
    var cost;
    var t;
    for (k = -2; k <= 2; ++k) {
        t = this.selectedValue + k * this.itemLength;
        if (t >= curOffset && t <= curOffset + 3 && !onTop) {
            minCost = 0;
            targetOffset = curOffset;
        }
        else {
            cost = Math.abs(t - curOffset);
            if (cost < minCost) {
                minCost = cost;
                targetOffset = t;
            }
            cost = Math.abs(t - curOffset - 3);
            if (cost < minCost && !onTop) {
                minCost = cost;
                targetOffset = t - 3;
            }
        }
    }

    this.minuteScroller.makeAnimation(targetOffset, 200);
};


Object.defineProperty(CTPMinuteListController.prototype, 'minute', {
    set: function (value) {
        if ((0,utils.isRealNumber)(value)) {
            value = Math.max(0, Math.min(59, Math.round(value)));
        }
        else {
            value = null;
        }
        if (value !== this.selectedValue) {
            if (this.$items[this.selectedValue]) {
                this.$items[this.selectedValue].removeClass('as-selected');
            }
        }
        this.selectedValue = value;
        if (this.$items[value]) {
            this.$items[value].addClass('as-selected');
        }
    },
    get: function () {
        return this.selectedValue;
    }
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Time24Input.js












/**
 * @extends AElement
 * @constructor
 */
function Time24Input() {
    var t = LanguageSystem/* default.getText */.ZP.getText('txt_next_day');
    if (t) {
        t = '(' + t + ')';
        this.nextDateText = t;
    }
    this.domSignal = new DelaySignal/* default */.Z();
    this.$clockBtn = (0,ACore.$)('.as-time-input-icon-btn', this)
    this.$text = (0,ACore.$)('.as-time-input-text', this);
    this.$clearBtn = (0,ACore.$)('button.as-time-input-clear-btn', this)
        .on('click', this.clear.bind(this));
    this._hour = 0;
    this._minute = 0;
    this._nd = false;

    this._dayOffset = 0;

    this._format = 'HH:mm ND';
    this._firedValue = 'NOT_FIRED';

    this.textCtrl = new T24ITextController(this);
    this.notNull = true;
    this.dropdownCtn = new T24DropdownController(this);

    setTimeout(() => {
    }, 1000);


    /**
     * @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#
     */

    /**
     * @type {boolean}
     * @name nd
     * @memberof Time24Input#
     */
}

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

Time24Input.prototype.nextDateText = '(Next day)';


Time24Input.render = function () {
    return (0,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 (value) {
        if ((0,utils.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 () {
        return this._hour;
    }
};

Time24Input.property.minute = {
    set: function (value) {
        if ((0,utils.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 () {
        return this._minute;
    }
};

Time24Input.property.nd = {
    set: function (value) {
        this._nd = !!value;
        this.textCtrl.updateTextFromValue();
    },
    get: function () {
        var value = this._nd;
        var hour = this.hour;
        var minute = this.minute;
        var dayOffset = this.dayOffset;
        var mh;
        if ((0,utils.isRealNumber)(dayOffset)) {
            if ((0,utils.isNaturalNumber)(hour)) {
                mh = (0,utils.millisToClock)(dayOffset);
                if (hour < mh.hour) {
                    value = true;
                }
                else if (hour === mh.hour) {
                    if ((0,utils.isRealNumber)(minute) && minute < mh.minute) {
                        value = true;
                    }
                }
            }
        }

        return value;
    }
}


Time24Input.property.dayOffset = {
    set: function (dayOffset) {
        var value = this.value;
        this._dayOffset = (0,utils.isRealNumber)(dayOffset) ? (0,utils.normalizeMinuteOfMillis)(dayOffset) : 0;
        this.value = value;
    },
    get: function () {
        if (this.notNull) {
            return this._dayOffset || 0;
        }
        else {
            return this._dayOffset;
        }
    }
};

Time24Input.property.value = {
    set: function (value) {
        value = (0,utils.isRealNumber)(value) ? (0,utils.normalizeMinuteOfMillis)(Math.min(Math.max(value, 0), datetime.MILLIS_PER_DAY)) : null;
        var clockTime;
        if (value !== null) {
            clockTime = (0,utils.millisToClock)(value + this.dayOffset);
            this._hour = clockTime.hour;
            this._minute = clockTime.minute;
            if (value === datetime.MILLIS_PER_DAY) this._nd = true;
        }
        else {
            this._hour = null;
            this._minute = null;
        }
        this.textCtrl.updateTextFromValue();
        this._firedValue = this.value;
    },
    get: function () {
        if (!(0,utils.isRealNumber)(this._hour) || !(0,utils.isRealNumber)(this._minute)) return null;
        var mil = (0,utils.clockToMillis)(this._hour, this._minute);
        if (mil < this.dayOffset||(mil === this.dayOffset && this._nd)) mil += datetime.MILLIS_PER_DAY;
        mil -= this.dayOffset;
        return mil;
    }
};

Time24Input.property.displayTime = {
    get: function () {
        var value = this.value;
        if ((0,utils.isRealNumber)(value)) {
            return value + this.dayOffset;
        }
        else {
            return null;
        }
    }
};


Time24Input.property.notNull = {
    set: function (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 () {
        return this.hasClass('as-must-not-null');
    }
};

Time24Input.property.disabled = {
    set: function (value) {
        value = !!value;
        this._disabled = value;
        if (value) this.addClass('as-disabled');
        else this.removeClass('as-disabled');
        this.$text.disabled = value;
    },
    get: function () {
        return this._disabled;
    }
};

Time24Input.property.readOnly = js_TimeInput.property.readOnly;

Time24Input.property.format = {
    set: function (value) {
        this._format = value || 'HH:mm';
        if (this._format.indexOf('ND') < 0) {
            this._format = this._format.trimEnd() + ' ND';
        }
        this.textCtrl.updateTextFromValue();
    },
    get: function () {
        return this._format;
    }
};


Time24Input.eventHandler = {};

Time24Input.eventHandler.pickerChange = function (event) {
    if (this.dayOffset === null) this.dayOffset = 0;

};


Time24Input.eventHandler.clickClockBtn = function () {
    this._attachPicker();
};


ACore/* default.install */.Z.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,
    /**
     * @type {Follower|null}
     */
    $follower: null,
    /**
     * @type {T24DropdownController|null}
     */
    holder: null
};

T24DropdownController.prototype.prepare = function () {
    var share = this.share;
    if (share.$picker) return;
    (0,MultiLanguageCSS/* loadLanguageModule */.q)();
    share.$picker = (0,ACore._)({
        tag: js_ChromeTime24Picker.tag,
        on: {
            change: (event) => {
                if (share.holder) {
                    share.holder.onPickerChange(event);
                }
            }
        }
    });
    share.$picker.nextDateText = this.elt.nextDateText;
    /**
     * @type {Follower}
     */
    share.$follower = (0,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>']
                    }
                ]
            }
        ]
    });
    share.$follower.cancelWaiting();
    this.share.$closeBtn = (0,ACore.$)('.as-select-list-box-close-btn', this.share.$follower);
};

T24DropdownController.prototype.attach = function () {
    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 = (0,utils.millisToClock)(dayOffset);
    var value = 0;
    if ((0,utils.isRealNumber)(hour)) {
        if (!(0,utils.isRealNumber)(min)) {
            if (hour === offsetClock.hour) {
                min = offsetClock.hour;
            }
            else {
                min = 0;
            }
        }
        value = (0,utils.clockToMillis)(hour, min) - dayOffset;
        if (value < 0) value += datetime.MILLIS_PER_DAY;
    }
    else if ((0,utils.isRealNumber)(min)) {
        if (min >= offsetClock.minute) {
            hour = offsetClock.hour;
        }
        else {
            hour = (offsetClock.hour + 1) % 24;
        }
        value = (0,utils.clockToMillis)(hour, min) - dayOffset;
        if (value < 0) value += datetime.MILLIS_PER_DAY;
    }
    if (value === 0 && this.elt.nd) value = datetime.MILLIS_PER_DAY;
    share.$picker.value = value;
    setTimeout(() => {
        document.addEventListener('click', this.ev_clickOut);
        share.$follower.removeStyle('visibility');
        share.$picker.scrollIntoSelected();
    }, 10);

};

T24DropdownController.prototype.release = function () {
    var share = this.share;
    if (share.holder !== this) return;
    share.$follower.remove();
    share.$follower.followTarget = null;
    share.holder = null;
    setTimeout(() => {
        this.disabledButtton = false;
        document.removeEventListener('click', this.ev_clickOut);
    }, 100);
};


T24DropdownController.prototype.onPickerChange = function (event) {
    this.elt.value = this.share.$picker.value;
    this.elt._notifyChange(event);
    ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
};

T24DropdownController.prototype.ev_clickClockBtn = function () {
    if (this.disabledButtton) return;
    this.attach();
};


T24DropdownController.prototype.ev_clickOut = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(this.share.$follower, event) && !(0,EventEmitter/* hitElement */.EY)(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) {
    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', () => {
            this.loadValueFromInput();
            this.elt.notifyIfChange();
        });
    this.editingData = {};
}

T24ITextController.prototype.tokenRegex = /(\([^)]*\))|([^.\/:\-,\\\u0020\u0009\u000D\u200B]+)|([.\/:\-,\\]+)/i;
var CHAR_NBSP = '\u00A0';

T24ITextController.prototype.tokenMap = {
    h: 'h',
    H: 'H',
    HH: 'H',
    hh: 'h',
    m: 'm',
    mm: 'm',
    a: 'a',
    ND: 'ND'
};


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 + ' ND';
    var tokenMap = this.tokenMap;
    var tokenMatched = rgx.exec(s);
    var formatToken = rgxFormat.exec(format);
    var text, ident;
    var idx;
    var res = {};
    while (tokenMatched && formatToken) {
        ident = formatToken[2];
        if (tokenMap[ident]) {
            text = tokenMatched[0];
            idx = tokenMatched.index;
            res[tokenMap[ident]] = {
                text: text,
                idx: idx,
                length: text.length,
                sourceText: s,
                value: (ident === 'a' || ident === 'ND') ? text : parseInt(text)
            }
            if (ident === 'ND') {
                res[tokenMap[ident]].value = res[tokenMap[ident]].value !== CHAR_NBSP;
            }
        }

        tokenMatched = rgx.exec(s);
        formatToken = rgxFormat.exec(format);
    }

    Object.defineProperty(res, 'minute', {
        enumerable: false,
        get: function () {
            var token = this['m'] || this['mm'];
            if (token) {
                return token.value;
            }
            else return null;
        }
    });

    Object.defineProperty(res, 'hour24', {
        enumerable: false,
        get: function () {
            var token = this['H'];
            if (token && (0,utils.isNaturalNumber)(token.value)) {
                return token.value;
            }
            token = this['h'];
            var tokenA = this['A'];
            if (token && (0,utils.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, nd) {
    var text = this.elt.format;
    text = text.replace(new RegExp(this.tokenRegex.source, 'g'), (all) => {
        switch (all) {
            case 'm':
            case 'mm':
                return (0,utils.isRealNumber)(m) ? (0,utils.zeroPadding)(m, all.length) : all;
            case 'hh':
            case 'h':
                return (0,utils.isRealNumber)(h) ? (0,utils.zeroPadding)(h % 12 ? h : 12, all.length) : all;
            case 'HH':
            case 'H':
                return (0,utils.isRealNumber)(h) ? (0,utils.zeroPadding)(h, all.length) : all;
            case 'a':
                return (0,utils.isRealNumber)(h) ? (h > 12 ? 'PM' : 'AM') : 'all';
            case 'ND':
                return nd ? this.elt.nextDateText : CHAR_NBSP;
            default:
                return all;
        }
    });
    return text;
};

T24ITextController.prototype.updateTextFromValue = function () {
    var value = this.elt.value;
    var hour = this.elt.hour;
    var minute = this.elt.minute;
    var nd = this.elt.nd;
    var text = this.formatText(hour, minute, nd);
    if ((0,utils.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;
    var nd = false;
    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));
    }
    if (tkDick.nd) {
        nd = tkDick.nd.value;
    }
    this.elt._hour = hour;
    this.elt._minute = minute;
    this.elt._nd = nd;
};


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) {
            token.select();
            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;
    for (var i = token.idx - 1; i >= 0; --i) {
        token = this.tokenAt(i);
        if (token && token.idx !== cIdx) {
            token.select();
            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) {
            token.select();
            this.editingData.state = Time24Input_STATE_NEW;
            break;
        }
    }
};


T24ITextController.prototype.tokenAt = function (start) {
    var tokenizedText = new TITokenizedText(this.$text.value, this.elt.format);
    var nearestDistance = Infinity;
    var nearestIdx = -1;
    var n = Math.min(tokenizedText.textTokens.length, tokenizedText.formatTokens.length);
    var i, textToken, formatToken;
    var distance;
    for (i = 0; i < n; ++i) {
        formatToken = tokenizedText.formatTokens[i];
        if (!(0,utils.isDateTimeFormatToken)(formatToken.content)) continue;
        textToken = tokenizedText.textTokens[i];
        if (start >= textToken.idx && start < textToken.idx + textToken.length) {
            nearestIdx = i;
            nearestDistance = 0;
            break;
        }
        if (start < textToken.idx) {
            distance = textToken.idx - start;
            if (distance < nearestDistance) {
                nearestDistance = distance;
                nearestIdx = i;
            }
        }
        if (start >= textToken.idx + textToken.length) {
            distance = start - textToken.idx - textToken.length;
            if (distance < nearestDistance) {
                nearestDistance = distance;
                nearestIdx = i;
            }
        }
    }

    if (nearestIdx < 0) return null;
    formatToken = tokenizedText.formatTokens[nearestIdx];
    textToken = tokenizedText.textTokens[nearestIdx];
    var self = this;
    return {
        idx: textToken.idx,
        text: textToken.content,
        length: textToken.length,
        ident: formatToken.content,
        input: this.$text,
        sourceText: tokenizedText.text,
        // isAvailable: function () {
        //     return this.sourceText === this.input.value;
        // },
        select: function () {
            this.input.setSelectionRange(this.idx, this.idx + this.length);
        },
        replace: function (newText, selecting) {
            tokenizedText.setTokenText(this.ident, newText);
            var hour = tokenizedText.getTokenText('HH') || tokenizedText.getTokenText('H');
            var minute = tokenizedText.getTokenText('mm') || tokenizedText.getTokenText('m');
            var nd = tokenizedText.getTokenText('ND') !== CHAR_NBSP;
            var newND = self.isNextDate(parseInt(hour, 10), parseInt(minute, 10), nd);
            if (newND !== nd) {
                tokenizedText.setTokenText('ND', newND ? self.elt.nextDateText : CHAR_NBSP);
            }
            this.input.value = tokenizedText.getText(true);
            this.length = newText.length;
            if (selecting) {
                this.select();
            }
        }
    };
};

/**
 *
 * @param h
 * @param m
 * @param nd - referent result if can not detect
 * @returns {boolean}
 */
T24ITextController.prototype.isNextDate = function (h, m, nd) {
    var dayOffset = this.elt.dayOffset;
    if (!(0,utils.isNaturalNumber)(dayOffset)) return !!nd;
    var oH = Math.floor(dayOffset / 36e5);
    var oM = Math.floor(dayOffset / 6e4) % 60;
    if (!(0,utils.isNaturalNumber)(h)) return !!nd;
    if (h < oH) return true;
    if (!(0,utils.isNaturalNumber)(m)) return !!nd;
    if (h === oH) {
        if (m < oM) return true;
        if (m === oM) return !!nd;
        return false;
    }
};


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 = (0,utils.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;
                    case 'ND':
                        value = token.text !== CHAR_NBSP;
                        this.editingData.nd = !value;
                        newTokenText = this.editingData.nd ? this.elt.nextDateText : CHAR_NBSP;
                        token.replace(newTokenText, true);
                        break;
                }
                break;
        }
    }
    else if (event.key === "Delete" || event.key === 'Backspace') {
        event.preventDefault();
        if (endToken.idx !== token.idx) {
            if (this.elt.notNull) {
                this.$text.value = (0,datetime.formatDateTime)((0,datetime.beginOfDay)(new Date()), format).replace('ND', CHAR_NBSP);
            }
            else {
                this.$text.value = format.replace('ND', CHAR_NBSP);
            }
            this.$text.select();
        }
        else {
            if (this.elt.notNull) {
                if (token.ident === 'ND') {
                    token.replace(CHAR_NBSP, true);
                }
                else
                token.replace(token.ident === 'a' ? 'AM' : (0,utils.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((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this.editingData.state = Time24Input_STATE_EDITED;
                    if (dVal > 5) {
                        this.editNextToken();
                    }
                    break;
                case 'h':
                case 'hh':
                    token.replace((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this.editingData.state = Time24Input_STATE_EDITED;
                    if (dVal > 1) {
                        this.editNextToken();
                    }
                    break;
                case 'H':
                case 'HH':
                    token.replace((0,utils.zeroPadding)(dVal, token.ident.length), true);
                    this.editingData.state = Time24Input_STATE_EDITED;
                    if (dVal > 2) {
                        this.editNextToken();
                    }
                    break;
                case 'ND':
                    value = token.text !== CHAR_NBSP;
                    this.editingData.nd = !value;
                    newTokenText = this.editingData.nd ? this.elt.nextDateText : CHAR_NBSP;
                    token.replace(newTokenText, true);
                    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((0,utils.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((0,utils.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((0,utils.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 if (token.ident === 'ND') {
        event.preventDefault();
        value = token.text !== CHAR_NBSP;
        this.editingData.nd = !value;
        newTokenText = this.editingData.nd ? this.elt.nextDateText : CHAR_NBSP;
        token.replace(newTokenText, true);
    }
    else {
        event.preventDefault();
    }
};


function TITokenizedText(text, format) {
    this.text = text;
    this.format = format;
    /**
     *
     * @type {{content: string, idx: number, length: number}[]}
     */
    this.formatTokens = this.makeTokens(format);
    /**
     *
     * @type {{content: string, idx: number, length: number}[]}
     */
    this.textTokens = this.makeTokens(text);
}

TITokenizedText.prototype.tokenRegex = /(\([^)]*\))|([^.\/:\-,\\\u0020\u0009\u000D\u200B]+)|([.\/:\-,\\]+)/i;
// var CHAR_NBSP = '\u00A0';

TITokenizedText.prototype.spaceRegex = /[\u0020\u0009\u000D\u200B]+/;

TITokenizedText.prototype.tokenMap = {
    h: 'h',
    H: 'H',
    HH: 'H',
    hh: 'h',
    m: 'm',
    mm: 'm',
    a: 'a',
    ND: 'ND'
};

/**
 *
 * @param {string} text
 * @returns {{content: string, idx: number, length: number}[]}
 */
TITokenizedText.prototype.makeTokens = function (text) {
    var rgx = new RegExp(this.tokenRegex.source, 'g');
    var matched = rgx.exec(text);
    var res = [];
    while (matched) {
        res.push({
            content: matched[0],
            idx: matched.index,
            length: matched[0].length
        });
        matched = rgx.exec(text);
    }

    return res;
};


TITokenizedText.prototype.setTokenText = function (tkName, content) {
    tkName = this.tokenMap[tkName] || tkName;
    var di = 0;
    var formatToken;
    var textToken;
    var found = false;
    for (var i = 0; i < this.formatTokens.length; ++i) {
        formatToken = this.formatTokens[i];
        textToken = this.textTokens[i];
        if (!textToken) {
            textToken = {
                content: formatToken.content,
                idx: formatToken.idx,
                length: formatToken.length
            };
            this.textTokens.push(textToken);
            di = this.text.length - textToken.idx;
            this.text += textToken.content;
        }
        if (di !== 0) {
            textToken.idx += di;
        }
        if ((this.tokenMap[formatToken.content] || formatToken.content) === tkName) {
            found = true;
            this.text = this.text.substring(0, textToken.idx + di) + content + this.text.substring(textToken.idx + di + textToken.length);
            di += content.length - textToken.length;
            textToken.length = content.length;
            textToken.content = content;
        }
    }
    return this;
};

TITokenizedText.prototype.getTokenText = function (tkName) {
    var res = null;
    tkName = this.tokenMap[tkName] || tkName;
    for (var i = 0; i < this.formatTokens.length; ++i) {
        if ((this.tokenMap[this.formatTokens[i].content] || this.formatTokens[i].content) === tkName) {
            res = this.textTokens[i].content;
            break;
        }
    }
    return res;
};

TITokenizedText.prototype.getToken = function (tkName) {
    var res = null;
    tkName = this.tokenMap[tkName] || tkName;
    for (var i = 0; i < this.formatTokens.length; ++i) {
        if ((this.tokenMap[this.formatTokens[i].content] || this.formatTokens[i].content) === tkName) {
            res = Object.assign({}, this.textTokens[i]);
            break;
        }
    }
    return res;
};

TITokenizedText.prototype.getText = function (extractByFormat) {
    var res = this.text;
    if (extractByFormat) {
        if (this.formatTokens.length < this.textTokens.length) {
            res = res.substring(0, this.textTokens[this.formatTokens.length - 1].idx + this.textTokens[this.formatTokens.length - 1].length);
        }
        else if (this.formatTokens.length > this.textTokens.length) {
            res += this.format.substring(this.textTokens[this.textTokens.length - 1].idx + this.textTokens[this.textTokens.length - 1].length);
        }
    }
    return res;
};






// EXTERNAL MODULE: ./node_modules/absol-acomp/css/timerange24input.css
var timerange24input = __webpack_require__(4697);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TimeRange24Input.js








/***
 * @extends AElement
 * @constructor
 */
function TimeRange24Input() {
    var t = LanguageSystem/* default.getText */.ZP.getText('txt_next_day');
    if (t) {
        t = '(' + t + ')';
        this.nextDateText = t;
    }

    /***
     *
     * @type {TimeInput}
     */
    this.$offset = (0,ACore.$)(js_TimeInput.tag, this);
    this.$offset.on('change', this.eventHandler.offsetChange);
    /***
     *
     * @type {Time24Input}
     */
    this.$duration = (0,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 (0,ACore._)({
        extendEvent: ['change'],
        class: 'as-time-range-24-input',
        child: [{
            tag:
            js_TimeInput.tag,
            props: {
                format: 'HH:mm'
            }
        },
            js_Time24Input.tag
        ]
    });
};

TimeRange24Input.prototype.nextDateText = '(Next day)'


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 = (0,datetime.beginOfDay)(new Date()).getTime();
    var startD  = new Date(bD + dayOffset)
    var text = (0,datetime.formatDateTime)(startD, format || 'HH:mm');
    var endD = new Date(bD + dayOffset + duration);
    text += ' - ' + (0,datetime.formatDateTime)(endD, format || 'HH:mm');
    if ((0,datetime.compareDate)(endD, startD) > 0) {
        text += ' ' + this.nextDateText;
    }
    this.attr('data-text', text);
};


TimeRange24Input.property = {};

TimeRange24Input.property.notNull = {
    /***
     * @this TimeRange24Input
     * @param value
     */
    set: function (value) {
        value = !!value;
        this.$offset.notNull = value;
        this.$duration.notNull = value;
        this._updateTextData();
    },
    get: function () {
        return this.$offset.notNull;
    }
};

TimeRange24Input.property.disabled = {
    set: function (value) {
        value = !!value;
        if (value) {
            this.addClass('as-disabled');
        } else {
            this.removeClass('as-disabled');
        }
        this.$offset.disabled = value;
        this.$duration.disabled = value;
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};


TimeRange24Input.property.dayOffset = {
    set: function (value) {
        var notNull = this.notNull;
        if ((0,utils.isRealNumber)(value)) {
            value = (0,utils.normalizeMinuteOfMillis)(value);
        } else {
            value = notNull ? 0 : null;
        }
        this.$offset.dayOffset = value;
        this.$duration.dayOffset = value;
        this._updateTextData();
    },
    get: function () {
        return this.$offset.dayOffset;
    }
};

TimeRange24Input.property.duration = {
    /***
     * @this TimeRange24Input
     * @param value
     */
    set: function (value) {
        var notNull = this.notNull;
        if ((0,utils.isRealNumber)(value)) {
            value = Math.floor(Math.min(datetime.MILLIS_PER_DAY, Math.max(0, value)));
            value = Math.floor(value / datetime.MILLIS_PER_MINUTE) * datetime.MILLIS_PER_MINUTE;
        } else {
            value = notNull ? 0 : null;
        }
        this.$duration.value = value;
        this._updateTextData();
    },
    get: function () {
        return this.$duration.value;
    }
};


TimeRange24Input.property.readOnly = {
    set: function (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 () {
        return this.containsClass('as-read-only');
    }
};


TimeRange24Input.property.value = {
    set: function (value) {
        var rangeValue = null;
        if ((0,utils.isRealNumber)(value)) rangeValue = { dayOffset: value, duration: 0 };
        else if (!value) {
        } else if (typeof rangeValue === "object") {
            if ((0,utils.isRealNumber)(value.dayOffset)) {
                rangeValue = { dayOffset: value.dayOffset, duration: 0 };
            } else {
                rangeValue = { dayOffset: 0, duration: 0 };
            }
            if ((0,utils.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 () {
        if (!(0,utils.isRealNumber)(this.dayOffset) && !(0,utils.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 ((0,utils.isRealNumber)(newStart)) {
        if ((0,utils.isRealNumber)(prevEnd)) {
            newEnd = Math.max(newStart, Math.min(newStart + datetime.MILLIS_PER_DAY - datetime.MILLIS_PER_MINUTE, prevEnd));
        } else {
            newEnd = newStart;
        }
        this.$duration.dayOffset = newStart;
        this.$duration.value = newEnd - newStart;
    } else {
        this.$duration.dayOffset = 0;
        this.$duration.value = (0,utils.isRealNumber)(prevEnd) ? Math.min(prevEnd, datetime.MILLIS_PER_DAY - datetime.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 (!(0,utils.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
    });
};


ACore/* default.install */.Z.install(TimeRange24Input);

/* harmony default export */ const js_TimeRange24Input = (TimeRange24Input);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checktreeitem.css
var checktreeitem = __webpack_require__(785);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeItem.js







/***
 * @extends ExpNode
 * @constructor
 */
function CheckTreeItem() {
    this._itemData = null;
    this.$name = (0,ACore.$)('span.absol-exp-node-name', this);
    this.$desc = (0,ACore.$)('span.absol-exp-node-desc', this);
    this.$iconCtn = (0,ACore.$)('div.absol-exp-node-ext-icon', this);
    this.$level = (0,ACore.$)('.absol-exp-node-level', this);
    this.$checkbox = (0,ACore.$)('checkboxbutton', this)
        .on('change', this.eventHandler.checkboxChange);
    this.$toggleIcon = (0,ACore.$)('toggler-ico', this);
    this.on('click', this.eventHandler.click);
}

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

CheckTreeItem.render = function () {
    return (0,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 = ExpTree/* ExpNode.property.icon */.$P.property.icon;
CheckTreeItem.property.text = ExpTree/* ExpNode.property.name */.$P.property.name;
CheckTreeItem.property.level = ExpTree/* ExpNode.property.level */.$P.property.level;
CheckTreeItem.property.desc = ExpTree/* ExpNode.property.desc */.$P.property.desc;
CheckTreeItem.property.status = ExpTree/* ExpNode.property.status */.$P.property.status;


CheckTreeItem.property.data = {
    set: function (itemData) {
        this._itemData = itemData;
        var text = (0,SelectListItem/* getTextOfListItem */.sk)(itemData);
        this.text = text;
        this.attr('title', itemData.value + '')
        var desc = (0,SelectListItem/* getDescriptionOfListItem */._l)(itemData);
        this.desc = desc;
        if (itemData && itemData.icon) {
            this.icon = itemData.icon;
        }
        else {
            this.icon = null;
        }
        this.noSelect = itemData.noSelect;
    },
    get: function () {
        return this._itemData;
    }
};

CheckTreeItem.property.selected = {
    set: function (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 () {
        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 (value) {
        if (value) {
            this.addClass('as-no-select');
        }
        else {
            this.removeClass('as-no-select');
        }
    },
    get: function () {
        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 (!(0,EventEmitter/* hitElement */.EY)(this.$checkbox, event) && !this.$checkbox.disabled) {
            this.$checkbox.checked = !this.$checkbox.checked;
            this.eventHandler.checkboxChange(event);
        }
    }
    else {
        if (!(0,EventEmitter/* hitElement */.EY)(this.$checkbox, event) && !this.noSelect && !this.$checkbox.disabled) {
            this.$checkbox.checked = !this.$checkbox.checked;
            this.eventHandler.checkboxChange(event);
        }
    }
};

ACore/* default.install */.Z.install(CheckTreeItem);


/* harmony default export */ const js_CheckTreeItem = (CheckTreeItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checktreebox.css
var checktreebox = __webpack_require__(254);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckTreeBox.js



















/***
 * @extends Follower
 * @constructor
 */
function CheckTreeBox() {
    if (this.cancelWaiting)
        this.cancelWaiting();
    /**
     *
     * @type {CTBItemListController}
     */
    this.listCtrl = new (this.ListControllerClass)(this);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.listCtrl, ['viewHolders', '$checkAll', 'estimateSize']);
    this.dropdownCtrl = new CTBDropdownController(this);
    this.actionCtrl = new CTBActionController(this);
    this.searchCtrl = new CTBSearchController(this);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.searchCtrl, ['$searchInput']);

    this._initDomHook();
    this._initProperty();
    if (!this.updatePosition) {
        this.updatePosition = noop/* default */.Z;
    }

    /**
     * @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 = (0,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 = (0,attribute.parseMeasureValue)(value);
        if (ms.unit === 'px') {
            value = Math.max(240, ms.value) + 'px';
        }
        return AElement/* default.prototype.addStyle.call */.Z.prototype.addStyle.call(this, name, value);
    }
    return AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
}

CheckTreeBox.render = function () {
    var mobile = (arguments[1] && arguments[1].forceMobile) || BrowserDetector/* default.isMobile */.Z.isMobile;

    var footer = {
        class: 'as-dropdown-box-footer',
        child: [
            {
                tag: 'checkbox',
                class: 'as-select-list-box-check-all',
                props: {
                    checked: false,
                    text: LanguageSystem/* default.getText */.ZP.getText('txt_check_all') || LanguageSystem/* default.getText */.ZP.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 (0,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/* default.tag */.Z.tag
                            },
                            {
                                tag: 'button',
                                class: 'am-dropdown-box-close-btn',
                                child: 'span.mdi.mdi-close'
                            }
                        ]
                    },
                    content,
                    footer
                ]
            }
        })
    }
    return (0,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.findItemByValue = function (value) {
    var holders = this.listCtrl.findItemHoldersByValue(value);
    if (holders && holders.length > 0) {
        return holders[0].item;
    }
    else return null;
};


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 (items) {
        items = items || [];
        this._items = items;
        this.listCtrl.setItems(items);
    },
    get: function () {
        return this._items;
    }
};


CheckTreeBox.property.values = {
    /***
     * @this CheckTreeBox
     * @param values
     */
    set: function (values) {
        this.listCtrl.setValues(values);
    },
    get: function () {
        return this.listCtrl.getValues();
    }
};

CheckTreeBox.property.viewValues = {
    get: function () {
        return this.listCtrl.getViewValues();
    }
};

CheckTreeBox.property.enableSearch = {
    set: function (value) {
        if (value) this.addClass('as-enable-search');
        else
            this.removeClass('as-enable-search');
    },
    get: function () {
        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);
};

ACore/* default.install */.Z.install(CheckTreeBox);


/* harmony default export */ const js_CheckTreeBox = (CheckTreeBox);

/***
 *
 * @param {CheckTreeBox} boxElt
 * @param items
 * @constructor
 */
function TreeRootHolder(boxElt, items) {
    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((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(c => c.canSelectAll);
    this.canSelect = (this.child.length === 0 || this.child.some(c => c.canSelect));
}

CheckTreeBox.prototype.RootHolderClass = TreeRootHolder;

TreeRootHolder.prototype.level = -1;

TreeRootHolder.prototype.reset = function () {
    this.child.forEach(c => c.reset());
    this.selected = "none";

};

/***
 *
 * @param {Array=} ac
 */
TreeRootHolder.prototype.toArray = function (ac) {
    ac = ac || [];
    this.child.forEach(c => c.toArray(ac));
    return ac;
};

TreeRootHolder.prototype.updateFromChild = function () {
    var childSelectAll = 0;
    var childSelectChild = 0;
    var isCheckAll = true;
    this.traverse(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(c => c.getValues(ac));
    return (0,DataStructure_Array.arrayUnique)(ac);
};


TreeRootHolder.prototype.getViewValues = function (ac) {
    ac = ac || [];
    this.child.forEach(c => c.getViewValues(ac));
    return (0,DataStructure_Array.arrayUnique)(ac);
};

/***
 *
 * @param {Array} values
 */
TreeRootHolder.prototype.setValues = function (values) {
    this.reset();
    values = values.reduce((ac, cr) => {
        ac[(0,utils.keyStringOf)(cr)] = true;
        return ac;
    }, values.slice());
    this.child.forEach(c => 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((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(c => c.selectAll());
};


TreeRootHolder.prototype.unselectAll = function () {
    this.child.forEach(c => 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(c => c.updateSelectedFromRef());
};


TreeRootHolder.prototype.traverse = function (cb) {
    this.child.forEach(c => 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(c => 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) {
    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((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.item.noSelect && this.child.every(c => c.canSelectAll);
    this.canSelect = !this.item.noSelect && (this.child.length === 0 || this.child.some(c => c.canSelect));
}

TreeRootHolder.prototype.SubHolderClass = TreeNodeHolder;


/***
 *
 * @param {Object<string, TreeNodeHolder>|{}}ac
 * @returns {Object<string, TreeNodeHolder>|{}}
 */
TreeNodeHolder.prototype.depthIndexing = function (ac) {
    ac = ac || {};
    var key = (0,utils.keyStringOf)(this.item.value);
    if (!ac[key]) ac[key] = [];
    ac[key].push(this);
    // if (ac[key].length === 2) {//allow
    //     console.warn("Duplicate value", ac[key]);
    // }
    this.child.forEach(c => 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(c => c.getValues(ac));
    }
    return ac;
};

TreeNodeHolder.prototype.getViewValues = function (ac) {
    return this.getValues(ac);
};


TreeNodeHolder.prototype.setValues = function (values) {
    if (values[(0,utils.keyStringOf)(this.item.value)]) {
        this.selectAll(true);
    }
    else {
        this.child.forEach(c => 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 () {
    return this.calcWidth();//because new version use TextMeasure.measureWidth, better performance
};

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 + TextMeasure/* default.measureWidth */.Z.measureWidth(this.item.text||'', TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14);//margin-text

    if (this.item.desc) width += 6 + TextMeasure/* default.measureWidth */.Z.measureWidth(this.item.desc||'',TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 11.9);
    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(c => c.traverse(cb));
};

Object.defineProperty(TreeNodeHolder.prototype, 'itemElt', {
    set: function (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 () {
        return this._elt;
    },
    configurable: true
});


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 = (0,ACore.$)('.as-select-list-box-check-all', this.elt)
        .on('change', this.ev_checkAllChange.bind(this));
    this.$scroller = (0,ACore.$)('.as-check-tree-box-scroller', elt)
        .on('scroll', this.ev_scroll.bind(this));
    this.itemInPage = Math.max(36, Math.ceil((0,Dom/* getScreenSize */.tE)().height / this.itemHeight));
    this.$content = (0,ACore.$)('.as-check-tree-box-content', elt);
    this.$pages = (0,ACore.$$)('.as-select-list-box-page', elt);
    this.$pages.forEach(function (p) {
        p.__viewOffset__ = -1;
    });

}

CheckTreeBox.prototype.ListControllerClass = CTBItemListController;

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 = [];
    (0,search/* prepareSearchForList */.Lb)(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() || (0,ACore._)({
        tag: js_CheckTreeItem.tag,
        props: {
            menuElt: this
        },
        on: {
            presstoggle: function (event) {
                this.menuElt.eventHandler.toggleItem(this, event);
            },
            select: function (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[(0,utils.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 (!(0,DataStructure_Array.arrayCompare)(preValues, newValues)) {
        this.elt.emit('change', { type: 'change', target: this }, this);
    }
};

/**
 *
 * @param {CheckTreeBox} elt
 * @constructor
 */
function CTBActionController(elt) {
    this.elt = elt;
    this.$cancelBtn = (0,ACore.$)('.as-select-list-box-cancel-btn', this.elt)
        .on('click', this.ev_clickCancelBtn.bind(this));
    this.$closeBtn = (0,ACore.$)('.as-select-list-box-close-btn', this.elt)
        || (0,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 = (0,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 = (0,search/* searchTreeListByText */.$l)(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(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 = 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 = (items) => {
    return items.map(it => normalizeItem(it));
};

var verifyItems = items => {
    var leafDict = {};
    var subTreeDict = {};
    var visit = () => {

    }

    items.forEach(visit);
}

/***
 * 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) || BrowserDetector/* default.isMobile */.Z.isMobile;

    var footer = {
        class: 'as-dropdown-box-footer',
        child: [
            {
                tag: 'checkbox',
                class: 'as-select-list-box-check-all',
                props: {
                    checked: false,
                    text: LanguageSystem/* default.getText */.ZP.getText('txt_check_all') || LanguageSystem/* default.getText */.ZP.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 (0,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/* default.tag */.Z.tag
                            },
                            {
                                tag: 'button',
                                class: 'am-dropdown-box-close-btn',
                                child: 'span.mdi.mdi-close'
                            }
                        ]
                    },
                    content,
                    footer
                ]
            }
        })
    }

    return (0,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.prototype.findItemByValue = function (value) {
    var holders = this.listCtrl.findItemHoldersByValue(value);
    if (holders && holders.length > 0) {
        return holders[0].item;
    }
    else {
        return null;
    }
};

CheckTreeLeafOnlyBox.property.items = {
    get: js_CheckTreeBox.property.items.get,
    set: function (items) {
        items = normalizeItems(items || []);
        verifyItems(items);
        js_CheckTreeBox.property.items.set.call(this, items);
    }
};

CheckTreeLeafOnlyBox.prototype._requestItem = function () {
    var res = this._pool.pop() || (0,ACore._)({
        tag: js_CheckTreeItem.tag,
        class: 'as-check-tree-leaf-only-item',
        props: {
            menuElt: this
        },
        on: {
            presstoggle: function (event) {
                this.menuElt.eventHandler.toggleItem(this, event);
            },
            select: function (event) {
                this.menuElt.eventHandler.selectItem(this, event);
            }
        }
    });

    res.menuElt = this;
    return res;
};

CheckTreeLeafOnlyBox.prototype.HolderClass = TreeLeafOnlyNodeHolder;


ACore/* default.install */.Z.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;

OOP/* default.mixClass */.ZP.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((ac, c) => ac + c.leafCount, 0);
    }

    if (this.child.length > 0) {
        this.item.noSelect = this.child.every(c => 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(c => c.canSelectAll || c.leafCount === 0);

    if (this.leafCount === 0) this.selected = 'empty';
}

OOP/* default.mixClass */.ZP.mixClass(TreeLeafOnlyNodeHolder, TreeNodeHolder);

TreeLeafOnlyRootHolder.prototype.SubHolderClass = TreeLeafOnlyNodeHolder;


TreeLeafOnlyNodeHolder.prototype.setValues = function (values) {
    if (values[(0,utils.keyStringOf)(this.item.value)]) {
        this.selectAll(true);
    }
    else {
        this.child.forEach(c => 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(c => 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(c => 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((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/CheckUnsafeTreeLeafOnlyBox.js











var CheckUnsafeTreeLeafOnlyBox_normalizeItem = item => {
    var nItem = Object.assign({}, item);
    if (!nItem.isLeaf && nItem.noSelect) {
        delete nItem.noSelect;
    }
    if (nItem.items && nItem.items.map)
        nItem.items = CheckUnsafeTreeLeafOnlyBox_normalizeItems(nItem.items);
    return nItem;
}

var CheckUnsafeTreeLeafOnlyBox_normalizeItems = (items) => {
    return items.map(it => CheckUnsafeTreeLeafOnlyBox_normalizeItem(it));
};

var CheckUnsafeTreeLeafOnlyBox_verifyItems = items => {
    var leafDict = {};
    var subTreeDict = {};
    var visit = () => {

    }

    items.forEach(visit);
}

/**
 * @extends AElement
 * @constructor
 */
function CheckUnsafeTreeItem() {
    js_CheckTreeItem.apply(this, arguments);
    this.$actionCtn = (0,ACore.$)('.as-check-unsafe-tree-item-action-ctn', this);
    this.$actionBtns = (0,ACore.$$)('button', this.$actionCtn);
    this.$actionBtns[0].on('click', this.eventHandler.clickAction.bind(this, 'check_all'));
    this.$actionBtns[1].on('click', this.eventHandler.clickAction.bind(this, 'uncheck_all'));
}

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

CheckUnsafeTreeItem.render = function () {
    return (0,ACore._)({
        tag: 'button',
        extendEvent: ['select', 'presstoggle'],
        class: ['as-check-tree-item', 'as-check-unsafe-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',
            {
                class: 'as-check-unsafe-tree-item-action-ctn',
                child: [
                    { tag: 'button', class: 'as-transparent-button', child: 'span.mdi.mdi-check-all' },
                    { tag: 'button', class: 'as-transparent-button', child: 'span.mdi.mdi-close' },

                ]
            }
        ]
    });
};

CheckUnsafeTreeItem.eventHandler = Object.assign({}, js_CheckTreeItem.eventHandler);
CheckUnsafeTreeItem.property = Object.assign({}, js_CheckTreeItem.property);


CheckUnsafeTreeItem.eventHandler.click = function (event) {
    var tBound;
    if (this.status === 'open' || this.status === 'close') {
        tBound = this.$toggleIcon.getBoundingClientRect();
        if ((0,EventEmitter/* hitElement */.EY)(this.$actionCtn, event)) {
        }
        else if (event.clientX <= tBound.right || this.noSelect) {
            this.emit('presstoggle', { type: 'presstoggle', target: this, originalEvent: event }, this);
        }
        else if (!(0,EventEmitter/* hitElement */.EY)(this.$checkbox, event) && !this.$checkbox.disabled) {
            this.$checkbox.checked = !this.$checkbox.checked;
            this.eventHandler.checkboxChange(event);
        }
    }
    else {
        if (!(0,EventEmitter/* hitElement */.EY)(this.$checkbox, event) && !this.noSelect && !this.$checkbox.disabled) {
            this.$checkbox.checked = !this.$checkbox.checked;
            this.eventHandler.checkboxChange(event);
        }
    }
};

CheckUnsafeTreeItem.eventHandler.clickAction = function (action, event) {
    console.log(action);
};

/***
 * Only tree has leaf can be selected
 * @extends CheckTreeBox
 * @constructor
 */
function CheckUnsafeTreeLeafOnlyBox() {
    js_CheckTreeBox.apply(this, arguments);
}


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


CheckUnsafeTreeLeafOnlyBox.render = function () {
    var mobile = (arguments[1] && arguments[1].forceMobile) || BrowserDetector/* default.isMobile */.Z.isMobile;

    var footer = {
        class: 'as-dropdown-box-footer',
        child: [
            {
                tag: 'checkbox',
                class: 'as-select-list-box-check-all',
                props: {
                    checked: false,
                    text: LanguageSystem/* default.getText */.ZP.getText('txt_check_all') || LanguageSystem/* default.getText */.ZP.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 (0,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/* default.tag */.Z.tag
                            },
                            {
                                tag: 'button',
                                class: 'am-dropdown-box-close-btn',
                                child: 'span.mdi.mdi-close'
                            }
                        ]
                    },
                    content,
                    footer
                ]
            }
        })
    }

    return (0,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(CheckUnsafeTreeLeafOnlyBox.prototype, js_CheckTreeBox.prototype);
CheckUnsafeTreeLeafOnlyBox.property = Object.assign({}, js_CheckTreeBox.property);
CheckUnsafeTreeLeafOnlyBox.eventHandler = Object.assign({}, js_CheckTreeBox.eventHandler);

CheckUnsafeTreeLeafOnlyBox.prototype._pool = [];

CheckUnsafeTreeLeafOnlyBox.property.items = {
    get: js_CheckTreeBox.property.items.get,
    set: function (items) {
        items = CheckUnsafeTreeLeafOnlyBox_normalizeItems(items || []);
        CheckUnsafeTreeLeafOnlyBox_verifyItems(items);
        js_CheckTreeBox.property.items.set.call(this, items);
    }
};



CheckUnsafeTreeLeafOnlyBox.prototype._requestItem = function () {
    var res = this._pool.pop() || (0,ACore._)({
        tag: js_CheckTreeItem.tag,
        class: 'as-check-tree-leaf-only-item',
        props: {
            menuElt: this
        },
        on: {
            presstoggle: function (event) {
                this.menuElt.eventHandler.toggleItem(this, event);
            },
            select: function (event) {
                this.menuElt.eventHandler.selectItem(this, event);
            }
        }
    });

    res.menuElt = this;
    return res;
};

CheckUnsafeTreeLeafOnlyBox.prototype.HolderClass = CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder;


ACore/* default.install */.Z.install(CheckUnsafeTreeLeafOnlyBox);

/* harmony default export */ const js_CheckUnsafeTreeLeafOnlyBox = (CheckUnsafeTreeLeafOnlyBox);

/**
 *
 * @constructor
 */
function CSTBItemListController() {
    CTBItemListController.apply(this, arguments);
    console.log(this._requestItem)
}

(0,OOP/* mixClass */.Jx)(CSTBItemListController, CTBItemListController);

CheckUnsafeTreeLeafOnlyBox.prototype.ListControllerClass = CSTBItemListController;

CSTBItemListController.prototype._pool = [];

CSTBItemListController.prototype._requestItem = function () {
    var res = this._pool.pop() || (0,ACore._)({
        tag: CheckUnsafeTreeItem,
        // tag: CheckTreeItem,
        props: {
            menuElt: this
        },
        on: {
            presstoggle: function (event) {
                this.menuElt.eventHandler.toggleItem(this, event);
            },
            select: function (event) {
                this.menuElt.eventHandler.selectItem(this, event);
            }
        }
    });
    res.menuElt = this.elt;
    console.log(res)
    return res;
};


/***
 * @extends TreeRootHolder
 * @param {CheckUnsafeTreeLeafOnlyBox} boxElt
 * @param items
 * @constructor
 */
function CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyRootHolder(boxElt, items) {
    TreeRootHolder.apply(this, arguments);
}

CheckUnsafeTreeLeafOnlyBox.prototype.RootHolderClass = CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyRootHolder;

OOP/* default.mixClass */.ZP.mixClass(CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyRootHolder, TreeRootHolder);


/***
 * @extends TreeNodeHolder
 * @constructor
 */
function CheckUnsafeTreeLeafOnlyBox_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((ac, c) => ac + c.leafCount, 0);
    }

    if (this.child.length > 0) {
        this.item.noSelect = this.child.every(c => 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(c => c.canSelectAll || c.leafCount === 0);

    if (this.leafCount === 0) this.selected = 'empty';
}

OOP/* default.mixClass */.ZP.mixClass(CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder, TreeNodeHolder);

CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyRootHolder.prototype.SubHolderClass = CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder;


CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder.prototype.setValues = function (values) {
    if (values[(0,utils.keyStringOf)(this.item.value)]) {
        this.selectAll(true);
    }
    else {
        this.child.forEach(c => c.setValues(values));
    }
    this.updateFromChild();
};


CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder.prototype.getValues = function (ac) {
    ac = ac || [];
    if (this.selected === 'all' && this.item.isLeaf) {
        ac.push(this.item.value);
    }
    else {
        this.child.forEach(c => c.getValues(ac));
    }

    return ac;
};


CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder.prototype.getViewValues = function (ac) {
    ac = ac || [];
    if (this.selected === 'all') {
        ac.push(this.item.value);
    }
    else if (this.selected === 'child') {
        this.child.forEach(c => c.getViewValues(ac));
    }
    return ac;
};


/***
 *
 * @param {boolean=} isDownUpdate
 */
CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder.prototype.selectAll = function (isDownUpdate) {
    if (this.selected === 'empty') return;
    return TreeNodeHolder.prototype.selectAll.apply(this, arguments);
};

CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder.prototype.unselectAll = function (isDownUpdate) {
    if (this.selected === 'empty') return;
    return TreeNodeHolder.prototype.unselectAll.apply(this, arguments);
};


CheckUnsafeTreeLeafOnlyBox_TreeLeafOnlyNodeHolder.prototype.updateFromChild = function () {
    if (this.child.length === 0) return;
    var count = this.child.reduce((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 = [];//commited value
    this._viewValues = [];
    /***
     * @type {CheckTreeBox|CheckTreeLeafOnlyBox}
     */
    this.$checkTreeBox = (0,ACore._)({
        tag: this.renderProps.leafOnly ? (this.attr('data-version') === '2.0' ? js_CheckUnsafeTreeLeafOnlyBox.tag : 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 = (0,ACore.$)('.as-multi-select-menu-item-ctn', this);
    this.$checkTreeBox.followTarget = this;
    this.$checkTreeBox.sponsorElement = this;
    this.on('mousedown', this.eventHandler.click);
    this.dropdownCtrl = new MCTMDropController(this);
    // this.placeholder = LangSys.getText('txt_select_value') || '-- Select values --';

    /**
     * @name readOnly
     * @type {boolean}
     * @memberOf MultiCheckTreeMenu#
     */

    /**
     * @name disabled
     * @type {boolean}
     * @memberOf MultiCheckTreeMenu#
     */


    /**
     * 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 = (0,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'],
                attr: {
                    "data-ml-key": 'txt_select_value'
                },
            },
            {
                tag: 'button',
                class: 'as-multi-select-menu-toggle-btn',
                child: 'dropdown-ico'
            },
            'attachhook'
        ],
        props: {
            renderProps: props
        }
    });
    if (props.version === 2) {
        res.attr('data-version', '2');
    }
    if (leafOnly) res.addClass('as-leaf-only');
    if (BrowserDetector/* default.isMobile */.Z.isMobile) res.addClass('am-multi-select-menu');

    return res;
};

MultiCheckTreeMenu.prototype.tokenPool = [];

MultiCheckTreeMenu.prototype.styleHandlers = {};

MultiCheckTreeMenu.prototype.styleHandlers.maxWidth = function (value) {
    var parsedValue = (0,attribute.parseMeasureValue)(value);
    if (parsedValue.unit === 'px') {
        this.addClass('as-has-max-width');
        this.addStyle('--max-width', value);
    }
    else {
        this.removeClass('as-has-max-width');
    }
};

MultiCheckTreeMenu.prototype.styleHandlers['max-width'] = MultiCheckTreeMenu.prototype.styleHandlers.maxWidth;

MultiCheckTreeMenu.prototype.styleHandlers.width = function (value) {
    var parsedValue = (0,attribute.parseMeasureValue)(value);
    if (parsedValue.unit === 'px') {
        this.addClass('as-has-max-width');
        this.addStyle('--max-width', value);
        this.style.width = value;
    }
    else {
        this.removeClass('as-has-max-width');
    }
};

MultiCheckTreeMenu.prototype.styleHandlers.overflow = function (value) {
    if (value === 'hidden') {
        this.style.overflow = 'hidden';
    }
    else {
        this.style.overflow = '';
    }
};


MultiCheckTreeMenu.prototype.addStyle = function (arg0, arg1) {
    if ((typeof arg0 === "string") && (this.styleHandlers[arg0])) {
        this.styleHandlers[arg0].apply(this, Array.prototype.slice.call(arguments, 1));
        return this;
    }
    else {
        return AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
    }
};

MultiCheckTreeMenu.prototype.removeStyle = function (arg0) {
    if ((typeof arg0 === "string") && (this.styleHandlers[arg0])) {
        this.styleHandlers[arg0].call(this, '');
        return this;
    }
    else {
        return AElement/* default.prototype.removeStyle.apply */.Z.prototype.removeStyle.apply(this, arguments);
    }
};


MultiCheckTreeMenu.prototype._requestToken = function () {
    var token = this.tokenPool.pop();
    if (!token) {
        token = (0,ACore._)({
            tag: js_SelectBoxItem.tag,
            props: {
                menu: this
            },
            on: {
                close: function (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.findItemByValue = function (value) {
    return this.$checkTreeBox.findItemByValue(value);
};


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');
        ResizeSystem/* default.update */.Z.update();
    }
    setTimeout(this._updateOverflow.bind(this), 100)
};

MultiCheckTreeMenu.prototype._updateOverflow = function () {
    var bound;
    if (this.getComputedStyleValue('overflow') === 'hidden') {
        bound = this.getBoundingClientRect();
        if (bound.width === 0) return;
        this.$itemCtn.removeClass('as-has-more');
        var hasMore = false;
        var elt;
        for (var i = 0; i < this.$itemCtn.childNodes.length; ++i) {
            elt = this.$itemCtn.childNodes[i];
            if (!hasMore) {
                elt.removeStyle('display');
                var cBound = elt.getBoundingClientRect();
                if (cBound.bottom > bound.bottom) {
                    hasMore = true;
                }
            }
            if (hasMore) {
                elt.addStyle('display', 'none');
            }
        }
        if (hasMore) this.$itemCtn.addClass('as-has-more');
    }
};

MultiCheckTreeMenu.prototype.commitView = function () {
    var values = this._values;
    var newValues = this.$checkTreeBox.values.slice();
    if (!(0,DataStructure_Array.arrayCompare)(values, newValues)) {
        this._values = this.$checkTreeBox.values.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 (value) {
        if (value === true) value = 100;
        if ((0,utils.isNaturalNumber)(value)) {
            this._initOpened = value;
        }
        else {
            this._initOpened = 0;
        }
        this.$checkTreeBox.initOpened = this._initOpened;
    },
    get: function () {
        return this._initOpened;
    }
}

MultiCheckTreeMenu.property.isFocus = {
    /***
     * @this MultiCheckTreeMenu
     * @param value
     */
    set: function (value) {
        this.dropdownCtrl.isFocus = value;
    },
    get: function () {
        return this.dropdownCtrl.isFocus;
    }
};

MultiCheckTreeMenu.property.items = {
    set: function (items) {
        this._items = (0,utils.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 () {
        return this.$checkTreeBox.items ||[];
    }
};

MultiCheckTreeMenu.property.values = {
    /***
     * @this MultiCheckTreeMenu
     * @param values
     */
    set: function (values) {
        if (!(values instanceof Array)) values = [];
        values = (0,DataStructure_Array.arrayUnique)(values);
        this.$checkTreeBox.values = values;
        this.viewValues(this.$checkTreeBox.viewValues);
        this._values = this.$checkTreeBox.values.slice();
    },
    /***
     * @this MultiCheckTreeMenu
     */
    get: function () {
        if (this.isFocus) return this._values.slice();
        return this.$checkTreeBox.values.slice();
    }
};

MultiCheckTreeMenu.property.checkedValues = {
    get: function () {
        return this.$checkTreeBox.viewValues.slice();
    }
};

MultiCheckTreeMenu.property.leafOnly = {
    set: function (value) {
        if (!!value === this.hasClass('as-leaf-only'))
            return;

        throw Error("Can not change leafOnly value!");
    },
    get: function () {
        return this.hasClass('as-leaf-only');
    }
};

MultiCheckTreeMenu.property.placeholder = {
    set: function (value) {
        if (value) {
            this.$itemCtn.attr('data-placeholder', value + '');
        }
        else {
            this.$itemCtn.attr('data-placeholder', null);
        }
    },
    get: function () {
        return this.$itemCtn.attr('data-placeholder');
    }
};


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 || (!(0,EventEmitter/* hitElement */.EY)(this, event) && !(0,EventEmitter/* hitElement */.EY)(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);
    ResizeSystem/* default.update */.Z.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);
    console.log(this._values, newValues)
    if (!(0,DataStructure_Array.arrayCompare)(this._values, newValues)) {
        this._values = newValues;
        this.emit('change', { type: 'change', target: this }, this);
    }
};


MultiCheckTreeMenu.eventHandler.preUpdateListPosition = function () {
    var bound = this.getBoundingClientRect();
    var screenSize = (0,Dom/* getScreenSize */.tE)();
    var availableTop = bound.top - 5;
    var availableBot = screenSize.height - 5 - bound.bottom - 50;
    this.$checkTreeBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
    var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(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 = (0,Dom/* getScreenSize */.tE)();
    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 (value) {
        this.$checkTreeBox.enableSearch = !!value;
    },
    get: function () {
        return this.$checkTreeBox.enableSearch;
    }
};


ACore/* default.install */.Z.install(MultiCheckTreeMenu);

/* harmony default export */ const js_MultiCheckTreeMenu = (MultiCheckTreeMenu);


/**
 * @constructor
 * @param {MultiCheckTreeMenu} elt
 * @constructor
 */
function MCTMDropController(elt) {
    this.elt = elt;
}


MCTMDropController.prototype.open = function () {
    if (this.elt.readOnly || this.elt.disabled) return;
    if (this.elt.hasClass('as-focus')) return;
    this.elt.addClass('as-focus');
    this.elt.off('mousedown', this.elt.eventHandler.click);
    var bound = this.elt.getBoundingClientRect();
    this.elt.$checkTreeBox.addStyle('min-width', bound.width + 'px'); // Set dropdown width
    this.elt.$checkTreeBox.addTo(document.body); // Attach dropdown to the body
    this.elt.$checkTreeBox.updatePosition(); // Update dropdown position

    if (this.elt._focusTimeout > 0) {
        clearTimeout(this.elt._focusTimeout); // Clear any existing timeout
    }

    // Set a timeout to handle focus and add event listener for clicking outside
    this.elt._focusTimeout = setTimeout(() => {
        document.addEventListener('mousedown', this.elt.eventHandler.clickOut);
        this.elt._focusTimeout = -1;
        this.elt.$checkTreeBox.focus(); // Focus on the dropdown
    }, 5);

};

MCTMDropController.prototype.close = function () {
    if (!this.elt.hasClass('as-focus')) return;
    this.elt.removeClass('as-focus');
    this.elt.$checkTreeBox.selfRemove(); // Detach dropdown from the body
    this.elt.$checkTreeBox.resetSearchState(); // Reset search state
    document.removeEventListener('mousedown', this.elt.eventHandler.clickOut); // Remove click-out listener

    // Re-enable the click event after a delay
    const waitMouseUp = () => {
        document.removeEventListener('mouseup', waitMouseUp);
        setTimeout(() => {
            this.elt.on('mousedown', this.elt.eventHandler.click);
        }, 5);
    };

    setTimeout(waitMouseUp, 100);
};

MCTMDropController.prototype.ev_clickOut = function (event) {

};


Object.defineProperty(MCTMDropController.prototype, "isFocus", {
    set: function (value) {
        if (value) this.open();
        else this.close();
    },
    get: function () {
        return this.elt.hasClass('as-focus');
    }
});
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/fileinputbox.css
var fileinputbox = __webpack_require__(5252);
// EXTERNAL MODULE: ./node_modules/absol-acomp/assets/exticons/catalog.json
var catalog = __webpack_require__(2398);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/FileSaver.js
var FileSaver = __webpack_require__(5447);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileInputBox.js








/***
 * @extends AElement
 * @constructor
 */
function FileInputBox() {
    this.$fileSize = (0,ACore.$)('.as-file-input-box-file-size', this);
    this.$fileName = (0,ACore.$)('.as-file-input-box-file-name', this);
    this.$bg = (0,ACore.$)('.as-file-input-box-background', this);
    this.$input = (0,ACore.$)('input', this)
        .on('change', this.eventHandler.input_fileChange);
    this.$trigger = (0,ACore._)({
        elt: (0,ACore.$)('.as-file-input-box-trigger', this),
        tag: DropZone/* default.tag */.Z.tag,
        on: {
            fileenter: this.eventHandler.input_fileEnter,
            fileleave: this.eventHandler.input_fileLeave,
            filedrop: this.eventHandler.input_fileDrop,

        }
    });
    this.$downloadBtn = (0,ACore.$)('.as-file-input-box-download-btn', this)
        .on('click', this.download.bind(this));
    this.$removeBtn = (0,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 (0,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) {
            (0,FileSaver.saveAs)(value.url, value.name);
        }
        else {
            (0,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.indexOf(fileType) >= 0) {
            previewUrl = MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/' + fileType + '.svg';
        }
        else {
            previewUrl = MessageInput/* default.iconAssetRoot */.ZP.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 = (0,utils.fileSize2Text)(fileSize);
        this.addClass('as-has-file-size');
    }
};

FileInputBox.property = {};

FileInputBox.property.value = {
    set: function (value) {
        value = value || null;
        this._value = value;
        this._valueInfo = (0,utils.fileInfoOf)(value);
        this._updateThumbnail();
        this._updateFileName();
        this._updateFileSize();
        if (value) {
            this.addClass('as-has-value');
        }
        else {
            this.removeClass('as-has-value');
        }
    },
    get: function () {
        return this._value;
    }
};


FileInputBox.property.fileType = {
    set: function (value) {
        this._fileType = value;
        this._updateThumbnail();
    },
    /***
     * @this FileInputBox
     * @return {*}
     */
    get: function () {
        return this._fileType || (this._valueInfo && this._valueInfo.type) || null;
    }
};

FileInputBox.property.fileName = {
    set: function (value) {
        value = typeof value === 'string' ? value : null;
        this._fileName = value;
        this._updateFileName();
    },
    get: function () {
        return this._fileName || (this._valueInfo && this._valueInfo.name) || null;
    }
};

FileInputBox.property.fileSize = {
    set: function (value) {
        if ((0,utils.isRealNumber)(value)) value = Math.max(0, value);
        else value = null;
        this._fileSize = value;
        this._updateFileSize();
    },
    get: function () {
        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 (value) {
        this._thumbnail = value || null;
        this._updateThumbnail();
    },
    get: function () {
        return this._thumbnail;
    }
};

FileInputBox.property.allowUpload = {
    set: function (value) {
        if (value) {
            this.addClass('as-allow-upload');
        }
        else {
            this.removeClass('as-allow-upload');
        }
    },
    get: function () {
        return this.hasClass('as-allow-upload');
    }
};

FileInputBox.property.downloadable = {
    set: function (value) {
        if (value) {
            this.addClass('as-downloadable');
        }
        else {
            this.removeClass('as-downloadable');
        }
    },
    get: function () {
        return this.hasClass('as-downloadable');
    }
};


FileInputBox.property.removable = {
    set: function (value) {
        if (value) {
            this.addClass('as-removable');
        }
        else {
            this.removeClass('as-removable');
        }
    },
    get: function () {
        return this.hasClass('as-removable');
    }
};


FileInputBox.property.accept = {
    set: function (value) {
        if (!value) value = null;
        this.$input.attr('accept', value + '');
    },
    get: function () {
        return this.$input.attr('accept') || null;
    }
};

FileInputBox.property.checked = {
    set: function (value) {
        if (value) {
            this.addClass('as-checked');
        }
        else {
            this.removeClass('as-checked');

        }
    },
    get: function () {
        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 (!(0,utils.fileAccept)(accept, file.type) && !(0,utils.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);
    }

};


ACore/* default.install */.Z.install(FileInputBox);

/* harmony default export */ const js_FileInputBox = (FileInputBox);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/countdowntext.css
var countdowntext = __webpack_require__(9803);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CountdownText.js






var CountdownText_ = ACore/* default._ */.Z._;
var CountdownText_$ = ACore/* default.$ */.Z.$;

var tokenCache = {};

function remainSecondToText(remainSecond, format) {
    var tokens = tokenCache[format];
    if (!tokens) {
        tokens = (format.match(new RegExp(datetime.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(datetime.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 (0,utils.zeroPadding)(hour % 24, all.length);
                }
                else {
                    return (0,utils.zeroPadding)(hour, all.length);
                }
            case 'mm':
            case 'M':
            case 'MM':
                if (tokens['HH'] || tokens['hh']) {
                    return (0,utils.zeroPadding)(min % 60, all.length);
                }
                else {
                    return (0,utils.zeroPadding)(min, all.length);
                }
            case 'ss':
            case 'S':
            case 'SS':
                if (tokens['m'] || tokens['mm']) {
                    return (0,utils.zeroPadding)(sec % 60, all.length);
                }
                else {
                    return (0,utils.zeroPadding)(sec, all.length);
                }
            case 'cs':
                return (0,utils.zeroPadding)(Math.ceil(remainSecond * 100) % 100, 2);
            case 'ms':
                return (0,utils.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 (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 (value) {
        if (typeof value === "string" || typeof value === 'function') {
            this._format = value || 'HH:mm';
        }
        else {
            this._format = 'HH:mm';
        }
    },
    get: function () {
        return this._format;
    }
};

CountdownText.property.remainSecond = {
    set: function (value) {
        if (!(value >= 0)) {
            value = 0;
        }
        this.finishTime = new Date(new Date().getTime() + value)
    },
    get: function () {
        if (this.finishTime !== null) {
            return Math.max(0, (this.finishTime.getTime() - new Date().getTime()) / 1000);
        }
        else return null;
    }
};

CountdownText.property.finishTime = {
    set: function (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 () {
        return this._finishTime;
    }
};

CountdownText.property.fps = {
    set: function (value) {
        this._fps = (0,utils.isRealNumber)(value) ? value : 200;
        if (this._intvId > 0) {
            clearInterval(this._intvId);
            this._intvId = setInterval(this._tick, 1000 / this._fps);
        }
    },
    get: function () {
        return this._fps;
    }
};


ACore/* default.install */.Z.install(CountdownText);

/* harmony default export */ const js_CountdownText = (CountdownText);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/YesNoQuestionDialog.js
var YesNoQuestionDialog = __webpack_require__(5466);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LoadingCubeModal.js




/***
 * @extends Modal
 * @constructor
 */
function LoadingCubeModal() {

}

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

LoadingCubeModal.render = function () {
    return (0,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 = (0,ACore._)(LoadingCubeModal.tag);
    if (!LoadingCubeModal.share.$elt.isDescendantOf(document.body)){
        document.body.appendChild(LoadingCubeModal.share.$elt);
    }
    LoadingCubeModal.share.token = (0,stringGenerate.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;
};



ACore/* default.install */.Z.install(LoadingCubeModal);

/* harmony default export */ const js_LoadingCubeModal = (LoadingCubeModal);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreeleafmenu.css
var selecttreeleafmenu = __webpack_require__(9953);
;// 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 = (0,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 (0,ACore._)({
        tag: Follower/* default */.Z, 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 = (0,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[(0,utils.keyStringOf)(item.value)])) {
        status = savedStatus[(0,utils.keyStringOf)(item.value)];
    }

    var nodeElt = (0,ACore._)({
        tag: ExpTree/* default.tag */.ZP.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 (event) {
            if (isBranchStatus(nodeElt.status)) {
                nodeElt.status = invertStatus(nodeElt.status)
                savedStatus[(0,utils.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[(0,utils.keyStringOf)(item.value)] && !this.warned) {
            this.warned = true;
            console.warn(this, 'has duplicated value, element will not work correctly!', item);
        }
        dict[(0,utils.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 + (0,utils.estimateWidth14)(item.text) + 5 + 7;//margin-text
    if (item.desc) width += 6 + (0,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.viewToValue = function (value) {
    var viewNode = this.$itemByValue[(0,utils.keyStringOf)(value)];
    if (!viewNode) return;
    viewNode.scrollIntoView();

    while (viewNode && viewNode.getParent) {
        if (viewNode.status === 'close') {
            viewNode.getNode().emit('press');
        }
        viewNode = viewNode.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[(0,utils.keyStringOf)(this.value)];
    if (this.$selectedItem) {
        this.$selectedItem.addClass('as-selected');
    }
};

SelectTreeLeafBox.prototype.findItemByValue = function (value) {
    var holder = this.$itemByValue[(0,utils.keyStringOf)(value)];
    if (holder) return holder.itemData;
    return null;
};

SelectTreeLeafBox.prototype.focus = js_SelectListBox.prototype.focus;

SelectTreeLeafBox.property = {};

SelectTreeLeafBox.eventHandler = {};


SelectTreeLeafBox.property.items = {
    /***
     * @this SelectTreeLeafBox
     * @param items
     */
    set: function (items) {
        var self = this;
        this._savedStatus = {};
        this._searchCache = {};
        items = items || [];
        this._items = items;
        (0,search/* prepareSearchForList */.Lb)(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 () {
        return this._items;
    }
};

SelectTreeLeafBox.property.value = {
    set: function (value) {
        this._value = value;
        this._updateSelectedItem();
    }, get: function () {
        var firstLeaf;
        if (!this.strictValue || this.$itemByValue[(0,utils.keyStringOf)(this._value)]) {
            return this._value;
        }
        else {
            firstLeaf = this._findFirstLeaf();
            if (firstLeaf) return firstLeaf.value;
            else return this._value;
        }
    }
};

SelectTreeLeafBox.property.selectedItem = {
    get: function () {
        var key = (0,utils.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 = (0,search/* default */.ZP)({ text: query });
    var minScore = Infinity;
    var maxScore = -Infinity;

    function makeScoreTree(item) {
        var holder = {
            item: item, score: (0,search/* calcItemMatchScore */.lk)(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[(0,utils.keyStringOf)(item.value)] = 'open';
                    item.items = filterTree(holder.children, false);
                }
                else {
                    savedStatus[(0,utils.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();
};


ACore/* default.install */.Z.install(SelectTreeLeafBox);

/* harmony default export */ const js_SelectTreeLeafBox = (SelectTreeLeafBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreeeleafbox.css
var selecttreeeleafbox = __webpack_require__(4946);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTIPropHandlers.js


var CTIPropHandlers = {};

CTIPropHandlers.data = {
    /***
     * @this MCheckTreeItem|CheckTreeItem
     * @param data
     */
    set: function (data) {
        this._data = data;
        this._updateData();
    },
    get: function () {
        return this._data;
    }
};

CTIPropHandlers.text = {
    get: function () {
        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 () {
        if (!this._data) return null;
        if (this._data.charAt) return this._data;
        return this._data.value;
    }
};

CTIPropHandlers.desc = {
    get: function () {
        if (!this._data) return '';
        var desc = this._data.desc;
        if (desc === undefined || desc === null) return '';
        return desc + '';
    }
};

CTIPropHandlers.level = {
    set: function (value) {
        if (!(0,utils.isNaturalNumber)(value)) value = 0;
        this._level = value;
        this.addStyle('--level', value + '');
    },
    get: function () {
        return this._level;
    }
};

CTIPropHandlers.status = {
    set: function (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 () {
        return this._status || 'none';
    }
};

CTIPropHandlers.selected = {
    set: function (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 () {
        if (this.$checkbox.checked) {
            return 'all';
        }
        else {
            if (this.$checkbox.hasClass('as-has-minus')) {
                return 'child';
            }
            else {
                return 'none';
            }
        }
    }
};

CTIPropHandlers.hasLeaf = {
    set: function (value) {
        if (value) {
            this.addClass('as-has-leaf');
        }
        else {
            this.removeClass('as-has-leaf');
        }
    },
    get: function () {
        return this.hasClass('as-has-leaf');
    }
};

CTIPropHandlers.noSelect = {
    set: function (value) {
        if (value) {
            this.addClass('as-no-select');
        }
        else {
            this.removeClass('as-no-select');
        }
        this.$checkbox.disabled = !!value;
    },
    get: function () {
        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 (data) {
        this._data = data;
        this._updateData();
    },
    get: function () {
        return this._data;
    }
};

STLIPropHandlers.text = {
    get: function () {
        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 () {
        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 (value) {
        if (value) {
            this.addClass('as-selected');
        }
        else {
            this.removeClass('as-selected');
        }
    },
    get: function () {
        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 = (0,ACore.$)('.am-select-tree-leaf-item-text', this);
    this.$desc = (0,ACore.$)('.am-select-tree-leaf-item-desc', this);
    this.$iconCtn = (0,ACore.$)('.am-select-tree-leaf-item-icon-ctn', this);
    this.addEventListener('click', this.eventHandler.click);
}

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

SelectTreeLeafItem.render = function () {
    return (0,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', (0,utils.keyStringOf)(this.value));
    this.$iconCtn.clearChild();
    var icon = this.data && this.data.icon;
    if (icon) {
        icon = (0,ACore._)(icon);
        if (icon.parentElement) icon = (0,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__(8618);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/CTBPropHandlers.js
var CTBPropHandlers = {};

CTBPropHandlers.items = {
    /***
     * @this MCheckTreeBox
     * @param items
     */
    set: function (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 () {
        return this.itemListCtrl.getItems();
    }
};

CTBPropHandlers.values = {
    /***
     * @this CheckTreeBox|MCheckTreeBox
     * @param values
     */
    set: function (values) {
        this.pendingValues = values || [];
        this.modes.normal.setValues(values);
        if (this.mode !== this.modes.normal) {
            this.mode.updateSelectedFromRef();
        }
    },
    get: function () {
        return this.modes.normal.getValues();
    }
};

CTBPropHandlers.viewValues =  {
    get: function (){
        return this.modes.normal.getViewValues();
    }
};

CTBPropHandlers.enableSearch = {
    /***
     * @this CheckTreeBox|MCheckTreeBox
     * @param value
     */
    set: function (value) {
        if (value) {
            this.$box.addClass('as-enable-search');
        }
        else {
            this.$box.removeClass('as-enable-search');
        }
    },
    get: function () {
        return this.$box.hasClass('as-enable-search');
    }
};


CTBPropHandlers.leafOnly = {
    /***
     * @this CheckTreeBox|MCheckTreeBox
     * @param value
     */
    set: function (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 () {
        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) {
    this.level = -1;
    this.selected = 'none';
    this.elt = elt;
    this.$list = this.elt.$list;
    /***
     *
     * @type {MCTBItemHolder[]}
     */
    this.children = items.map(item => new this.elt.classes.ItemHolder(elt, this, item));
    this.hasLeaf = this.children.some(holder => holder.hasLeaf);
    this.hasNoSelect = this.children.some(holder => holder.hasNoSelect);

    this.hasDesc = this.children.some(holder => holder.hasDesc);
    this.hasIcon = this.children.some(holder => 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 = (0,utils.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(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((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(child => child.select(flag, true));
    this.updateUp();
};

CTBModeNormal.prototype.getHolderByValue = function (value) {
    return this.dict[(0,utils.keyStringOf)(value)] || null;
};

CTBModeNormal.prototype.setValues = function (values) {
    this.children.forEach(node => node.select(false));
    values.forEach((value) => {
        var holder = this.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) {
    this.level = -1;
    this.selected = 'none';
    this.elt = elt;
    this.$list = this.elt.$list;
    this.children = items.map(item => new this.elt.classes.ItemHolder(elt, this, 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);
    });
};


// EXTERNAL MODULE: ./node_modules/absol-acomp/js/list/ListDictionary.js
var ListDictionary = __webpack_require__(103);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/checktreebox/MCheckTreeBox.js















/***
 * not optimize
 * @param {MCheckTreeBox} elt
 * @constructor
 */
function MCTBItemListController(elt) {
    this.elt = elt;
    this.items = [];
    ListDictionary/* default.call */.Z.call(this, this.items, { depth: true });

}

OOP/* default.mixClass */.ZP.mixClass(MCTBItemListController, ListDictionary/* default */.Z);


MCTBItemListController.prototype.setItems = function (items) {
    items = items || [];
    if (!items.forEach || !items.map) items = [];
    this.items = (0,utils.copySelectionItemArray)(items, { removeNoView: true });
    this.arr = this.items;
    this.update();
};

MCTBItemListController.prototype.update = function () {
    ListDictionary/* default.prototype.update.call */.Z.prototype.update.call(this);
    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 = (0,search/* prepareSearchForList */.Lb)((0,utils.copySelectionItemArray)(this.items));
    this._searchCache = {};
};

MCTBItemListController.prototype.getItems = function () {
    return (0,utils.copySelectionItemArray)(this.items||[]);
};

MCTBItemListController.prototype.makeSearch = function (query) {
    if (this._searchCache[query]) return this._searchCache[query].resetAndGet();
    var searchItem = (0,search/* default */.ZP)({ text: query });

    var minScore = Infinity;
    var maxScore = -Infinity;
    var scoredHolders = this._searchItems.map(function visit(item) {
        var holder = {
            item: item,
            score: (0,search/* calcItemMatchScore */.lk)(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((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[(0,utils.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[(0,utils.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 = (0,utils.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 = (0,ACore.$)('.am-check-tree-item-text', this).firstChild;
    this.$desc = (0,ACore.$)('.am-check-tree-item-desc', this).firstChild;
    this.$iconCtn = (0,ACore.$)('.am-check-tree-item-icon-ctn', this);
    this.$checkbox = (0,ACore.$)('checkboxinput', this)
        .on('change', this.eventHandler.checkboxChange);
    this.addEventListener('click', this.eventHandler.click);

}

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

MCheckTreeItem.render = function () {
    return (0,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', (0,utils.keyStringOf)(this.value))
    if (this._data && this._data.icon) {
        this.$icon = (0,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 ((0,EventEmitter/* hitElement */.EY)(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 = (0,ACore.$)('.am-check-tree-box', this);
    this.$body = (0,ACore.$)('.am-check-tree-box-body', this);
    this.$list = (0,ACore.$)('.am-check-tree-box-list', this);
    this.$chekAll = (0,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 = (0,ACore.$)(Searcher/* default.tag */.Z.tag, this).on('stoptyping', this.eventHandler.searchTextInputModify);
    this.$cancelBtn = (0,ACore.$)('.as-select-list-box-cancel-btn', this)
        .on('click', function () {
            this.emit('cancel', { type: 'cancel', target: this }, this);
        }.bind(this));
    this.$closeBtn = (0,ACore.$)('.as-select-list-box-close-btn', this);
    this.$boxCloseBtn = (0,ACore.$)('.am-dropdown-box-close-btn', this);
    this.on('click', function (event) {
        if (event.target === this || (0,EventEmitter/* hitElement */.EY)(this.$closeBtn, event) || (0,EventEmitter/* hitElement */.EY)(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 (0,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/* default.tag */.Z.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: LanguageSystem/* default.getText */.ZP.getText('txt_check_all') || LanguageSystem/* default.getText */.ZP.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) {
    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(it => new MCTBItemHolder(boxElt, this, it));
        this.hasIcon = this.hasIcon || this.children.some(child => child.hasIcon);
        this.hasDesc = this.hasDesc || this.children.some(child => child.hasDesc);
        this.hasLeaf = this.hasLeaf || this.children.some(child => child.hasLeaf);
        this.hasNoSelect = this.hasNoSelect || this.children.some(child => 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(child => child.getViewElements(ac));
    }
    return ac;
};


Object.defineProperty(MCTBItemHolder.prototype, 'elt', {
    get: function () {
        if (!this._elt) {
            this._elt = (0,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((elt) => {
            elt.remove();
        });
        this.status = this._elt.status;
    }
    else if (this.status === 'close') {
        this.status = this._elt.status;
        viewElements = this.getViewElements();
        viewElements.shift();
        (0,utils.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((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((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 (){
        return this.data;
    }
});
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/selecttreeleafbox/MSTBItemHolder.js





function MSTBItemHolder(boxElt, parent, data) {
    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(item => new MSTBItemHolder(boxElt, this, item));
        this.hasDesc = this.hasDesc || this.children.some(child => child.hasDesc);
        this.hasIcon = this.hasIcon || this.children.some(child => 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 () {
        if (!this._elt) {
            this._elt = (0,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) {
    this.level = -1;
    this.elt = elt;
    this.$list = elt.$list;
    this.children = items.map(item => new selecttreeleafbox_MSTBItemHolder(elt, this, item));
    this.hasDesc = this.hasDesc || this.children.some(child => child.hasDesc);
    this.hasIcon = this.hasIcon || this.children.some(child => child.hasIcon);

    this.dict = this.children.reduce(function visit(ac, child) {
        var key = (0,utils.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(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 () {
    if (!this.selectedHolder) return;
    var visitUp = (node) => {
        var parent = node.parent;
        if (parent !== this) {
            visitUp(parent);
        }
        if (node.status === 'close') {
            node.elt.status = 'open';
            node.ev_statusChange();
        }
    }

    visitUp(this.selectedHolder);
    (0,utils.vScrollIntoView)(this.selectedHolder.elt);
};

STLBModeNormal.prototype.onStop = function () {

};

function STLBModeSearch(elt, items) {
    this.level = -1;
    this.elt = elt;
    this.$list = this.elt.$list;
    this.children = items.map(item => new selecttreeleafbox_MSTBItemHolder(elt, this, item));
    this.dict = this.children.reduce(function visit(ac, child) {
        var key = (0,utils.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[(0,utils.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 = (0,utils.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 = (0,search/* prepareSearchForList */.Lb)((0,utils.copySelectionItemArray)(this.items));
    this._searchCache = {};
};


MSTLBItemListController.prototype.getItems = function () {
    return (0,utils.copySelectionItemArray)(this.items);
};


MSTLBItemListController.prototype.makeSearch = function (query) {
    if (this._searchCache[query]) return this._searchCache[query].resetAndGet();
    var searchItem = (0,search/* default */.ZP)({ text: query });

    var minScore = Infinity;
    var maxScore = -Infinity;
    var scoredHolders = this._searchItems.map(function visit(item) {
        var holder = {
            item: item,
            score: (0,search/* calcItemMatchScore */.lk)(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((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[(0,utils.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[(0,utils.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 = (0,utils.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 (value) {
        if (value) {
            this.$box.addClass('as-enable-search');
        }
        else {
            this.$box.removeClass('as-enable-search');

        }
    },
    get: function () {
        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 = (0,ACore.$)('.am-dropdown-box', this);
    this.$list = (0,ACore.$)('.am-select-tree-leaf-box-list', this);
    this.itemListCtrl = new selecttreeleafbox_MSTLBItemListController(this);
    this.$searchInput = (0,ACore.$)(Searcher/* default.tag */.Z.tag, this).on('stoptyping', this.eventHandler.searchTextInputModify);
    this.$boxCloseBtn = (0,ACore.$)('.am-dropdown-box-close-btn', this);
    this.on('click', function (event) {
        if (event.target === this || (0,EventEmitter/* hitElement */.EY)(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 (0,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/* default.tag */.Z.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 + (0,utils.estimateWidth14)(item.text) + 5 + 7;//margin-text
    if (item.desc) width += 6 + (0,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.findItemByValue = function (value) {
    return  this.modes.normal.getItemByValue(value);
};

MSelectTreeLeafBox.prototype.resetSearchState = checktreebox_MCheckTreeBox.prototype.resetSearchState;

MSelectTreeLeafBox.property = selecttreeleafbox_STLBPropsHandlers;

MSelectTreeLeafBox.property.items = {
    set: function (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 () {
       return this.itemListCtrl.getItems();
    }
};

MSelectTreeLeafBox.property.value = {
    /***
     * @this MSelectTreeLeafBox
     * @param value
     */
    set: function (value) {
        this.pendingValue = value;
        this._value = value;
        this.modes.normal.setValue(this.pendingValue, this.strictValue);

    },
    get: function () {
        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 () {
        return  this.modes.normal.getItemByValue(this.value);
    }
};


MSelectTreeLeafBox.property.strictValue = {
    set: function (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 () {
        return this.$box.hasClass('as-strict-value');
    }
};


MSelectTreeLeafBox.eventHandler = {};

MSelectTreeLeafBox.eventHandler.searchTextInputModify = checktreebox_MCheckTreeBox.eventHandler.searchTextInputModify;


ACore/* default.install */.Z.install(MSelectTreeLeafBox);

/* harmony default export */ const selecttreeleafbox_MSelectTreeLeafBox = (MSelectTreeLeafBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeLeafMenu.js











/***
 * @extends AElement
 * @constructor
 */
function SelectTreeLeafMenu_SelectTreeLeafMenu() {
    this.$selectBox = (0,ACore._)({
        tag: this.mobile ? selecttreeleafbox_MSelectTreeLeafBox : js_SelectTreeLeafBox.tag,
        on: {
            pressitem: this.eventHandler.pressItem,
            preupdateposition: this.eventHandler.preUpdateListPosition,
            close: () => {
                this.isFocus = false;
            }
        }
    });
    this.$selectBox.sponsorElement = this;

    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$selectBox, ['enableSearch', 'selectedItem']);
    this.$holderItem = (0,ACore.$)('selectlistitem', this);
    // this.on('click', this.eventHandler.click.bind(this));
    this.boxCtrl = new STLBoxController(this);
    OOP/* default.drillProperty */.ZP.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#
     */
    /**
     * @name openValue
     * @memberof SelectTreeLeafMenu#
     * */
    /**
     * @name nullValue
     * @memberof SelectTreeLeafMenu#
     * */

}

SelectTreeLeafMenu_SelectTreeLeafMenu.tag = 'SelectTreeLeafMenu'.toLowerCase();

SelectTreeLeafMenu_SelectTreeLeafMenu.render = function () {
    var mobile = BrowserDetector/* default.isMobile */.Z.isMobile;
    return (0,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.findItemByValue = function (value) {
    return this.$selectBox.findItemByValue(value);
};

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 (items) {
        items = (0,utils.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 () {
        return this.$selectBox.items;
    }
};

SelectTreeLeafMenu_SelectTreeLeafMenu.property.value = {
    set: function (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 () {
        return this.$selectBox.value;
    }
};

SelectTreeLeafMenu_SelectTreeLeafMenu.property.strictValue = {
    set: function (value) {
        this.$selectBox.strictValue = !!value;
        if (value) this.addClass('as-strict-value');
        else this.removeClass('as-strict-value');
    },
    get: function () {
        return this.hasClass('as-strict-value');
    }
};

SelectTreeLeafMenu_SelectTreeLeafMenu.property.disabled = SelectMenu2.property.disabled;


SelectTreeLeafMenu_SelectTreeLeafMenu.eventHandler = {};

SelectTreeLeafMenu_SelectTreeLeafMenu.eventHandler.clickOut = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(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 = (0,Dom/* getScreenSize */.tE)();
    var availableTop = bound.top - 5;
    var availableBot = screenSize.height - 5 - bound.bottom;
    this.$selectBox.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
    var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(this);
    if (bound.bottom < outBound.top || bound.top > outBound.bottom || bound.right < outBound.left || bound.left > outBound.right) {
        this.isFocus = false;
    }
};




ACore/* default.install */.Z.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 (value) {
        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('mousedown', this.ev_clickOut);
                this.elt.$selectBox.removeStyle('visibility');
                this.elt.$selectBox.focus();
            }.bind(this), 5);
            if (this.elt.$selectBox.viewToValue
                && (0,utils.keyStringOf)(this.elt.nullValue) === (0,utils.keyStringOf)(this.elt.$selectBox.value)) {
                this.elt.$selectBox.viewToValue(this.elt.openValue);
            }
            else
                this.elt.$selectBox.viewToSelected();
        }
        else {
            this.elt.removeClass('as-focus');
            this.elt.$selectBox.remove();
            document.removeEventListener('mousedown', this.ev_clickOut);
            if (this.elt.mobile) {

            }
            else {
                this.elt.$selectBox.followTarget = null;
            }
            setTimeout(() => {
                this.elt.on('click', this.ev_click);
            }, 100);
            this.elt.$selectBox.resetSearchState();

        }
    },
    get: function () {
        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 (!(0,EventEmitter/* hitElement */.EY)(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() {
    (0,MultiLanguageCSS/* loadLanguageModule */.q)();
    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 = (0,ACore.$)('.as-select-tree-leaf-box-content', this);
    this._savedStatus = {};
    this.estimateSize = { width: 0, height: 0 };
}


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

MultiCheckTreeLeafBox.render = function () {
    return (0,ACore._)({
        tag: Follower/* default */.Z,
        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 = (0,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 = (0,ACore._)({
        tag: ExpTree/* default.tag */.ZP.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 (event) {
            if (MultiCheckTreeLeafBox_isBranchStatus(treeElt.status)) {
                treeElt.status = MultiCheckTreeLeafBox_invertStatus(treeElt.status)
                savedStatus[item.value] = treeElt.status;
                self.updatePosition();
            }
            else if (isLeaf) {
                if (!(0,EventEmitter/* hitElement */.EY)(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 = (0,ACore._)({
            tag: CheckBoxInput/* default.tag */.Z.tag, on: {
                change: function (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 + (0,utils.estimateWidth14)(item.text) + 5 + 7;//margin-text
    if (item.desc) width += 6 + (0,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.prototype.findItemByValue = function (value) {
    var itemElt = this.$itemByValue[value];
    if (!itemElt) return null;
    return itemElt.itemData;
};

MultiCheckTreeLeafBox.property = {};

MultiCheckTreeLeafBox.eventHandler = {};


MultiCheckTreeLeafBox.property.items = {
    /***
     * @this MultiCheckTreeLeafBox
     * @param items
     */
    set: function (items) {
        var self = this;
        this._savedStatus = {};
        this._searchCache = {};
        items = (0,utils.copySelectionItemArray)(items || [], { removeNoView: true });
        this._items = items;
        (0,search/* prepareSearchForList */.Lb)(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 () {
        return this._items;
    }
};

MultiCheckTreeLeafBox.property.values = {
    set: function (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 () {
        return this._values;
    }
};

MultiCheckTreeLeafBox.property.enableSearch = js_SelectListBox.property.enableSearch;

MultiCheckTreeLeafBox.prototype._search = function (query) {
    var self = this;
    var queryItem = (0,search/* default */.ZP)({ text: query });
    var minScore = Infinity;
    var maxScore = -Infinity;

    function makeScoreTree(item) {
        var holder = {
            item: item, score: (0,search/* calcItemMatchScore */.lk)(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();
};


ACore/* default.install */.Z.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() {
    (0,MultiLanguageCSS/* loadLanguageModule */.q)();
    this.$selectBox = (0,ACore._)({
        tag: js_MultiCheckTreeLeafBox.tag,
        on: {
            change: this.eventHandler.selectBoxChange,
            preupdateposition: this.eventHandler.preUpdateListPosition
        }
    });

    this.$selectlistBox = this.$selectBox;

    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$selectBox, 'enableSearch');

    this.on('mousedown', this.eventHandler.click);
    this.$itemCtn = (0,ACore.$)('.as-multi-select-menu-item-ctn', this);
    this.boxCtrl = new STLBoxController(this);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.boxCtrl, 'isFocus');
}

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

MultiCheckTreeLeafMenu.render = function () {
    return (0,ACore._)({
        class: ['as-multi-select-menu', 'as-multi-check-tree-leaf-menu'],
        extendEvent: ['change'],
        attr: {
            tabindex: '1'
        },
        child: [
            {
                attr: {
                    'data-ml-key': 'txt_select_value'
                },
                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 = (0,ACore._)({
        tag: js_SelectBoxItem.tag,
    });

    itemElt.on('close', this.eventHandler.itemPressClose.bind(null, itemElt));

    return itemElt;
};

MultiCheckTreeLeafMenu.prototype.findItemByValue = function (value) {
    return this.$selectBox.findItemByValue(value);
};

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 (items) {
        this.$selectBox.items = items;
        this.addStyle('--select-list-estimate-width', Math.max(145 + 20, this.$selectBox.estimateSize.width) + 'px');
        this._updateSelectedItems();
    },
    get: function () {
        return this.$selectBox.items;
    }
};

MultiCheckTreeLeafMenu.property.values = {
    set: function (values) {
        values = values || [];
        this.pendingValues = values;
        this.$selectBox.values = values;
        this._updateSelectedItems();

    },
    get: function () {
        if ('pendingValues' in this) return this.pendingValues;
        return this.$selectBox.values.slice().filter(value => {
            return !!this.$selectBox.$itemByValue[value];
        });
    }
};


MultiCheckTreeLeafMenu.property.disabled = js_MultiSelectMenu.property.disabled;
MultiCheckTreeLeafMenu.property.readOnly = js_MultiSelectMenu.property.readOnly;

MultiCheckTreeLeafMenu.property.placeholder = {
    set: function (value) {
        if (value) {
            this.$itemCtn.attr('data-placeholder', value + '');
        }
        else {
            this.$itemCtn.attr('data-placeholder', null);
        }
    },
    get: function () {
        return this.$itemCtn.attr('data-placeholder');
    }
};


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

ACore/* default.install */.Z.install(MultiCheckTreeLeafMenu);

/* harmony default export */ const js_MultiCheckTreeLeafMenu = (MultiCheckTreeLeafMenu);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/filelistinput.css
var filelistinput = __webpack_require__(7288);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileListItem.js











/***
 * @extends AElement
 * @constructor
 */
function FileListItem() {
    this.$parent = null;
    this.$icon = (0,ACore.$)('.as-file-list-item-icon', this);
    this.$name = (0,ACore.$)('.as-file-list-item-name', this);
    this.$quickMenuBtn = (0,ACore.$)('.as-file-list-item-quick-btn', this);
    this.$check = (0,ACore.$)('.as-file-list-item-check', this);
    this.value = null;
    this.fileType = null;
    this.fileName = '';
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$check, 'checked');
    this.on('click', this.eventHandler.click);
    QuickMenu/* default.toggleWhenClick */.Z.toggleWhenClick(this.$quickMenuBtn, {
        getMenuProps: () => {
            var list = this.parentElement;
            if (list.disabled) return;
            var self = this;
            var itemElt = this
            var menuItems = [];
            menuItems.push({
                text: LanguageSystem/* default.getText */.ZP.getText('txt_download') || "Download",
                icon: 'span.mdi.mdi-download',
                cmd: 'download'
            });
            if (!list.readOnly) {
                if (itemElt)
                    menuItems.push({
                        text: LanguageSystem/* default.getText */.ZP.getText('txt_delete') || "Delete",
                        icon: 'span.mdi.mdi-delete',
                        cmd: 'delete'
                    });
                menuItems.push(
                    {
                        text: LanguageSystem/* default.getText */.ZP.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 (0,ACore._)({
        class: 'as-file-list-item',
        child: [
            {
                tag: CheckBoxInput/* default */.Z,
                class: 'as-file-list-item-check'
            },
            {
                tag: 'img',
                class: 'as-file-list-item-icon',
                props: {
                    src: MessageInput/* default.iconAssetRoot */.ZP.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 (value) {
        this._fileType = value;
        if (value) {
            if (catalog.indexOf(value) >= 0)
                this.$icon.src = MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/' + value + '.svg';
            else
                this.$icon.src = MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/' + 'blank' + '.svg';
        }
        else {
            this.$icon.src = MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/' + 'blank' + '.svg';
        }
    },
    get: function () {
        return this._fileType;
    }
};

FileListItem.property.fileName = {
    set: function (value) {
        this.$name.firstChild.data = value + '';
    },
    get: function () {
        return this.$name.firstChild.data;
    }
};


FileListItem.property.value = {
    set: function (value) {
        value = value || null;
        var info = (0,utils.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 () {
        return this._value;
    }
};

FileListItem.eventHandler = {};

/***
 * @this FileListItem
 * @param event
 */
FileListItem.eventHandler.click = function (event) {
    if (!(0,EventEmitter/* isMouseLeft */.FQ)(event)) return;
    if ((0,EventEmitter/* hitElement */.EY)(this.$check, event) || (0,EventEmitter/* hitElement */.EY)(this.$quickMenuBtn, event)) return;
    if (this.$parent && this.$parent.showCheck) {
        this.$check.checked = !this.$check.checked;
        this.$check.notifyChange();
    }
};

ACore/* default.install */.Z.install(FileListItem);

/* harmony default export */ const js_FileListItem = (FileListItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FileListInput.js











/***
 * @extends AElement
 * @constructor
 */
function FileListInput() {
    ContextMenu/* default.auto */.Z.auto();
    this.$add = (0,ACore.$)('.as-file-list-input-add', this);
    this.$attachhook = (0,ACore.$)('attachhook', this);
    this.$attachhook.requestUpdateSize = this.updateSize.bind(this);
    this.$attachhook.on('attached', function () {
        ResizeSystem/* default.add */.Z.add(this);
        this.requestUpdateSize();
    });
    this.on('filedrop', this.eventHandler.input_fileDrop);
    this.on('contextmenu', this.eventHandler.itemContext);


    this.$addedFile = (0,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 (0,ACore._)({
        tag: DropZone/* default.tag */.Z.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 = (0,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 (!(0,utils.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 (typeof fileData === 'object') {
        if (fileData.url) file = fileData.url;
    }
    else if (typeof fileData === "string") {
        file = fileData;
    }
    if (file) {
        (0,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 (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 () {
        return (this._files ||[]).slice();
    }
};


FileListInput.property.readOnly = {
    set: function (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 () {
        return this.hasClass('as-read-only');
    }
};

FileListInput.property.droppable = {
    set: function (value) {
        value = !!value;
        if (value) {
            this.addClass('as-droppable');
        }
        else {
            this.removeClass('as-droppable');
        }
        this.$fileItems.forEach(function (fileElt) {
            fileElt.removable = !value;
        });
    },
    get: function () {
        return this.hasClass('as-droppable');
    }
};

FileListInput.property.multiple = {
    set: function (value) {
        this.$addedFile.multiple = !!value;
    },
    get: function () {
        return this.$addedFile.multiple;
    }
};


FileListInput.property.accept = {
    set: function (value) {
        if (!value) value = null;
        this.$addedFile.attr('accept', value + '');
    },
    get: function () {
        return this.$addedFile.attr('accept') || null;
    }
};

FileListInput.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};

FileListInput.property.showCheck = {
    set: function (value) {
        if (value) {
            this.addClass('as-show-check');

        }
        else {
            this.removeClass('as-show-check');
        }
    },
    get: function () {
        return this.hasClass('as-show-check');
    }
};


ACore/* default.install */.Z.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 (0,utils.fileAccept)(accept, file.type) || (0,utils.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: LanguageSystem/* default.getText */.ZP.getText('txt_download') || "Download",
            icon: 'span.mdi.mdi-download',
            cmd: 'download'
        });
    }
    if (!this.readOnly) {
        if (itemElt)
            menuItems.push({
                text: LanguageSystem/* default.getText */.ZP.getText('txt_delete') || "Delete",
                icon: 'span.mdi.mdi-delete',
                cmd: 'delete'
            });
        menuItems.push(
            {
                text: LanguageSystem/* default.getText */.ZP.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__(8563);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DateInYearPicker.js






/***
 * @extends AElement
 * @constructor
 */
function DateInYearPicker() {
    this._month = null;
    this._date = null;
    this.$domSignal = (0,ACore._)('attachhook').addTo(this);
    this.domSignal = new DomSignal/* default */.ZP(this.$domSignal);
    this._setupMonth();
    this._setupDate();
}


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

DateInYearPicker.render = function () {
    return (0,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 = (0,ACore.$)('.as-date-in-year-picker-month-scroller', this)
        .on('scroll', this.eventHandler.monthScroll)
        .once('wheel', this.eventHandler.monthScroll);
    this.$monthUpBtn = (0,ACore.$)('.as-date-in-year-picker-month-btn.as-up', this)
        .on('pointerdown', this.eventHandler.monthPressDown);
    this.$monthDownBtn = (0,ACore.$)('.as-date-in-year-picker-month-btn.as-down', this)
        .on('pointerdown', this.eventHandler.monthPressUp);
    this.$months = (0,ACore.$$)('.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 = (0,ACore.$$)('.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 (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 = (0,datetime.compareDate)((0,datetime.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 () {
        return this._date;
    }
};

DateInYearPicker.property.month = {
    /***
     * @this DateInYearPicker
     * @param value
     */
    set: function (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 = (0,datetime.compareDate)((0,datetime.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 () {
        return this._month;
    }
};


DateInYearPicker.property.value = {
    set: function (value) {
        value = value || {month: null, date: null};
        this.month = value.month;
        this.date = value.date;
    },
    get: function () {
        return {month: this.month, date: this.date};
    }
};

ACore/* default.install */.Z.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 = (0,ACore.$)('.as-time-input-clear-btn', this)
        .on('click', this.clear.bind(this, true));
    this.$input = (0,ACore.$)('input', this);
    this.on('click', this.eventHandler.click);
}

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

DateInYearInput.render = function () {
    return (0,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 = (0,ACore._)({
        tag: js_DateInYearPicker.tag,
        class:'as-dropdown-box-common-style'
    });
    this.share.$follower = (0,ACore._)({
        tag: Follower/* default.tag */.Z.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 = (0,datetime.compareDate)((0,datetime.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(datetime.DATE_TIME_TOKEN_RGX.source, 'g'), function (full) {
            switch (full) {
                case 'dd':
                case 'd':
                    if ((0,utils.isRealNumber)(value.date)) {
                        return (0,utils.zeroPadding)(value.date, full.length);
                    }
                    return full;
                case 'M':
                case 'MM':
                    if ((0,utils.isRealNumber)(value.month)) {
                        return (0,utils.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 (value) {
        value = this._normalizeValue(value);
        this._value = value;
        this._updateValueText();
    },
    get: function () {
        return this._normalizeValue(this._value);
    }
};

DateInYearInput.property.notNull = {
    set: function (value) {
        if (value) {
            this.addClass('as-must-not-null');
        }
        else {
            this.removeClass('as-must-not-null');
        }
    },
    get: function () {
        return this.hasClass('as-must-not-null');
    }
};

DateInYearInput.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
            this.$input.disabled = true;
        }
        else {
            this.removeClass('as-disabled');
            this.$input.disabled = false;
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};


DateInYearInput.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
            this.$input.readOnly = true;
        }
        else {
            this.removeClass('as-read-only');
            this.$input.readOnly = false;
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

/***
 * @memberOf DateInYearInput#
 * @type {{}}
 */
DateInYearInput.eventHandler = {};

/***
 * @this DateInYearInput
 * @param event
 */
DateInYearInput.eventHandler.click = function (event) {
    if (this.readOnly || (0,EventEmitter/* hitElement */.EY)(this.$clearBtn, event)) return;
    this._attachPicker();
};

/***
 * @this DateInYearInput
 * @param event
 */
DateInYearInput.eventHandler.clickOut = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(this.share.$follower, event)) return;
    this._releasePicker();
};

DateInYearInput.eventHandler.pickerChange = function () {
    this._value = this.share.$picker.value;
    this._updateValueText();
};


ACore/* default.install */.Z.install(DateInYearInput);

/* harmony default export */ const js_DateInYearInput = (DateInYearInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dualselectmenu.css
var dualselectmenu = __webpack_require__(9273);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DualSelectBox.js









/***
 * @extends Follower
 * @constructor
 */
function DualSelectBox() {
    this.domSignal = new DelaySignal/* default */.Z();
    this.domSignal.on('scrollIntoSelected', this.scrollIntoSelected.bind(this));
    this._items = [];
    this._value = [null, null];
    this.holderByValue = {};
    this.$lists = (0,ACore.$$)('.as-dual-select-box-list', this);
    this.$searcTextInput = (0,ACore.$)('searchtextinput', this)
        .on('stoptyping', this.eventHandler.searchTextInputModify);

    this.$closeBtn = (0,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 (0,ACore._)({
        tag: Follower/* default.tag */.Z.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: LanguageSystem/* default.getText */.ZP.getText('txt_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 = (0,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 = (0,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 = (0,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 = (0,utils.estimateWidth14)(item.text);
        if (e14 > longestE14) {
            longestItem = item;
            longestE14 = e14;
        }
    }

    var leftTextWidth = longestItem ? (0,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 = (0,utils.estimateWidth14)(subItem.text);
            if (e14 > longestE14) {
                longestItem = subItem;
                longestE14 = e14;
            }
        }
    }
    var rightTextWidth = longestItem ? (0,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 (items) {
        var self = this;
        items = items || [];
        (0,search/* prepareSearchForList */.Lb)(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 () {
        return this._items;
    }
};


DualSelectBox.property.enableSearch = {
    set: function (value) {
        if (value) {
            this.addClass('as-enable-search');
        }
        else {
            this.removeClass('as-enable-search');
        }
    },
    get: function () {
        return this.hasClass('as-enable-search');
    }
};


DualSelectBox.property.strictValue = {
    set: function (value) {
        if (value) {
            this.addClass('as-strict-value');
        }
        else {
            this.removeClass('as-strict-value');
        }
        if (this.cView)
            this.cView.updateViewByValue();
    },
    get: function () {
        return this.hasClass('as-strict-value');
    }
};

DualSelectBox.property.value = {
    /***
     * @this DualSelectBox
     * @param value
     */
    set: function (value) {
        this._value = this._implicit(value);
        if (this.cView) {
            this.cView.updateViewByValue();
            this.cView.toRightList();
        }
        this.scrollIntoSelected();
    },
    get: function () {
        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 = (0,search/* default */.ZP)({ text: text });
    var maxScore = 0;
    var holders = items.map(function (item) {
        var h = {
            item: item,
            itemScore: (0,search/* calcItemMatchScore */.lk)(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 = (0,search/* calcItemMatchScore */.lk)(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);
};


ACore/* default.install */.Z.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 = (0,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 = (0,ACore.$)('.absol-selectlist-item', this);
    this.on('click', this.eventHandler.click);
    OOP/* default.drillProperty */.ZP.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 (0,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((0,ACore._)({
        tag: 'span',
        class:['as-selectlist-item-text', 'absol-selectlist-item-text'],
        child: { text: text }
    }));
};

DualSelectMenu.property = {};

DualSelectMenu.property.selectedItems = {
    get: function () {
        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 (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 () {
        return this.hasClass('as-focus');
    }
}

/****
 * @memberOf DualSelectMenu#
 * @type {{}}
 */
DualSelectMenu.eventHandler = {};

DualSelectMenu.property.items = {
    /***
     * @this DualSelectMenu
     * @param items
     */
    set: function (items) {
        this.$box.items = items;
        this.addStyle('--dual-list-estimate-text-width', this.$box.estimateSize.textWidth + 'px');
        this._updateViewValue();
    },
    get: function () {
        return this.$box.items;
    }
};

DualSelectMenu.property.value = {
    set: function (value) {
        this.$box.value = value;
        this._updateViewValue();
    },
    get: function () {
        return this.$box.value;
    }
};

DualSelectMenu.property.strictValue = {
    set: function (value) {
        this.$box.strictValue = value;
        this._updateViewValue();
    },
    get: function () {
        return this.$box.strictValue;
    }
};


DualSelectMenu.property.format = {
    set: function (value) {
        this._format = value || '$0, $1';
        this._updateViewValue();
    },
    get: function () {
        return this._format;
    }
};

DualSelectMenu.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

DualSelectMenu.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');

        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        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 ((0,EventEmitter/* hitElement */.EY)(this.$box, event)) return;
    this.isFocus = false;
};

/***
 * @this DualSelectMenu
 */
DualSelectMenu.eventHandler.preUpdatePosition = function () {
    var bound = this.getBoundingClientRect();
    var screenSize = (0,Dom/* getScreenSize */.tE)();
    var availableTop = bound.top - 5;
    var availableBot = screenSize.height - 5 - bound.bottom;
    this.$box.addStyle('--max-height', Math.max(availableBot, availableTop) + 'px');
    var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(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;
};

ACore/* default.install */.Z.install(DualSelectMenu);

/* harmony default export */ const js_DualSelectMenu = (DualSelectMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/toclist.css
var toclist = __webpack_require__(5322);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TOCItem.js








/***
 * @extends AElement
 * @constructor
 */
function TOCItem() {
    this.$iconP = null;
    this.$iconCtn = (0,ACore.$)('.as-toc-item-ext-icon-ctn', this);
    this._status = 'none';
    this.$name = (0,ACore.$)('.as-toc-item-name', this);
    this.$nameInput = (0,ACore.$)('.as-toc-item-name-input', this)
        .on('keydown', this.eventHandler.keyDownNameInput)
        .on('paste', this.eventHandler.keyDownNameInput);
    this.$toggleCtn = (0,ACore.$)('.as-toc-item-toggle-ico-ctn', this);
    this._level = 0;
    this.$checkbox = (0,ACore.$)(CheckBoxInput/* default.tag */.Z.tag, this)
        .on('change', this.eventHandler.checkedChange);
    this.$checkbox.disabled = true;
    this.$checkbox.addStyle('display', 'none');
    this.$checkIco = (0,ACore.$)('.as-toc-item-check-ctn .mdi-check', this)
        .addStyle('display', 'none')
        .addStyle('font-size', '18px');

    this.$quickMenuBtn = (0,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 (0,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/* default.tag */.Z.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 (value) {
        if (this.$iconP) {
            this.$iconP.remove();
            this.$iconP = undefined;
        }
        if (value) {
            var newE;
            if (!Dom/* default.isDomNode */.ZP.isDomNode(value)) {
                newE = (0,ACore._)(value);
            }
            this.$iconP = newE;
            this.$iconCtn.addChild(newE);
            this._icon = value;
        }
        else {
            this._icon = undefined;
        }
    },
    get: function () {
        return this._icon;
    }
};


TOCItem.property.status = {
    set: function (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 () {
        return this._status;
    }
};


TOCItem.property.name = {
    set: function (value) {
        this.$name.firstChild.data = value || '';
    },
    get: function () {
        return this.$name.firstChild.data;
    }
};

TOCItem.property.level = {
    set: function (value) {
        this._level = value;
        this.addStyle('--level', value + '');
    },
    get: function () {
        return this._level;
    }
};


TOCItem.property.checked = {
    set: function (value) {
        this.$checkbox.checked = value;
        if (value) {
            this.$checkIco.removeStyle('display');
        }
        else {
            this.$checkIco.addStyle('display', 'none');

        }
    },
    get: function () {
        return this.$checkbox.checked;
    }
};

TOCItem.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};

TOCItem.property.hasQuickMenu = {
    set: function (value) {
        if (value) {
            this.addClass('as-has-quick-menu');
        }
        else {
            this.removeClass('as-has-quick-menu');
        }
    },
    get: function () {
        return this.hasClass('as-has-quick-menu');
    }
};


TOCItem.property.extendClasses = {
    set: function (value) {
        value = value || [];
        if (typeof value === 'string') value = value.trim().split(/\s/).filter(x => !!x);
        if (this._extendClasses) {
            this._extendClasses.forEach(c => this.removeClass(c));
        }
        this._extendClasses = value;
        this._extendClasses.forEach(c => this.addClass(c));
    },
    get: function () {
        return this._extendClasses || [];
    }
};


TOCItem.prototype.rename = function () {
    this.addClass('as-renaming');
    var name = this.name;
    var textWidth = (0,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 = (0,EventEmitter/* copyEvent */.FG)(event, {
                originalEvent: event,
                type: 'renamefinish',
                newName: this.$nameInput.value,
                __promise__: Promise.resolve(true),
                waitFor: function (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', (0,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', (0,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 ((0,EventEmitter/* hitElement */.EY)(this.$checkbox, event) || (0,EventEmitter/* hitElement */.EY)(this.$quickMenuBtn, event)) return;
    var now= Date.now();
    if ((0,EventEmitter/* hitElement */.EY)(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;
    }
};


ACore/* default.install */.Z.install(TOCItem);


/* harmony default export */ const js_TOCItem = (TOCItem);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/tool/BlurTrigger.js
var BlurTrigger = __webpack_require__(9346);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TOCList.js










/***
 * @extends AElement
 * @constructor
 */
function TOCList() {
    this.$searchInput = null;
    this.$body = (0,ACore.$)('.as-toc-list-body', this);
    this.$searching = (0,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 (0,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(() => {
            (0,utils.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 = (0,search/* default */.ZP)({ 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 = (0,search/* searchTreeListByText */.$l)(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 (nodes) {
        this.searchCache = {};
        nodes = nodes || [];
        this.rootController = new TOCVirtualRootController(this, nodes);
        this.rootController.view = this.$body;

        this.applySavedState();
    },
    get: function () {
        return this.rootController.nodes;
    }
};

TOCList.property.searchInput = {
    /***
     * @this TOCList
     */
    set: function (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 () {
        return this.$searchInput;
    }
}


/***
 * @memberOf TOCList#
 * @type {{}}
 */
TOCList.eventHandler = {};


TOCList.eventHandler.pressNode = function (nodeController, event) {
    var newEvent = (0,EventEmitter/* copyEvent */.FG)(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 = QuickMenu/* default.show */.Z.show(nodeController.nodeElt.$quickMenuBtn, menuProps, [3, 4], onSelect, false);
        var blurTrigger = new BlurTrigger/* default */.Z([], 'click', function () {
            QuickMenu/* default.close */.Z.close(token);
        }, 10, 30);
    };
    this.emit('pressnodequickmmenu', newEvent, this);
};

/***
 * @this TOCList
 */
TOCList.eventHandler.searchTextInputModify = function () {
    this.search(this.$searchInput.value);
};


ACore/* default.install */.Z.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) {
                (0,utils.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();
                (0,utils.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);
        (0,utils.addElementAfter)(this.view, controller.getViewElements(), this.view.firstChild);
    }
    return this;
};

TOCVirtualRootController.prototype.updateStatus = noop/* default */.Z;

/***
 * @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 () {
            return this.children[0] || null;
        }
    },
    lastChild: {
        get: function () {
            return this.children[this.children.length - 1] || null;
        }
    },
    view: {
        /***
         * @this TOCVirtualRootController
         * @param view
         */
        set: function (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 () {
            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 = (0,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') {
                (0,utils.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") {
            (0,utils.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 () {
            return this.nodeElt.status;
        },
        set: function (value) {
            if (value === 'open' && this.nodeElt.status === 'close') this.open();
            else if (value === 'close' && this.nodeElt.status === 'open') this.close();
        }
    },
    root: {
        get: function () {
            return this.parent ? this.parent.root : this;
        }
    },
    checked: {
        get: function () {
            return !!this.nodeElt.nodeData.checked;
        },
        set: function (value) {
            this.nodeElt.checked = !!value;
            this.nodeElt.nodeData.checked = !!value;
        }
    },
    name: {
        set: function (value) {
            value = value || '';
            this.nodeElt.name = value;
            this.nodeElt.nodeData.name = value;
        },
        get: function () {
            return this.nodeElt.nodeData.name;
        }
    },
    ident: {
        get: function () {
            return this.nodeElt.nodeData.ident;
        },
        set: function (value) {
            this.nodeElt.nodeData.ident = value;
        }
    },
    nodeData: {
        get: function () {
            return this.nodeElt.nodeData;
        },
        set: function (value) {
            this.nodeElt.nodeData = value;
        }
    },
    parent: {
        get: function () {
            return this.__parent__;
        }
    },
    firstChild: {
        get: function () {
            return this.children[0] || null;
        }
    },
    lastChild: {
        get: function () {
            return this.children[this.children.length - 1] || null;
        }
    },
    activated: {
        get: function () {
            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__(2285);
;// 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.cke_button_icon.cke_button__mdi_dialog_icon {\r\n    background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTIsMkg4VjRIMTZWMkgyMlY4SDIwVjE2SDIyVjIySDE2VjIwSDhWMjJIMlYxNkg0VjhIMlYyTTE2LDhWNkg4VjhINlYxNkg4VjE4SDE2VjE2SDE4VjhIMTZNNCw0VjZINlY0SDRNMTgsNFY2SDIwVjRIMThNNCwxOFYyMEg2VjE4SDRNMTgsMThWMjBIMjBWMThIMThaIiAvPjwvc3ZnPg==');\r\n    background-position: 0 0px;\r\n    background-size: 16px;\r\n}\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.as-ck-widget-mdi {\r\n    display: inline-block;\r\n    width: 1.5em;\r\n    height: 1.5em;\r\n    position: relative;\r\n    vertical-align: baseline;\r\n}\r\n.as-ck-widget-mdi.mdi::before {\r\n    display: block;\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    text-align: center;\r\n    font-size: 1.5em;\r\n    line-height: 1;\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");
// EXTERNAL MODULE: ./node_modules/absol/src/JSMaker/TemplateString.js
var TemplateString = __webpack_require__(369);
;// 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 (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 (editor) {
            if (editor.placeHolderElt) {
                editor.placeHolderElt.emit('command', { command: command, target: editor, type: 'command' });
            }
        }
    });
}

var parserDiv = (0,ACore._)('div');

function explicit(data, placeHolderElt) {
    parserDiv.innerHTML = data;
    (0,ACore.$$)('.as-ck-widget-expression', parserDiv).forEach(function (elt) {
        var text = elt.innerHTML;
        text.replace(/&#0123;/g, '{').replace(/&#0125;/g, '}');
        elt.parentElement.replaceChild((0,ACore._)({ text: text }), elt)
    });
    return parserDiv.innerHTML;
}

function implicit(data, placeHolderElt) {
    var template = TemplateString/* default.parse */.Z.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 (expression) {
            this.editor.insertHtml('<span class="as-ck-widget-expression">&#0123;&#0123; ' + expression.trim() + ' &#0125;&#0125;</span>')
        },
        getSelectedExpression: function () {
            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 = (0,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 (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 (editor) {
            if (editor.placeHolderElt) {
                editor.placeHolderElt.emit('command', { command: VariableExtension_command, target: editor, type: 'command' });
            }
        }
    });
}

var VariableExtension_parserDiv = (0,ACore._)('div');

function VariableExtension_explicit(data, placeHolderElt) {
    VariableExtension_parserDiv.innerHTML = data;
    (0,ACore.$$)('.as-ck-widget-variable', VariableExtension_parserDiv).forEach(function (elt) {
        var text = elt.innerHTML;
        elt.parentElement.replaceChild((0,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 (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 (variable, text) {
            this.editor.insertHtml(this.makeVariableHtml(variable, text));
        },
        getSelectedVariable: function () {
            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 (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 (editor) {
            if (editor.placeHolderElt) {
                editor.placeHolderElt.emit('command', { command: DynamicLinkExtension_command, target: editor, type: 'command' });
            }
        }
    });
}

var DynamicLinkExtension_parserDiv = (0,ACore._)('div');

function DynamicLinkExtension_explicit(data, placeHolderElt) {
    DynamicLinkExtension_parserDiv.innerHTML = data;
    (0,ACore.$$)('.as-ck-widget-dynamic-link', DynamicLinkExtension_parserDiv).forEach(function (elt) {
    });
    return DynamicLinkExtension_parserDiv.innerHTML;
}

function DynamicLinkExtension_implicit(data, placeHolderElt) {
    DynamicLinkExtension_parserDiv.innerHTML = data;
    (0,ACore.$$)('.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 (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 () {
            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 (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/src/AppPattern/Fragment.js + 1 modules
var Fragment = __webpack_require__(4861);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/MessageDialog.js
var MessageDialog = __webpack_require__(3488);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/videourldialog.css
var videourldialog = __webpack_require__(4607);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/videourldialog/videoUtils.js



var videoUrlRules = [
    [
        'youtube',
        /^https:\/\/www.youtube.com\//,
        /[^a-zAZ]v=([^&]+)/,
        o => 'https://www.youtube.com/embed/' + o.videoId
    ],
    [
        'youtube',
        /^https:\/\/www.youtube.com\/embed\//,
        /^https:\/\/www.youtube.com\/embed\/([^&\/]+)/,
        o => o.url,
        o => 'https://www.youtube.com/watch?v=' + o.videoId
    ],
    [
        'vimeo',
        /^https:\/\/vimeo.com\//,
        /vimeo.com\/([0-9A-Za-z_]+)/,
        o => 'https://player.vimeo.com/video/' + o.videoId

    ],
    [
        'dailymotion',
        /^https:\/\/www.dailymotion.com\/video\//,
        /dailymotion\.com\/video\/([0-9A-Za-z_]+)/,
        o => 'https://www.dailymotion.com/embed/video/' + o.videoId
    ],
    [
        'facebook',
        /^https:\/\/www.facebook.com\/watch/,
        /[^a-zAZ]v=([^&]+)/,
        o => 'https://www.facebook.com/plugins/video.php?height=315&width=560&show_text=false&t=0&href=' + encodeURIComponent(o.url),
        o => 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'
    ],
    /********************/
    [
        '*',
        /./,
        /\/([^\/]+)$/,
        o => o.url
    ]
];


function parseVideoUrl(url) {
    url = (url || "").trim();
    var res = {
        url: url
    };

    videoUrlRules.some((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*"([^"]+)/, s => 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*"([^"]+)/, x => 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(res => res.text())
        .then(metaText => {
            if (metaText === 'DOWNLOAD_ERROR') return { error: metaText };
            var lines = metaText.replace(/\n|(>\s*<)/g, '__spliter__').split('__spliter__');
            var res = {};
            lines.forEach(line => {
                metaRules.some(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(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(x => !!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((resolve, reject) => {
        var renderDiv = (0,ACore._)({
            style: {
                position: 'fixed',
                left: 0,
                top: 0,
                overflow: 'hidden',
                'z-index': -1000,
                pointerEvents: 'none',
                visibility: 'hidden'
            }
        }).addTo(document.body);
        var videoElt = (0,ACore._)({
            tag: 'video',
            attr: {
                crossorigin: "anonymous",
                crossOrigin: "anonymous",
                preload: 'metadata',
                src: url
            },
            on: {
                loadeddata: function () {
                    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 = (0,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 () {
                    clearTimeout(timeout);
                    renderDiv.remove();
                    reject();
                }
            }
        });
        renderDiv.addChild(videoElt);
        videoElt.currentTime = 0.1;

        var timeout = setTimeout(() => {
            renderDiv.remove();
            reject();
        }, 5000);
    });
}

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/videourldialog/VideoUrlDialog.js










/***
 * @extends Fragment
 * @constructor
 */
function VideoUrlDialog() {
    Fragment/* default.call */.Z.call(this);
    this.task = null;
    this.pendingResult = null;
    Object.keys(VideoUrlDialog.prototype).filter(key => key.startsWith('ev_')).forEach(key => {
        this[key] = this[key].bind(this);
    });
}

OOP/* default.mixClass */.ZP.mixClass(VideoUrlDialog, Fragment/* default */.Z);

VideoUrlDialog.prototype.cache = {};


VideoUrlDialog.prototype.createView = function () {
    this.$view = (0,ACore._)({
        tag: Modal/* default.tag */.Z.tag,
        class: 'as-video-url-dialog-modal',
        child: {
            tag: MessageDialog/* default.tag */.Z.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 = (0,ACore.$)('.as-video-url-dialog-url', this.$view)
        .on('paste', (event) => {
            setTimeout(this.ev_urlChange.bind(this, event), 100);
        })
        .on('change', this.ev_urlChange)
        .on('keyup', (event) => {
            if (keyTimeout > 0) {
                clearTimeout(keyTimeout);
            }
            keyTimeout = setTimeout(() => {
                keyTimeout = -1;
                this.ev_urlChange(event);
            }, 300);
        });
    this.$dialog = (0,ACore.$)('.as-video-url-dialog', this.$view)
        .on('action', this.ev_action);
    this.$info = (0,ACore.$)('.as-video-url-dialog-video-info', this.$view);
    this.$image = (0,ACore.$)('.as-video-url-dialog-video-image', this.$view);
    this.$width = (0,ACore.$)('.as-video-url-dialog-width', this.$view)
        .on('change', this.ev_widthChange);
    this.$height = (0,ACore.$)('.as-video-url-dialog-height', this.$view)
        .on('change', this.ev_heightChange);
    this.$ratio = (0,ACore.$)('checkbox', this.$view)
        .on('change', this.ev_widthChange);
    this.$actionBtns = (0,ACore.$$)('.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 ((0,utils.isRealNumber)(info.width) && (0,utils.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 ((0,utils.isRealNumber)(info.width) && (0,utils.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 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((result) => {
            if (newUrl !== this._prevUrl) return;
            Object.assign(info, result);
            if (!(0,utils.isNaturalNumber)(result.width)) {
                info.error = "INVALID_VIDEO";
            }
        });
    }
    else {
        sync = getVideoFileHeader(info.url).then(result => {
            if (newUrl !== this._prevUrl) return;
            Object.assign(info, result);
            if (result.error) {
                this.$info.innerHTML = '<span style="color:#ff2c2c">Can not load video!</span>';
            }
        }).then(() => {
            if (newUrl !== this._prevUrl) return;
            if (info.error) return;
            if (info.type.startsWith('video/'))
                return getVideoPreview(info.url)
                    .then(result1 => {
                        if (newUrl !== this._prevUrl) return;
                        Object.assign(info, result1);
                    }, error1 => {
                        info.error = "CAN_NOT_LOAD";
                    });
        });
    }
    sync.then(() => {
        if (newUrl !== this._prevUrl) return;
        this.onInfo(info);
    });
};

/***
 * @param event
 */
VideoUrlDialog.prototype.ev_action = function (event) {
    setTimeout(() => {
        var action = event.action;
        if (action.name === 'cancel') {
            this.cancelCurrentTask()
        }

        var width = parseInt(this.$width.value);
        var height = parseInt(this.$height.value);
        var result = Object.assign({}, this.pendingResult);

        if (!isNaN(width) && !isNaN(height)) {
            result.displayWidth = width;
            result.displayHeight = height;
        }
        else {
            result.displayWidth = 560;
            result.displayHeight = 315;
        }
        result.keepRatio = this.$ratio.checked;
        if (action.name === 'ok') {
            this.resolveCurrentTask(result);
        }
        this.stop();

    }, 100)
};


VideoUrlDialog.prototype.ev_widthChange = function () {
    if (!this.$ratio.checked ||
        !this.pendingResult || !(0,utils.isRealNumber)(this.pendingResult.width) || !(0,utils.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 || !(0,utils.isRealNumber)(this.pendingResult.width) || !(0,utils.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((rs) => {
        var task = {
            resolved: false,
            canceled: false,
            resolve: function (info) {
                if (this.resolved) return;
                this.resolved = true;
                rs(info);
            },
            cancel: function () {
                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)));
// EXTERNAL MODULE: ./node_modules/absol/src/Converter/base64.js
var base64 = __webpack_require__(9959);
;// 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((0,base64.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', (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 (editor) {
            var initInfo;
            var sel = editor.getSelection();
            var elt;
            if (sel) {
                elt = sel.getSelectedElement();
            }

            if (elt) {
                initInfo = getInfoFromCKImage(elt);
            }


            openVideUrlDialog(initInfo).then((result) => {
                var savedInfo = Object.assign({}, result);
                delete savedInfo.image;
                delete savedInfo.embedUrl;
                if (result) {
                    var html = `<img src="${result.image}" data-type="${result.type}" \
                        onload="window.ckeditorVideoInit && window.ckeditorVideoInit(this)"\
                         data-embed-url="${result.embedUrl}"\
                         width="${result.displayWidth}px"  height="${result.displayHeight}px"\
                          data-node-type="video" \
                          data-info="${(0,base64.base64EncodeUnicode)(JSON.stringify(savedInfo))}"
                          
                         >`;
                    editor.insertHtml(html);

                }
            });
        }
    });
}

window.ckeditorVideoInit = function (elt) {
    (0,ACore.$)(elt);
    if (!elt.isDescendantOf(document.body)) return;
    var newElt;
    var type = elt.attr('data-type');
    if (type.startsWith('video/')) {
        newElt = (0,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 = (0,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/MDIPicker.js






/**
 * @extends Follower
 * @constructor
 */
function MDIPicker() {
    this.$searchInput = (0,ACore.$)(Searcher/* default.tag */.Z.tag, this).on('stoptyping', this.eventHandler.searchChange);
    this.cancelWaiting();
    var bodys = (0,ACore.$$)('.as-mdi-picker-body', this);
    this.$body = bodys[0];
    this.$searchResult = bodys[1];
    this.iconItems = [];
    this.$icons = {};
    (0,utils.getMaterialDesignIconNames)().then(iconNames => {
        if (!iconNames) return;
        var row;
        var iconName;
        for (var i = 0; i < iconNames.length; i++) {
            iconName = iconNames[i];
            if (i % 8 === 0)
                row = (0,ACore._)('.as-mdi-picker-row').addTo(this.$body);
            this.$icons[iconName] = (0,ACore._)({
                tag: 'button',
                class: 'as-transparent-button',
                child: 'span.mdi.mdi-' + iconName,
                attr: {
                    'data-icon': iconName,
                    title: iconName
                }
            }).addTo(row);
            this.iconItems.push({ text: iconName, icon: iconName });

        }
        this.updatePosition()
    });
    this.on('click', this.eventHandler.click);
}

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

MDIPicker.render = function () {
    return (0,ACore._)({
        tag: Follower/* default */.Z,
        class: 'as-mdi-picker',
        extendEvent: 'pick',
        child: [
            {
                tag: Searcher/* default */.Z
            },
            {
                class: 'as-mdi-picker-body',
            },
            {
                style: {
                    display: 'none'
                },
                class: 'as-mdi-picker-body',
            }
        ]
    });
};


MDIPicker.prototype.focus = function () {
    this.$searchInput.focus();
};

MDIPicker.eventHandler = {};

/**
 * @this MDIPicker
 */
MDIPicker.eventHandler.searchChange = function () {
    var query = this.$searchInput.value;
    query = query.trim().toLowerCase().replace(/\s+/g, ' ');
    var res, row, i;
    var iconName;
    if (query.length > 0) {
        this.$body.addStyle('display', 'none');
        this.$searchResult.clearChild().removeStyle('display');
        res = (0,search/* searchListByText */.o)(query, this.iconItems);
        for (i = 0; i < res.length; i++) {
            iconName = res[i].text;
            if (i % 8 === 0)
                row = (0,ACore._)('.as-mdi-picker-row').addTo(this.$searchResult);
             (0,ACore._)({
                tag: 'button',
                class: 'as-transparent-button',
                child: 'span.mdi.mdi-' + iconName,
                attr: {
                    'data-icon': iconName,
                    title: iconName
                }
            }).addTo(row);
        }
    }
    else {
        this.$searchResult.addStyle('display', 'none');
        this.$body.removeStyle('display');
    }
};

MDIPicker.eventHandler.click = function (event) {
    var t = event.target;
    while (t) {
        if (t === this) break;
        if (t.hasClass && t.hasClass('as-transparent-button')) {
            this.emit('pick', { icon: t.attr('data-icon') });
        }
        t = t.parentElement;
    }
}


ACore/* default.install */.Z.install(MDIPicker);

/* harmony default export */ const js_MDIPicker = (MDIPicker);

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/MDIExtension.js





var MDIExtension_name = 'mdi';

var MDIExtension_command = 'mdi_dialog';


function MDIExtension_init(editor) {
    editor.widgets.add(MDIExtension_name, {
        button: 'Change MDI icon',
        template: '<span class="mdi"></span>',
        allowedContent: 'span(!as-ck-widget-mdi)',
        requiredContent: 'span(as-ck-widget-mdi)',
        upcast: function (element) {
            return element.name === 'div' && element.hasClass('mdi');
        },

    });

    editor.ui.addButton(MDIExtension_command, {
        label: 'Insert MDI',
        command: MDIExtension_command,
    });

    editor.addCommand(MDIExtension_command, {
        exec: function (editor) {
            var btn = (0,ACore.$)('.cke_button.cke_button__mdi_dialog', editor.container.$);
            if (!btn) return;//unknown error
            var zIndex = (0,utils.findMaxZIndex)(btn) + 2e3;
            var picker = (0,ACore._)({
                tag: js_MDIPicker,
                style: {
                    zIndex: zIndex,
                },
                attr: {
                    tabindex: 1
                },
                on: {
                    pick: (event) => {
                        picker.followTarget = null;
                        picker.selfRemove();
                        editor.insertHtml(`<span class="as-ck-widget-mdi mdi mdi-${event.icon}">&nbsp;</span>`);
                    }
                }
            }).addTo(document.body);
            picker.followTarget = btn;
            setTimeout(() => {
                picker.focus();
            }, 100);
            picker.on('blur', () => {
                setTimeout(() => {
                    if (!document.activeElement || !AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(document.activeElement, picker)) {
                        picker.followTarget = null;
                        picker.selfRemove();
                    }
                }, 200);
            }, true);
        }
    });
}


/* harmony default export */ const MDIExtension = ({
    init: MDIExtension_init,
    name: MDIExtension_name,
    command: MDIExtension_command,
    plugin: {
        init: MDIExtension_init
    }
});
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DynamicCSS.js
var DynamicCSS = __webpack_require__(488);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ckeditor/plugins.js













var ckContentStyleUrl;
var ckPluginInitialized = false;

var CKExtensions = [ExpressionExtension, SimpleTextExtension, VariableExtension, DynamicLinkExtension, ImageFileExtension, VideoExtension, MDIExtension];

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((0,Converter_file.stringToBlob)(styleCode, 'css'));
    ckPluginInitialized = true;
    document.head.appendChild((0,ACore._)('<link rel="stylesheet" href="' + ckContentStyleUrl + '">'));
    if (!CKEDITOR.stylesSet.get('as_styles_set_default')) {
        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((0,DataStructure_Array.arrayUnique)((config.stylesSet || '').trim().split(/\s*,\s*/)))
        .filter(function (c) {
            return !!c;
        }).join(',');
    if (extensions) extensions.push('video');
    if (extensions) extensions.push('mdi');
    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 === 'BASIC') {
        config.toolbar = [
            {
                name: 'basicstyles',
                items: ['Bold', 'Italic', 'Underline', 'TextColor', 'BGColor', 'NumberedList', 'BulletedList',
                    'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock',
                    userImageFileDialog ? 'image_mgn_dialog' : 'Image']
            },
            { name: 'styles', items: ['Format', 'Font', 'FontSize'] },
            {
                name: "paragraph",
                items: ['Paragraph']
            },
            {
                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'] }
        ];
        console.log(config.toolbar)
    }

    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('materialdesignicons') >= 0;
    });
    if (!has) {
        contentsCss.push('https://absol.cf/vendor/materialdesignicons/materialdesignicons.css');
    }

    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 && !config.height) {
        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 = (0,DataStructure_Array.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 (!AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(this.$elt, document.body)) {
        this.stop();
        return;
    }
    this.$toolbar = this.$toolbar || (0,ACore.$)('.cke_top', this.$elt);
    if (!this.$toolbar) return;

    var oBound = (0,Dom/* traceOutBoundingClientRect */.DI)(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







Dom/* default.documentReady.then */.ZP.documentReady.then(function () {
    setTimeout(ckInit, 100);
});

/***
 * @extends AElement
 * @constructor
 */
function CKPlaceholder() {
    ckInit();
    this.$attachhook = (0,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(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 (0,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();
    var config = this.config;
    var width = this.style.width;
    if (width.endsWith('px')) config.width = width;
    var height = this.style.height;
    if (height.endsWith('px')) config.height = height;
    config = ckMakeDefaultConfig(this.config, this.extensions, this);
    this.editor = this.mode === 'replace' ? CKEDITOR.replace(this, config) : CKEDITOR.inline(this, config);
    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 () {
    var width = this.style.width;
    if (width.endsWith('px')) width = parseFloat(width.replace('px'));
    var height = this.style.height;
    if (height.endsWith('px')) height = parseFloat(height.replace('px'));
    if ((0,utils.isRealNumber)(width) && (0,utils.isRealNumber)(height)) {
        this.editor.resize(width, height);
    }
    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 (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 () {
        if (this.isReady) return this._explicit(this.editor.getData());
        return this._pendingData;
    }
};

CKPlaceholder.property.rawData = {
    get: function () {
        if (this.editor) this.editor.getData();
        else return this._implicit(this._pendingData);
    }
};

CKPlaceholder.property.config = {
    set: function (value) {
        if (this.editor) {
            throw  new Error("Can not set config after the CKEditor created");
        }
        this._config = Object.assign(this._makeInitConfig(), value);
    },
    get: function () {
        return this._config;
    }
};

CKPlaceholder.property.extensions = {
    set: function (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 () {
        return this._extensions;
    }
};


CKPlaceholder.property.stickyToolbar = {
    set: function (value) {
        if (value) {
            this.addClass('as-has-sticky-toolbar');
        }
        else {
            return this.removeClass('as-has-sticky-toolbar');
        }
        this.afterReady.then(() => {
            if (this.mode !== 'replace') return;
            if (this.stickyToolbar) {
                if (!this.stickyToolbarCtrl) {
                    this.stickyToolbarCtrl = new ckeditor_CKStickyToolbarController(this);
                }
                this.stickyToolbarCtrl.start();
            }
            else {
                this.editor.container.$.classList.remove('as-has-sticky-toolbar');
                if (this.stickyToolbarCtrl) this.stickyToolbarCtrl.stop();
            }
        });
    },
    get: function () {
        return this.hasClass('as-has-sticky-toolbar');
    }
};

ACore/* default.install */.Z.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);

}

OOP/* default.mixClass */.ZP.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 (0,ACore._)({
        class: 'as-ck-inline-short-text',
        extendEvent: ['editorcreated', 'editorready', 'change', 'command'],
        id: (0,stringGenerate.randomIdent)(8),
        attr: {
            contenteditable: 'true'
        }
    });
};

CKInlineShortText.prototype.mode = 'inline';

CKInlineShortText.prototype._makeInitConfig = function () {
    var config = {
        toolbar: [
            {
                name: 'extension',
                items: (0,DataStructure_Array.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 (value) {
            value = value || [];
            value.push('simple_text')
            value = (0,DataStructure_Array.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 || (0,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 || (0,ACore.$)('#cke_' + this.attr('id'));
    var toolbarElt = this.$toolbarElt;
    if (!toolbarElt) return;
    var bound = this.getBoundingClientRect();
    var toolBound = toolbarElt.getBoundingClientRect();
    var outbound = (0,Dom/* traceOutBoundingClientRect */.DI)(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 (value) {
        this._removeToolbar = !!value;
        if (this.$toolbarElt) {
            if (this._removeToolbar) {
                this.$toolbarElt.addClass('as-hidden');
            }
            else {
                this.$toolbarElt.removeClass('as-hidden');
            }
        }
    },
    get: function () {
        return this._removeToolbar;
    }
};


ACore/* default.install */.Z.install(CKInlineShortText);

/* harmony default export */ const ckeditor_CKInlineShortText = (CKInlineShortText);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/verticaltimeline.css
var verticaltimeline = __webpack_require__(5386);
;// 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 (0,ACore._)({
        class: 'as-vertical-timeline',
        child: []
    });
};

VerticalTimeline.prototype._makeItem = function (item, i) {
    var iconElt = (0,ACore._)('span.mdi.mdi-circle');
    return (0,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 (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 () {

    }
};

VerticalTimeline.property.current = {
    set: function (value) {
        value = (0,utils.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 () {
        return Math.max(-1, Math.min(this._current, this._items.length));
    }
};


ACore/* default.install */.Z.install(VerticalTimeline);
/* harmony default export */ const js_VerticalTimeline = (VerticalTimeline);

// EXTERNAL MODULE: ./node_modules/absol/src/Color/Color.js
var Color_Color = __webpack_require__(257);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/locationinput.css
var locationinput = __webpack_require__(4899);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/XLoader.js
var XLoader = __webpack_require__(9238);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationPicker.js










///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, elt => {
                if ((typeof elt.src === "string") && elt.src.startsWith('https://maps.googleapis.com/maps/api/js')) return jsElt;
            });
            if (jsElt) {
                return new Promise((resolve, reject) => {
                    if (jsElt.readyState) {  //IE
                        jsElt.onreadystatechange = function () {
                            if (jsElt.readyState === "loaded" ||
                                jsElt.readyState === "complete") {
                                jsElt.onreadystatechange = null;
                                resolve();
                            }
                        };
                    }
                    else {  //Others
                        var 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(() => google.maps.importLibrary("marker"))
            .then((mdl) => {
                google.maps.marker = mdl;
                return mdl;
            });

    return googleMarkerLibSync;
}

var googlePlacesLibSync;

function getGooglePlacesLib() {
    if (!googlePlacesLibSync)
        googlePlacesLibSync = getGoogleMapLib()
            .then(() => {
                if (google.maps.places) {

                }
                else {
                    return google.maps.importLibrary("places").then((mdl) => {
                        google.maps.places = 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">
    <circle r="10" cx="12" cy="12"  style="stroke: white; stroke-width: 2px; fill: #1da1ff"></circle>
</svg>`;
    return (0,ACore._)(svgTxt);
}


/***
 * @extends AElement
 * @constructor
 */
function LocationPicker() {
    getGoogleMarkerLib();
    if (BrowserDetector/* default.isMobile */.Z.isMobile) {
        this.addClass('as-mobile');
    }
    this.map = new google.maps.Map(this, {
        mapId: (0,stringGenerate.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 = (0,ACore._)({
        tag: 'button',
        class: 'as-location-picker-control-btn',
        child: 'span.mdi.mdi-crosshairs-gps',
        on: {
            click: this.selectMyLocation.bind(this)
        }
    });

    this.$rightBottomCtn = (0,ACore._)({
        class: 'as-location-picker-control-ctn',
        child: [this.$myLocationBtn],
        style: {
            overflow: 'hidden'
        }
    });


    this.$searchInput = (0,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 = (0,ACore._)({
        class: ['as-location-picker-control-ctn', 'as-top'],
        child: [
            this.$searchInput
        ]
    });

    this.$okBtn = (0,ACore._)({
            tag: FlexiconButton/* default.tag */.Z.tag,
            class: 'primary',
            props: {
                text: 'OK',
                disabled: true
            },
            on: {
                click: this.eventHandler.clickAction.bind(this, 'OK')
            }
        }
    );

    this.$cancelBtn = (0,ACore._)({
            tag: FlexiconButton/* default.tag */.Z.tag,
            class: ['as-location-picker-cancel-btn', 'secondary'],
            props: {
                text: 'CANCEL'
            },
            on: {
                click: this.eventHandler.clickAction.bind(this, 'CANCEL')
            }
        }
    );

    this.$bottomLeftCtn = (0,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 (0,ACore._)({
        class: 'as-location-picker',
        extendEvent: ['action', 'location', 'requestlocation', 'error']
    });
};

LocationPicker.prototype.queryItems = function (query) {
    var latLng = (0,utils.parseDMS)(query) || (0,utils.parseLatLng)(query);
    if (latLng) {
        return new Promise(resolve => {
            this.geocoder.geocode({ location: (0,utils.implicitLatLng)(latLng) }, (results, status) => {
                if (status === google.maps.GeocoderStatus.OK) {
                    results.forEach(it => {
                        it.description = it.formatted_address;
                    });
                    resolve(results); // Returns an array of place predictions
                }
                return resolve([]);
            });
        });
    }

    var request = {
        input: query,
        locationBias: this.map.getBounds()
    };
    return new Promise( (resolve)=> {
        this.autoCompleteService.getPlacePredictions(request, function (results, status) {
            if (status === google.maps.places.PlacesServiceStatus.OK) {
                resolve(results);
            }
            else
                resolve([]);
        });
    });
};

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 (0,utils.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) {
    if (arguments.length === 1) panTo = true;
    return getGoogleMarkerLib().then(() => {
        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(() => {
                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) {
    if (arguments.length === 1) panTo = true;
    return new Promise((resolve) => {
        this.placeService.getDetails({
            placeId: placeId,
            fields: ["name", "formatted_address", "place_id", "geometry"]
        }, (place, status) => {
            if (
                status === google.maps.places.PlacesServiceStatus.OK &&
                place &&
                place.geometry &&
                place.geometry.location
            ) {
                this.selectPlace(place, panTo).then(() => {
                    resolve(true);
                });
            }
            else {
                resolve(false);
            }
        });
    })
};

/***
 *
 * @param latLng
 * @param {boolean=} panTo
 */
LocationPicker.prototype.selectLocation = function (latLng, panTo) {
    if (arguments.length === 1) panTo = true;

    if (arguments.length === 1) panTo = true;

    return getGoogleMarkerLib().then(() => {
        if (this.selectedMarker) {
            this.selectedMarker.setMap(null);
        }
        this.$okBtn.disabled = !latLng;
        this.selectedPlace = null;
        if (!latLng) return;
        this.selectedPlace = { geometry: { location: latLng } };

        var zoom = 18;
        if (panTo) {
            this.map.setZoom(zoom);
            setTimeout(() => {
                this.map.panTo(latLng);
            }, 100)
        }


        this.selectedMarker = new google.maps.marker.AdvancedMarkerElement({
            map: this.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) {
    return getGoogleMarkerLib().then(() => {
        if (this.myLocationMarker) return;

        this.accuracyCircle = new google.maps.Circle({
            strokeColor: "#1988c3",
            strokeOpacity: 0.4,
            strokeWeight: 2,
            fillColor: "#1988c3",
            fillOpacity: 0.2,
            radius: 100,
            map: this.map,
            clickable: false
        });

        this.accuracyCircle.setEditable(false);

        this.myLocationMarker = new google.maps.marker.AdvancedMarkerElement({
            position: location,
            title: "My Location",
            // sName: "My Location",
            map: this.map,
            content: createMyLocationMarkerContent()
        });

        if (position && position.coords) {
            this.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(this), function () {
            }, {
                enableHighAccuracy: false,
                timeout: 5000,
                maximumAge: 0
            });

        }
    })


}


LocationPicker.prototype.selectMyLocation = function () {
    var id = (0,stringGenerate.randomIdent)();
    this.emit('requestlocation', { id: id });
    if (navigator.geolocation) {
        var to = setTimeout(() => {
            this.emit('error', Object.assign(new Error("GPS không phản hồi!"), { id: id }));
        }, 10000);
        navigator.geolocation.getCurrentPosition((position) => {
            clearTimeout(to);
            var location = null;
            if (position && position.coords) {
                this.emit('location', { location: position.coords, id: id });
                location = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
            }

            if (location) {
                this.watchMyLocation(location, position);
                if (!this.readOnly)
                    this.selectLocation(location);
                else {
                    this.map.setCenter(location)
                }
            }

        }, (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 });
            this.emit('error', err);
        }, { maximumAge: Infinity });
    }
};

LocationPicker.property = {};


LocationPicker.property.zoom = {
    set: function (value) {
        if (!(0,utils.isRealNumber)(value)) {
            value = 1;
        }
        this.map.setZoom(value);
    },
    get: function () {
        return this.map.getZoom();
    }
};


LocationPicker.property.center = {
    set: function (value) {
        value = value || null;
        var latlng = null;
        if (value instanceof google.maps.LatLng) {
            latlng = value;
        }
        else if (value && (0,utils.isRealNumber)(value.latitude) && (0,utils.isRealNumber)(value.longitude)) {
            latlng = new google.maps.LatLng(value.latitude, value.longitude);
        }
        else if ((value instanceof Array) && (0,utils.isRealNumber)(value[0]) && (0,utils.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 () {
        return this.map.getCenter();
    }
};

LocationPicker.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        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);
};


ACore/* default.install */.Z.install(LocationPicker);

/* harmony default export */ const js_LocationPicker = (LocationPicker);
;// 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 = Color_Color/* default.parse */.Z.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 Color_Color/* default */.Z([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;
}

function distanceInPixels(zoom, latLng1, latLng2) {
    // Calculate the geographical distance in meters
    var R = 6371000; // Earth's radius in meters
    var lat1 = latLng1.lat() * Math.PI / 180;
    var lat2 = latLng2.lat() * Math.PI / 180;
    var deltaLat = (latLng2.lat() - latLng1.lat()) * Math.PI / 180;
    var deltaLng = (latLng2.lng() - latLng1.lng()) * Math.PI / 180;

    var a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
        Math.cos(lat1) * Math.cos(lat2) *
        Math.sin(deltaLng / 2) * Math.sin(deltaLng / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    var distanceInMeters = R * c;


    // Calculate the resolution (meters per pixel)
    var scale = 156543.03392 * Math.cos(lat1) / Math.pow(2, zoom);

    // Convert meters to pixels
    return distanceInMeters / scale;

}

// 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 || (0,stringGenerate.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 (0,utils.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.template = (0,ACore._)({
        style: {
            position: 'relative',
        },
        child: {
            tag: 'div',
            style: {
                width: `${MARKER_RADIUS * 2}px`,
                height: `${MARKER_RADIUS * 2}px`,
                position: 'absolute',
                top: `${-MARKER_RADIUS}px`,
                left: `${-MARKER_RADIUS}px`,
                borderRadius: '50%',
                backgroundColor: this.polylineData.strokeColor,
                border: `2px solid ${MARKER_BORDER_COLOR}`,
                boxSizing: 'border-box',
            }
        }
    });
    this.markers = this.polylineData.path.map(function (crd, i) {
        var anchor = this.template.cloneNode(true);
        var mkr = new google.maps.marker.AdvancedMarkerElement({
            position: crd,
            map: this.map,
            content: anchor,
        });


        var infoWindow;
        if (data.path[i] && data.path[i].info) {
            infoWindow = new google.maps.InfoWindow(data.path[i].info);
            anchor.addEventListener('mouseover', function () {
                if (lastOpenInfo === infoWindow) return;
                try {
                    if (lastOpenInfo) lastOpenInfo.close();
                } catch (e) {

                }

                lastOpenInfo = infoWindow;
                infoWindow.open({
                    anchor: mkr,
                    map: this.map,
                    shouldFocus: true
                });
            })
        }
        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 (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 () {
        return this._showRoute;
    }
});

Object.defineProperty(LVPolyline.prototype, 'color', {
    get: function () {
        return this.polylineData.strokeColor;
    }
});

Object.defineProperty(LVPolyline.prototype, 'sumDistance', {
    get: function () {
        var res = 0;
        var path = this.polylineData.path;
        for (var i = 1; i < path.length; ++i) {
            res += (0,utils.latLngDistance)(path[i - 1], path[i]);
        }
        return res;
    }
});


function LVPoints(viewerElt, data) {
    this.data = data;
    this.refData = [data];
    this.id = data.id || (0,stringGenerate.randomIdent)(12);
    this.latLng = (0,utils.implicitLatLng)(data);
    if (!this.latLng) {
        console.error('Invalid data', data);
        return;
    }
    this.map = viewerElt.map;
    this.viewNumber = 0;


}

LVPoints.prototype.numberToHue = function (number) {
    var res = 0;

    var hs = 1;
    for (var i = 0; (i < 4 && number > 1); ++i) {
        hs *= 10;
        res += Math.log(Math.min(number, hs)) / Math.log(hs) * 0.25;
        number -= hs;
    }

    res = Math.min(0.8, res);
    return res;
};

LVPoints.prototype.number2Image = function (number) {
    var data = this.data;
    var color = number === 1 ? data.color || generateColor(this.id).toString() : Color_Color/* default.fromHSL */.Z.fromHSL(this.numberToHue(number), 1, 0.5).toString();
    try {
        color = Color_Color/* default.parse */.Z.parse(color);
    } catch (e) {
        color = number === 1 ? generateColor(this.id) : Color_Color/* default.fromHSL */.Z.fromHSL(this.numberToHue(number), 1, 0.4)
    }
    var textColor = color.getContrastYIQ().toString('hex8');
    color = color.toString('hex8');

    var outLineCount;
    var radius;
    if (number <= 1) {
        outLineCount = 0;
        radius = 10;
    }
    else {
        outLineCount = ((number + '').length);
        radius = 5 + outLineCount * 2;

    }
    var canvasSize = 2 * (radius + 5 * outLineCount + 2);

    var res = {
        tag: 'svg',
        style: {
            position: 'absolute',
            top: '50%',
            left: '50%',
            transform: 'translate(-50%, -50%)',
            cursor: 'pointer'
        },
        attr: {
            width: canvasSize + '',
            height: canvasSize + '',
            viewBox: [-canvasSize / 2, -canvasSize / 2, canvasSize, canvasSize].join(' ')
        },
        child: [
            {
                tag: 'circle',
                attr: {
                    cx: 0,
                    cy: 0,
                    r: radius,
                },
                style: {
                    fill: color,
                    stroke: number === 1 ? 'white' : 'none',
                    'stroke-width': number === 1 ? 4 : 0,
                }
            }
        ]
    };

    var path, r;
    var j, sAngle, eAngle;
    var angle;
    var delta = 2 * Math.PI / 5;
    for (var i = 0; i < outLineCount; ++i) {
        angle = -Math.PI / 2 - delta / 2;
        r = radius + 3 + i * 5;
        path = '';
        for (j = 0; j < 5; ++j) {
            angle += delta;
            sAngle = angle + 0.1;
            eAngle = angle + delta - 0.1;
            path += ['M', Math.cos(sAngle) * r, Math.sin(sAngle) * r].join(' ') + ' ';
            path += ['A', r, r, 0, 0, 1, Math.cos(eAngle) * r, Math.sin(eAngle) * r].join(' ') + ' ';
        }
        res.child.push({
            tag: 'path',
            style: {
                fill: 'none',
                stroke: color,
                'stroke-width': 4
            },
            attr: {
                d: path,
                opacity: 0.5 - 0.5 * i / outLineCount,
            },
        });
    }


    if (number > 1) {
        res.child.push({
            tag: 'text',
            attr: {
                x: 0,
                y: 0,
                'dominant-baseline': 'middle',
                'text-anchor': 'middle',
                fill: textColor,
                'font-size': 10,
                'font-weight': 'bold'
            },
            child: {
                text: number + ''
            }
        })
    }


    return Svg/* default.ShareInstance._ */.ZP.ShareInstance._(res);
};

/**
 *
 * @param {number} number - <0: not show>
 */
LVPoints.prototype.view = function (number) {
    if (!(0,utils.isRealNumber)(number)) number = 0;
    number = Math.max(0, Math.floor(number));
    if (this.viewNumber === number) return;
    this.viewNumber = number;
    var data = this.data;
    if (this.marker) {
        this.marker.setMap(null);
        this.marker = null;
        this.content = null;
    }
    if (number <= 0) return;


    this.content = this.number2Image(number);

    this.marker = new google.maps.marker.AdvancedMarkerElement({
        position: this.latLng,
        map: this.map,
        content: this.content,
    });

    this.marker.getMap = this.marker.getMap || (function () {
        return this.map;
    });


    this.marker.getPosition = () => {
        return this.latLng;
    }
    this.marker.setMap(this.map);

    if (number === 1) {
        if (this.data.info && !this.infoWindow) {
            this.infoWindow = new google.maps.InfoWindow(this.data.info);
        }

        if (this.infoWindow ) {
            this.content.on('mouseover', () => {
                if (lastOpenInfo === this.infoWindow) return;
                try {
                    if (lastOpenInfo) lastOpenInfo.close();
                } catch (e) {

                }

                lastOpenInfo = this.infoWindow;
                this.infoWindow.open({
                    anchor: this.marker,
                    map: this.map,
                    shouldFocus: true
                });
            })
        }

    }
    else if (number >1) {
        this.content.on('click', ()=>{
            this.map.setCenter(this.latLng);
            this.map.setZoom(this.map.getZoom()+1);
        })
    }
}


LVPoints.prototype.remove = function () {
    if (this.marker)
        this.marker.setMap(null);
    this.content = null;
    this.marker = null;
    this.infoWindow = null;

}


/**
 *
 * @param {LocationView} lvElt
 * @param {LVPoints[]} points
 * @constructor
 */
function LVCluster(lvElt, points) {
    this.lvElt = lvElt;
    this.points = points;
    /**
     *
     * @type {Object<string, LVPoints>}
     */
    this.pointDict = this.points.reduce((ac, cr) => {
        ac[cr.id] = cr;
        return ac;
    }, {})

    this.viewingPoints = {};
    this.map = lvElt.map;
    this.zoom = this.map.getZoom();
    this.bounds = this.map.getBounds();
    this.idleTO = -1;
    this.onIdle = this.onIdle.bind(this);
}


LVCluster.prototype.onProcessed = function () {
    if (this.idleTO >= 0) {
        clearTimeout(this.idleTO);
    }
    this.idleTO = setTimeout(this.onIdle, 500);
};

LVCluster.prototype.onIdle = function () {
    this.idleTO = -1;
    this.bounds = this.map.getBounds();
    this.zoom = this.map.getZoom();
    if (!this.bounds) return;
    var newViewPoints = this.points.reduce((ac, point) => {
        if (!this.bounds.contains(point.latLng)) return ac;
        var rPoint;
        for (var rId in ac) {
            rPoint = this.pointDict[rId];
            if (distanceInPixels(this.zoom, rPoint.latLng, point.latLng) < 50) {
                ac[rId]++;
                return ac;
            }
        }
        ac[point.id] = 1;
        return ac;
    }, {});

    var id;
    var oldViewPoints = this.viewingPoints;
    for (id in oldViewPoints) {
        if (!newViewPoints[id]) {
            if (this.pointDict[id]) {
                this.pointDict[id].view(0);
            }
        }
    }

    for (id in newViewPoints) {
        if (this.pointDict[id]) {
            this.pointDict[id].view(newViewPoints[id]);
        }
    }
    this.viewingPoints = newViewPoints;
};


/***
 * @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,
        mapId: (0,stringGenerate.randomIdent)()
    });
    google.maps.event.addListener(this.map, "zoom_changed", this.eventHandler.mapZoomChanged);
    google.maps.event.addListener(this.map, 'bounds_changed', this.eventHandler.mapBoundsChanged);

    this.marker = null;
    this._value = null;
    this.$domSignal = (0,ACore._)('attachhook').addTo(this);
    this.domSignal = new DomSignal/* default */.ZP(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 (0,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 (value) {
        if (!(0,utils.isRealNumber)(value)) {
            value = 1;
        }
        this.map.setZoom(value);
    },
    get: function () {
        return this.map.getZoom();
    }
};


LocationView.property.value = {
    set: function (value) {
        value = value || null;
        var latlng = (0,utils.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;
        getGoogleMarkerLib().then(() => {
            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 () {
        return this._value;
    }
};

LocationView.property.polylines = {
    set: function (polylines) {
        this._polylines = polylines || [];
        this.$polylines.forEach(function (pll) {
            pll.remove();
        });

        getGoogleMarkerLib().then(() => {
            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 = (0,utils.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 () {
        return this._polylines;
    }
};

LocationView.property.showPolylineRoute = {
    set: function (value) {
        this._showPolylineRoute = !!value;
        this.$polylines.forEach(function (pll) {
            pll.showRoute = value;
        })
    },
    /**
     * @this LocationView
     * @returns {*|boolean}
     */
    get: function () {
        return this._showPolylineRoute;
    }
};


LocationView.property.points = {
    /**
     * @this LocationView
     * @param points
     */
    set: function (points) {
        this.$points.forEach(function (point) {
            point.remove();
        });
        this._points = points || [];

        getGoogleMarkerLib().then(() => {
            var now = Date.now();
            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());


            this.pointsCluster = new LVCluster(this, this.$points);
            console.log('set points', Date.now() - now);

            this.domSignal.once('update_view', function () {
                if (points.length > 1) {
                    zoom = (0,utils.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);
                if (this.pointsCluster) this.pointsCluster.onProcessed();
            }.bind(this), 100);
            this.domSignal.emit('update_view');
        });
    },
    get: function () {
        return this._points;
    }
}

LocationView.eventHandler = {};

LocationView.eventHandler.mapZoomChanged = function () {
    if (this.pointsCluster)
        this.pointsCluster.onProcessed();
    // var now = Date.now();
    // var eltRect = Rectangle.fromClientRect(this.getBoundingClientRect());
    // var bounds = this.map.getBounds();
    // // var mapRect = new Rectangle()
    //
    // console.log('zoom changed', Date.now() - now);

};

LocationView.eventHandler.mapBoundsChanged = function () {
    if (this.pointsCluster)
        this.pointsCluster.onProcessed();
};


ACore/* default.install */.Z.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__(8677);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PlaceSearchAutoCompleteInput.js





/***
 * @extends AutoCompleteInput
 * @constructor
 */
function PlaceSearchAutoCompleteInput() {
    this.$service = (0,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 (0,ACore._)({
        tag: js_AutoCompleteInput.tag
    }, true);
}

ACore/* default.install */.Z.install(PlaceSearchAutoCompleteInput);

/* harmony default export */ const js_PlaceSearchAutoCompleteInput = (PlaceSearchAutoCompleteInput);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/LocationInput.js






function LocationInput() {
    this.$text = (0,ACore.$)('input', this)
        .on('change', this.eventHandler.textChange);
    this.$iconCtn = (0,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 (0,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 = (0,ACore._)({
        tag: js_LocationPicker.tag
    });
    this.share.$modal = (0,ACore._)({
        tag: 'modal',
        class: 'as-location-input-modal',
        child: {
            class: 'as-location-input-modal-window',
            child: this.share.$picker
        }
    });
    if (BrowserDetector/* default.isMobile */.Z.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 (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 && 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 ((0,utils.isRealNumber)(lat) && (0,utils.isRealNumber)(lng)) {
            this.$text.value = [lat, lng].join(', ');
        }
        else {
            this.$text.value = '';
        }
    },
    get: function () {
        var text = this.$text.value;
        return (0,utils.normalizeLatLngString)(text);
    }
};

LocationInput.property.latLng = {
    get: function () {
        var text = this.$text.value;
        return  (0,utils.parseDMS)(text) || (0,utils.parseLatLng)(text);
    }
};

LocationInput.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
        this.$text.readOnly = !!value;
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

LocationInput.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
        this.$text.disabled = !!value;
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};

ACore/* default.install */.Z.install(LocationInput);

/* harmony default export */ const js_LocationInput = (LocationInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mknavigator.css
var mknavigator = __webpack_require__(9907);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MKNavigatorItem.js







/***
 * @extends AElement
 * @constructor
 */
function MKNavigatorItem() {
    this._data = [];
    this.$text = (0,ACore.$)('.mk-nav-item-text', this);
    this.$switchCtn = (0,ACore.$)('.mk-nav-item-switch-ctn', this);
    this.$switch = (0,ACore.$)('switch', this)
        .on('change', this.eventHandler.switchChange);
    this.$dragzone = (0,ACore.$)('.mk-nav-item-drag-zone', this);
    this.on('click', this.eventHandler.click);
}

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

MKNavigatorItem.render = function () {
    return (0,ACore._)({
        tag: Board/* default.tag */.Z.tag,
        class: 'mk-nav-item',
        extendEvent: ['checkedchange', 'press'],
        child: [
            {
                class: ['mk-nav-item-drag-zone', BoardTable/* default.DRAG_ZONE_CLASS_NAME */.ZP.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 (data) {
        data = data || {};
        this._data = data;
        this.updateText();
        this.updateChecked();
        this.updateDraggable();
    },
    get: function () {
        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 ((0,EventEmitter/* hitElement */.EY)(this.$switch, event) || (0,EventEmitter/* hitElement */.EY)(this.$dragzone, event)) return;
    this.emit('press', { type: 'press', target: this, originalEvent: event }, this);
}

ACore/* default.install */.Z.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 = (0,ACore.$)('.mk-nav-header', this);
    this.$body = (0,ACore.$)('.mk-nav-body', this)
        .on('orderchange', this.eventHandler.bodyOrderChange)
        .on('dragitemstart', this.eventHandler.dragItemStart);
    this.$footer = (0,ACore.$)('.mk-nav-footer', this);
    this.on('press', (event, sender) => {
        this.emit('clickitem', event, sender);
    });
    /***
     * @type {MKNavigatorItemData[]}
     * @name item
     * @memberOf MKNavigator#
     */

    /***
     * @type {number[]}
     * @name order
     * @memberOf MKNavigator#
     */

}

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

MKNavigator.render = function () {
    return (0,ACore._)({
        class: 'mk-nav',
        extendEvent: ['orderchange', 'checkedchange', 'press', 'clickitem'],
        child: [
            {
                class: 'mk-nav-header'
            },
            {
                tag: BoardTable/* default.tag */.ZP.tag,
                class: 'mk-nav-body'
            },
            {
                class: 'mk-nav-footer'
            }
        ]
    });
};

MKNavigator.prototype.updateValue = function () {
    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(value => !this.$itemByValue[value].hasClass('as-hidden')).indexOf(value);

    if (idx >= 0) {
        this.addStyle('--mk-nav-line-top', `calc(${2 * idx}em + ${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 (0,ACore._)({
        tag: js_MKNavigatorItem.tag,
        attr: {
            "data-value": data && data.value
        },
        props: {
            data: data
        },
        on: {
            checkedchange: function (event) {
                self.emit('checkedchange', {
                    type: 'checkedchange',
                    target: this,
                    originalEvent: event.originalEvent,
                    itemData: data,
                    checked: data.checked
                }, self);
            },
            press: function (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 hiddenDict = this._hiddenValues.reduce((ac, x) => {
        ac[x] = true;
        return ac;
    }, {})
    Object.keys(this.$itemByValue).forEach(value => {
        if (hiddenDict[value]) {
            this.$itemByValue[value].addClass('as-hidden');
        }
        else {
            this.$itemByValue[value].removeClass('as-hidden');
        }
    });
};

MKNavigator.property = {};

MKNavigator.property.items = {
    /***
     * @this MKNavigator
     * @param items
     */
    set: function (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;
        var maxTextWidth = items.reduce((ac, it) => {
            var tw = (0,utils.measureText)(it.text || '').width;
            return Math.max(ac, tw);
        }, 0);
        this.addStyle('--max-text-width', Math.ceil(maxTextWidth) + 'px');

        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 () {
        return this._items;
    }
};


MKNavigator.property.order = {
    get: function () {
        return (0,ACore.$$)(js_MKNavigatorItem.tag, this).map(function (e) {
            return e.data.value;
        });
    }
};


MKNavigator.property.value = {
    set: function (value) {
        this._value = value;
        this.updateValue();
    },
    get: function () {
        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 (values) {
        values = values || [];
        if (!(values instanceof Array)) values = [];
        this._hiddenValues = values;
        this._updateHiddenValues();
        this.updateValue();
    },
    get: function () {
        return this._hiddenValues;
    }

}


/***
 * @memberOf MKNavigator#
 * @type {{}}
 */
MKNavigator.eventHandler = {};

MKNavigator.eventHandler.bodyOrderChange = function (event) {
    this.updateValue();
    this._items.splice(0, this._items.length);
    (0,ACore.$$)(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');
}


ACore/* default.install */.Z.install(MKNavigator);
ACore/* default.install */.Z.install('mknav',MKNavigator);


/* harmony default export */ const js_MKNavigator = (MKNavigator);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/processlbar.css
var processlbar = __webpack_require__(4715);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProcessLBar.js




/***
 * @extends AElement
 * @constructor
 */
function ProcessLBar() {
    this.$stepCtn = (0,ACore.$)('.as-process-l-bar-step-ctn', this);
    this.$stepName = (0,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 (0,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((0,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, (0,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((0,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 = (0,ACore._)({
        class: 'as-process-l-bar-step',
        attr: {
            title: item.name
        },
        props: {
            itemData: item
        },
        on: {
            click: function (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 (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 () {
        return this._items;
    }
};


ProcessLBar.property.value = {
    set: function (value) {
        this._value = value;
        this._updateValue();
    },
    get: function () {
        return this._value;
    }
};

ProcessLBar.property.lHeight = {
    set: function (value) {
        this._lHeight = value;
        if (value === 1){
            this.addClass('as-single-line');
        }
        else {
            this.removeClass('as-single-line');
        }
        this._updateCol();
    },
    get: function () {
        return this._lHeight;
    }
};

ProcessLBar.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        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__(5021);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/KVCommentItem.js






/***
 * @extends AElement
 * @constructor
 */
function KVCommentItem() {
    this._time = new Date();
    this._text = '';
    this.$text = (0,ACore.$)('.kv-comment-item-text', this);
    this.$time = (0,ACore.$)('.kv-comment-item-time', this);
    this.$avatar = (0,ACore.$)('.kv-comment-avatar', this);
    this.quickmenu = null;
    this.on('contextmenu', this.eventHandler.kv_contextmenu)
    ContextMenu/* default.auto */.Z.auto();
}

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


KVCommentItem.render = function () {
    return (0,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: (0,datetime.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 (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((0,ACore._)(value));
        }
        this._text = value;
    },
    get: function () {
        return this._text;
    }
}

KVCommentItem.property.unread = {
    set: function (value) {
        if (value) {
            this.addClass('as-unread');
        }
        else {
            this.removeClass('as-unread');
        }
    },
    get: function () {
        return this.hasClass('as-unread');
    }
};

KVCommentItem.property.time = {
    set: function (value) {
        this._time = value;
        var text = '';
        if (typeof value === 'string') text = value;
        else if (value instanceof Date){
            text = (0,datetime.formatDateTime)(value, 'dd/MM/yyyy HH:mm')
        }
        this.$time.firstChild.data =  text;
    },
    get: function () {
        return this._time;
    }
};

KVCommentItem.property.avatar = {
    set: function (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 (){
       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 =  (0,utils.cleanMenuItemProperty)(event.menuItem);
            if (this.quickmenu.onSelect){
                this.quickmenu.onSelect.call(this, menuItem);
            }
        }.bind(this))
    }
};

ACore/* default.install */.Z.install(KVCommentItem);

/* harmony default export */ const js_KVCommentItem = (KVCommentItem);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTHeadCell.js






var 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(k => !!k).map(k => 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;


    if (data.attr) {
        Object.keys(data.attr).forEach(key => {
            var key2 = key.toLowerCase();
            if (key2 !== key) data.attr[key2] = data.attr[key];
        })
    }

    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(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 (value) {
        this._idx = value;
        this.elt.attr('data-col-idx', value + '');
        this.makeAutoSortAttribute();
    },
    get: function () {
        return this._idx;
    }
});

DTHeadCell.prototype.nextSortState = function (event) {
    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) {
        (0,ACore.$$)('th', this.row.elt).forEach(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(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 = (0,ACore._)({
            tag: 'vmenu',
            props: {
                items: items
            }, on: {
                press: event => {
                    var value = event.menuItem.value;
                    (0,ACore.$$)('th', this.row.elt).forEach(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 = (0,ACore._)({
            tag: Follower/* default */.Z,
            class: 'absol-context-menu-anchor',
            style: {
                zIndex: (0,utils.findMaxZIndex)(sortBtn) + 22
            },
            child: [
                menuElt
            ],
            props: {
                followTarget: sortBtn
            }
        }).addTo(document.body);
        var finish = () => {
            document.removeEventListener('click', finish);
            followerElt.remove();
        }
        setTimeout(() => {
            followerElt.addStyle('visibility', 'visible').addStyle('opacity', 1);

        }, 5)

    }

};

DTHeadCell.prototype.updateCopyContent = function () {
    var makeCopyChildren = () => Array.prototype.map.call(this._elt.childNodes, elt => elt.cloneNode(true));
    if (this._copyElt1) {
        this._copyElt1.clearChild().addChild(makeCopyChildren());

    }
    if (this._copyElt2) {
        this._copyElt2.clearChild().addChild(makeCopyChildren());
    }
    if (this._copyElt) {
        this._copyElt.clearChild().addChild(makeCopyChildren());
    }
    ResizeSystem/* default.updateUp */.Z.updateUp(this._elt);
    ResizeSystem/* default.requestUpdateUpSignal */.Z.requestUpdateUpSignal(this._elt);
};

DTHeadCell.prototype.requestUpdateContent = function () {
    if (this.ucTO > 0) return;
    // this.ucTO = setTimeout(() => {
        this.ucTO = -1;
        this.updateCopyContent();
    // }, 20)
};


DTHeadCell.prototype.updateCopyEltSize = function () {
    if (!this._copyElt && !this._copyElt1 && !this._copyElt2) return;
    // copyElt is in space
    var bound = this._copyElt.getBoundingClientRect();
    var matchHeight = this._elt.hasClass('as-matched-head-height');
    this._elt.addStyle('width', bound.width + 'px');
    if (matchHeight) this._elt.addStyle('min-width', bound.width + 'px');
    if (this._copyElt1) {
        this._copyElt1.addStyle('width', bound.width + 'px');
        if (matchHeight) this._copyElt1.addStyle('min-width', bound.width + 'px');

    }
    if (this._copyElt2) {
        this._copyElt2.addStyle('width', bound.width + 'px');
        if (matchHeight) this._copyElt2.addStyle('min-width', bound.width + 'px');
    }
};

Object.defineProperty(DTHeadCell.prototype, 'elt', {
    get: function () {
        if (this._elt) return this._elt;

        var eventAdded = false;
        var 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 = () => {
            document.removeEventListener('pointerup', onPointerUp);
            eventAdded = false;
            this.nextSortState();
        };

        this._elt = (0,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 = (0,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 = (0,ACore._)({
            class: 'as-dt-header-cell-resizer'
        });

        this._elt.addChild(this.$sortBtn);
        this._elt.addChild(this.$resizer);
        var ctrl = this;
        // setTimeout(() => {
        //     var addChild = this._elt.addChild;
        //     var clearChild = this._elt.clearChild;
        //     this._elt.addChild = function () {
        //         ctrl.requestUpdateContent();
        //         addChild.apply(this, arguments);
        //     };
        //     this._elt.clearChild = function () {
        //         ctrl.requestUpdateContent();
        //         clearChild.apply(this, arguments);
        //     };
        // }, 10);
        // listenDomContentChange(this._elt, (event) => {
        //     this.requestUpdateContent();
        // });
        setTimeout(()=>{
            (0,utils.listenDomContentChange)(this._elt, (event) => {
                this.requestUpdateContent();
            });
        }, 10);

        return this._elt;
    }
});

Object.defineProperty(DTHeadCell.prototype, 'copyElt', {
    get: function () {
        if (this._copyElt) return this._copyElt;
        this._copyElt = (0,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 () {
        if (this._copyElt1) return this._copyElt1;
        this._copyElt1 = (0,ACore.$)(this.elt.cloneNode(true)).addClass('as-copy-elt-1');
        return this._copyElt1;
    }
});

Object.defineProperty(DTHeadCell.prototype, 'copyElt2', {
    get: function () {
        if (this._copyElt2) return this._copyElt2;
        this._copyElt2 = (0,ACore.$)(this.elt.cloneNode(true)).addClass('as-copy-elt-2');
        return this._copyElt2;
    }
});


Object.defineProperty(DTHeadCell.prototype, 'colspan', {
    get: function () {
        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;
    }
});

Object.defineProperty(DTHeadCell.prototype, 'rowspan', {
    get: function () {
        var value = this.data.attr && this.data.attr.rowspan;
        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) {
    this.head = head;
    this.data = data;
    this.cells = this.data.cells.map((cellData) => new dynamictable_DTHeadCell(this, cellData));
    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(c => c.updateCopyEltSize());
};


Object.defineProperty(DTHeadRow.prototype, 'elt', {
    get: function () {
        if (this._elt) return this._elt;
        var fixedCol = this.adapter.fixedCol || 0;
        var child = this.cells.filter(c=> c.idx < fixedCol).map(c => c.copyElt1);
        var child1 = this.cells.filter(c=> c.idx >= fixedCol).map(c => c.elt);
        this._elt = (0,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 () {
        if (this._fixedXYElt) return this._fixedXYElt;
        var fixedCol = this.adapter.fixedCol || 0;
        this._fixedXYElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            class: 'as-dt-fixed-xy',
            child: this.cells.filter(c=> c.idx < fixedCol).map(c => c.elt)
        });
        return this._fixedXYElt;
    }
});

Object.defineProperty(DTHeadRow.prototype, 'fixedXElt', {
    get: function () {
        if (this._fixedXElt) return this._fixedXElt;
        var fixedCol = this.adapter.fixedCol || 0;
        this._fixedXElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            class: 'as-dt-fixed-x',
            child:this.cells.filter(c=> c.idx < fixedCol).map(c => c.copyElt2)
        });
        return this._fixedXElt;
    }
});


Object.defineProperty(DTHeadRow.prototype, 'copyElt', {
    get: function () {
        if (this._copyElt) return this.copyElt;
        var adapter = this.adapter;
        this._copyElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            child: this.cells.map(c => c.copyElt)
        });

        return this._copyElt;
    }
});

Object.defineProperty(DTHeadRow.prototype, 'adapter', {
    get: function () {
        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) {
    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((rowData) => new dynamictable_DTHeadRow(this, rowData));
    this.makeCellIdx();
}

DTHead.prototype.makeCellIdx = function () {
    var height = Array(200).fill(0);
    var i, j, k, row, cells, colIdx, cell, colspan, rowspan;
    for (i = 0; i < this.rows.length; ++i) {
        row = this.rows[i];
        cells = row.cells;
        colIdx = 0;
        for (j = 0; j < cells.length; ++j) {
            while (height[colIdx] > i) ++colIdx;
            cell = cells[j];
            cell.idx = colIdx;
            colspan = cell.colspan;
            rowspan = cell.rowspan;
            if (rowspan ===this.rows.length) {
                cell.elt.addClass('as-matched-head-height');
            }
            for (k = 0; k < colspan; ++k) {
                height[colIdx] = i + rowspan;
                ++colIdx;
            }
        }
    }
};

DTHead.prototype.lockWidth = function () {
    this.rows.forEach(r => r.lockWidth());
};

DTHead.prototype.updateCopyEltSize = function () {
    if (!this._copyElt) return;
    this.rows.forEach(r => r.updateCopyEltSize());
};

Object.defineProperty(DTHead.prototype, 'elt', {
    get: function () {
        if (this._elt) return this._elt;
        this._elt = (0,ACore._)({
            tag: 'thead',
            class: 'as-dt-header',
            child: this.rows.map(r => r.elt)
        });
        if (this.data.style) this._elt.addStyle(this.data.style);
        return this._elt;
    }
});


Object.defineProperty(DTHead.prototype, 'copyElt', {
    get: function () {
        if (this._copyElt) return this._copyElt;
        this._copyElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            child: this.rows.map(r => r.copyElt)
        });

        return this._copyElt;
    }
});


Object.defineProperty(DTHead.prototype, 'fixedXYElt', {
    get: function () {
        if (this._fixedXYElt) return this._fixedXYElt;

        this._fixedXYElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            class: 'as-dt-fixed-xy',
            child: this.rows.map(r => r.fixedXYElt)
        });

        return this._fixedXYElt;
    }
});


Object.defineProperty(DTHead.prototype, 'fixedXElt', {
    get: function () {
        if (this._fixedXElt) return this._fixedXElt;
        this._fixedXElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            class: 'as-dt-fixed-x',
            child: this.rows.map(r => r.fixedXElt)
        });

        return this._fixedXElt;
    }
});


Object.defineProperty(DTHead.prototype, 'adapter', {
    get: function () {
        return this.table.wrapper.adapter;
    }
});

/* harmony default export */ const dynamictable_DTHead = (DTHead);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTBodyCell.js





/***
 *
 * @param {DTBodyRow} row
 * @param data
 * @constructor
 */
function DTBodyCell(row, data) {
    this.row = row;
    this._elt = null;
    this._copyElt = null;
    this._idx = null;
    if (data.attr) {
        Object.keys(data.attr).forEach(key => {
            var key2 = key.toLowerCase();
            if (key2 !== key) data.attr[key2] = data.attr[key];
        })
    }
    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 () {
        if (this._elt) return this._elt;
        this._elt = (0,ACore._)({
            tag: 'td', class: 'as-dt-body-cell'
        });
        this._elt.holder = this;

        var addChild = this._elt.addChild;
        this._elt.addChild = function () {
            addChild.apply(this, arguments);
            ResizeSystem/* default.requestUpdateUpSignal */.Z.requestUpdateUpSignal(this);
            return this;
        };

        if (this.data.attr) this._elt.attr(this.data.attr);
        if (typeof this.data.class === "string") (0,utils.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(key => {
                var cb = this.data.on[key];
                if (typeof cb !== "function") return;
                this._elt.on(key, 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);
        (0,utils.listenDomContentChange)(this._elt, (event) => {
            this.requestUpdateContent();
        });
        return this._elt;
    }
});

Object.defineProperty(DTBodyCell.prototype, 'copyElt', {
    get: function () {
        if (this._copyElt) return this._copyElt;
        this._copyElt = (0,ACore.$)(this.elt.cloneNode(true)).addClass('as-copy-elt');
        return this._copyElt;
    }
});

DTBodyCell.prototype.requestUpdateContent = function () {
    if (this._copyElt) {
        this._copyElt.clearChild();
        this._copyElt.addChild(Array.prototype.map.call(this._elt.childNodes, c => c.cloneNode(true)));
    }
    ResizeSystem/* default.updateUp */.Z.updateUp(this._elt, true);
    ResizeSystem/* default.requestUpdateUpSignal */.Z.requestUpdateUpSignal(this._elt, true);
}


Object.defineProperty(DTBodyCell.prototype, 'innerText', {
    get: function () {
        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 (typeof text === "object") {
            if (text instanceof Date) {
                return (0,datetime.formatDateTime)(text, 'dd/MM/yyyy HH:mm');
            }
            else {
                return (0,utils.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 (value) {
        this._idx = value;
        if (this._elt)
            this._elt.attr('data-col-idx', value + '');
    },
    get: function () {
        return this._idx;
    }
});

Object.defineProperty(DTBodyCell.prototype, 'colspan', {
    get: function () {
        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) {
    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((ac, cr, i) => {
        if (typeof cr.keySort === "string") {
            ac['[' + i + ']'] = (0,stringFormat.nonAccentVietnamese)(cr.keySort).toLowerCase();
        }
        else if (typeof cr.keySort === "number") {
            ac['[' + i + ']'] = cr.keySort;
        }
        else if (typeof cr.innerText === "string") {
            ac['[' + i + ']'] = (0,stringFormat.nonAccentVietnamese)(cr.innerText).toLowerCase();
        }
        return ac;
    }, this.filterKeys);

    if ('id' in data) {
        this.id = data.id;
    }
    else {
        this.id = (0,stringGenerate.randomIdent)(8);
    }
    this._idx = null;
    /***
     * @type {DTBodyCell[]}
     */
    this.cells = this.data.cells.map((cellData) => new dynamictable_DTBodyCell(this, cellData));
    this.cells.reduce((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 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 = (0,stringGenerate.randomIdent)(8);
    }
    this.cells = this.data.cells.map((cellData) => new dynamictable_DTBodyCell(this, cellData));
    this.cells.reduce((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 = (0,ACore.$)('.as-dt-row-index', this._elt);
        this.draggable = !!(0,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 () {
        if (this._elt) return this._elt;
        var fixedCol = this.adapter.fixedCol || 0;
        var child = this.cells.filter(c => c.idx < fixedCol).map(c => c.copyElt);
        var child1 = this.cells.filter(c => c.idx >= fixedCol).map(c => c.elt);

        this._elt = (0,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) {
            (0,utils.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(key => {
                var cb = this.data.on[key];
                if (typeof cb !== "function") return;
                this._elt.on(key, event => {
                    cb.call(this._elt, event, this);
                });
            });
        }


        this.$idx = this.cells.reduce((ac, c) => {
            return ac || (0,ACore.$)('.as-dt-row-index', c.elt);
        }, null);
        this.draggable = !!(0,ACore.$)('.as-drag-zone', this._elt);
        if (this.$idx)
            this.$idx.attr('data-idx', this._idx + 1 + '');

        var originAddStyle = this._elt.addStyle;
        var originRemoveStyle = this._elt.removeStyle;
        var originAddClass = this._elt.addClass;
        var originRemoveClass = this._elt.removeClass;

        var isOverrideStyle = x=> ['background-color', 'backgroundColor', 'color'].includes(x);
        var thisCTL = this;
        this._elt.addStyle = function (key, value) {
            originAddStyle.apply(this, arguments);
            if (thisCTL._fixedXElt && isOverrideStyle(key)) {
                thisCTL._fixedXElt.addStyle(key, value);
            }
            return this;
        };

        this._elt.removeStyle = function (key) {
            originRemoveStyle.apply(this, arguments);
            if (thisCTL._fixedXElt && isOverrideStyle(key)) {
                thisCTL._fixedXElt.removeStyle(key);
            }
            return this;
        };

        this._elt.addClass = function () {
            originAddClass.apply(this, arguments);
            if (thisCTL._fixedXElt) {
                thisCTL._fixedXElt.addClass.apply(thisCTL._fixedXElt, arguments);
            }
            return this;
        };

        this._elt.removeClass = function () {
            originRemoveClass.apply(this, arguments);
            if (thisCTL._fixedXElt) {
                thisCTL._fixedXElt.removeClass.apply(thisCTL._fixedXElt, arguments);
            }
            return this;
        };


        return this._elt;
    }
});


Object.defineProperty(DTBodyRow.prototype, 'fixedXElt', {
    get: function () {
        if (this._fixedXElt) return this._fixedXElt;
        var fixedCol = this.adapter.fixedCol || 0;
        this._fixedXElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            class: 'as-dt-fixed-x',
            child: this.cells.slice(0, fixedCol).map(cell => cell.elt)
        });

        return this._fixedXElt;
    }
});


Object.defineProperty(DTBodyRow.prototype, 'innerText', {
    get: function () {
        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(text => !!text).join(' / ');
    }
});

Object.defineProperty(DTBodyRow.prototype, 'idx', {
    set: function (value) {
        if (this.$idx)
            this.$idx.attr('data-idx', value + 1 + '');
        this._idx = value;
    },
    get: function () {
        return this._idx;
    }
});


Object.defineProperty(DTBodyRow.prototype, 'adapter', {
    get: function () {
        return this.body.adapter;
    }
});


/* harmony default export */ const dynamictable_DTBodyRow = (DTBodyRow);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/Thread.js + 1 modules
var Thread = __webpack_require__(6672);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dynamictable/DTSearchFactor.js
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 {SelectionItem} item
     * @returns {*}
     */
    function prepareSearchForItem(item) {
        if (!item.text || !item.text.charAt) item.text = item.text + '';
        var splitter = /([_\s\b\-()\[\]"']|&#8239;|&nbsp;|&#xA0;")+/g;
        var text = item.text.replace(splitter, ' ');
        var __words__ = text.split(/\s+/).filter(w=>!!w).map(w=>w.toLowerCase());
        var __text__ = __words__.join(' ');
        var __wordDict__ = __words__.reduce((ac, cr, i) => {
            ac[cr] = ac[cr] || i + 1;
            return ac;
        }, {});

        var __nvnText__ = nonAccentVietnamese(__text__);

        var __nvnWords__ =  __words__.map(w=>nonAccentVietnamese(w));
        var __nvnWordDict__ = __nvnWords__.reduce((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: __words__
            },
            __wordDict__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __wordDict__
            },
            __textNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __text__
            },
            __wordsNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __words__
            },
            __nvnText__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnText__
            },
            __nvnWords__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnWords__
            },
            __nvnWordDict__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnWordDict__
            },
            __nvnTextNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnText__
            },
            __nvnWordsNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnWords__
            }
        });

        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;

        function calcByWordDict(queryWords, wordDict) {
            var hwScore = 0;
            var i;
            wordDict = Object.assign({}, wordDict);
            var bestWordMatched, bestWordMatchScore = 0;
            var word, wordScore;
            for (i = 0; i < queryWords.length; ++i) {
                bestWordMatchScore = 0;
                bestWordMatched = null;
                for (word in wordDict) {
                    wordScore = wordLike(word, queryWords[i]) - 1e-3 * wordDict[word];
                    if (wordScore > bestWordMatchScore) {
                        bestWordMatched = word;
                        bestWordMatchScore = wordScore;
                    }
                }
                if (bestWordMatchScore >0) {
                    hwScore += bestWordMatchScore * WORD_MATCH_SCORE;
                    delete wordDict[bestWordMatched];
                }
            }
            return hwScore;
        }

        score += calcByWordDict(queryItem.__words__, item.__wordDict__);
        score += calcByWordDict(queryItem.__nvnWords__, item.__nvnWordDict__);

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

        score += Math.max(wordsMatch(queryItem.__words__, item.__words__), wordsMatch(queryItem.__nvnWords__, item.__nvnWords__))/ Math.max(queryItem.__words__.length + 1, 1);

        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 = 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(val => keyStringOf(val)).join(',') + ')';
            }
            else {
                keys = Object.keys(o);
                keys.sort();
                return 'o(' + keys.map(key => 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 = 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 && (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 = (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);

DTSearchFactor.exportCode = function () {
    var res = DTSearchFactor + ''
        + '\n\nDTSearchFactor(this)';
    return res;
}

;// 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 = (0,stringGenerate.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 || BrowserDetector/* default.calcBenchmark */.Z.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: (0,utils.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 Thread/* default */.Z({
            methods: {
                calcBenchmark: BrowserDetector/* default.calcBenchmark */.Z.calcBenchmark
            },
            extendCode: dynamictable_DTSearchFactor.exportCode()
        });

        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 || BrowserDetector/* default.calcBenchmark */.Z.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();
    if (!bodyBound || bodyBound.width <= 0 || bodyBound.height <= 0) return null;
    var elt = this.body.elt;
    var childNodes = elt.childNodes;
    this.boundCache = Array.prototype.map.call(childNodes, elt => {
        var eBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(elt.getBoundingClientRect());
        eBound.y -= bodyBound.top;
        return eBound;
    });
    this.boundCache.body = Rectangle/* default.fromClientRect */.Z.fromClientRect(bodyBound);
    this.boundCache.header = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.body.table.header.elt.getBoundingClientRect());


    return this.boundCache;
};

BaseMode.prototype.updateRowsIfNeed = function () {
    throw Error("Not implement!");
};


BaseMode.prototype.render = function () {
    this.updateRowsIfNeed();
    var bounds = this.getBoundOfRows();
    if (!bounds) {
        setTimeout(() => {
            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);

    //small padding top
    var hs = this.body.table.wrapper.$vscrollbar.innerOffset / ((this.body.table.wrapper.$vscrollbar.innerHeight - this.body.table.wrapper.$vscrollbar.outerHeight) || 1)
    dy += hs * 100;

    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 = [];
}

OOP/* default.mixClass */.ZP.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 screenSize = (0,Dom/* getScreenSize */.tE)();
    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(r => r.elt);
    var nFixedXChildren = nRows.map(r => r.fixedXElt);
    (0,utils.replaceChildrenInElt)(elt, nChildren);
    (0,utils.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();

    }
    var updateFx = () => {
        if (counter > 20) return;
        if (this.body.elt.isDescendantOf(document.body)) {
            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();
            }
            counter += 3;
            setTimeout(updateFx, (counter++) * 5);
        }
        else {
            setTimeout(updateFx, (counter++) * 5)
        }
    };
    var counter = 1;
    if (!bounds) {
        setTimeout(updateFx, 1);
    }
};


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) {
    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(rIdx => this.body.rows[rIdx]);

    this.render();
};


SearchingMode.prototype.share = {
    thread: null
};


/***
 * @extends BaseMode
 * @param {DTBody} body
 * @constructor
 */
function NormalMode(body) {
    BaseMode.call(this, body);
}

OOP/* default.mixClass */.ZP.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 screenSize = (0,Dom/* getScreenSize */.tE)();
    var rowPerPage = Math.ceil(Math.ceil(screenSize.height / 40 + 1) / 100) * 100;
    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();
    }

    var counter = 1;
    var fx = () => {
        if (counter> 20) return;
        if (this.body.elt.isDescendantOf(document.body)) {
            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();
            }
            counter += 3;
            setTimeout(fx, counter * 5);
        }
        else {
            setTimeout(fx, (counter++) * 5);
        }
    };

    if (!bounds) {
        setTimeout(fx, 1);
    }
    this.body.table.wrapper.rowDragCtrl.ev_rowRenderChange();
    ResizeSystem/* default.requestUpdateUpSignal */.Z.requestUpdateUpSignal(this.body.elt);
}


NormalMode.prototype.onRowSplice = function (idx) {
    this.rowOffset = -1;
    this.render();
};


NormalMode.prototype.viewIntoRow = function (o) {
    var idx = this.viewedRows.findIndex(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) {
    this.table = table;

    this.data = data;

    this._elt = null;
    this._fixedXElt = null;

    /**
     * @type {DTBodyRow[]}
     */
    this.rows = this.data.rows.map((rowData, i) => {
        var row = new dynamictable_DTBodyRow(this, 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);
    ResizeSystem/* default.requestUpdateSignal */.Z.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 (!(0,utils.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 (!(0,utils.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(row => row.updateCopyEltSize());
};


Object.defineProperties(DTBody.prototype, {
    offset: {
        set: function (value) {
            this._offset = value;
            this.curentMode.offset = value;
            this.curentMode.render();
        },
        get: function () {
            return this._offset;
        }
    },
    searching: {
        get: function () {
            return this.elt.hasClass('as-searching');
        }
    }
});


Object.defineProperty(DTBody.prototype, 'elt', {
    get: function () {
        if (this._elt) return this._elt;
        this._elt = (0,ACore._)({
            tag: 'tbody',
            class: 'as-dt-body',
        });
        if (this.data.on) {
            Object.keys(this.data.on).forEach(key => {
                var cb = this.data.on[key];
                if (typeof cb !== "function") return;
                this._elt.on(key, event => {
                    cb.call(this._elt, event, this);
                });
            });
        }
        return this._elt;
    }
});

Object.defineProperty(DTBody.prototype, 'fixedXElt', {
    get: function () {
        if (this._fixedXElt) return this._fixedXElt;
        this._fixedXElt = (0,ACore._)({
            elt: this.elt.cloneNode(false),
            class: 'as-fixed-x',
        });
        return this._fixedXElt;
    }
});

Object.defineProperty(DTBody.prototype, 'adapter', {
    get: function () {
        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();
    this._fixedYElt.parentElement.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 () {
        if (this._elt) return this._elt;
        this._elt = (0,ACore._)({
            tag: 'table',
            class: 'as-dynamic-table',
            child: [
                this.header.copyElt,
                this.body.elt
            ]
        });

        return this._elt;
    }
});


Object.defineProperty(DTTable.prototype, 'fixedXElt', {
    get: function () {
        if (this._fixedXElt) return this._fixedXElt;
        this._fixedXElt = (0,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 () {
        if (this._fixedYElt) return this._fixedYElt;
        this._fixedYElt = (0,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 () {
        if (this._fixedXYElt) return this._fixedXYElt;
        this._fixedXYElt = (0,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
 */





/***
 *
 * @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 (0,ACore._)(it);
            }));
        }
        else {
            elt.addChild((0,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 (0,ACore._)(it);
            }))
        }
        else {
            elt.addChild((0,ACore._)(data.child));
        }
    }
    if (data.render) {
        data.render.call(null, elt, data, controller);
    }
    if (data.style) {
        elt.addStyle(data.style);
    }
};


/* harmony default export */ const dynamictable_DTDataAdapter = (DTDataAdapter);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/dynamictable.css
var dynamictable = __webpack_require__(5984);
;// 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-acomp/js/dynamictable/DynamicTable.js





















var loadStyleSheet = function () {
    var dynamicStyleSheet = {};
    var key = Array(20).fill(0).map((u, i) => [
        '.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' };
    (0,utils.buildCss)(dynamicStyleSheet);
    loadStyleSheet = noop/* default */.Z;
}


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 DynamicCSS/* default */.Z();
    this.css.elt.setAttribute('id', "dynamic_mng");
    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 () {
    Object.keys(this.data.colWidth).forEach(tableId => {
        Object.keys(this.data.colWidth[tableId]).forEach(colId => {
            var value = this.data.colWidth[tableId][colId];
            this.css.setProperty(`#${tableId} th[data-col-id="${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(table => 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(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(`#${tableId} th[data-col-id="${colId}"]:not([colspan])`, '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() {
    this._pendingId = (0,stringGenerate.randomIdent)(4);
    pendingTables[this._pendingId] = this;
    manager.initIfNeed();
    loadStyleSheet();
    this.css = new DynamicCSS/* default */.Z();
    this._hiddenColumns = [];
    /***
     *
     * @type {SearchTextInput|null}
     */
    this.$searchInput = null;
    /***
     *
     * @type {AElement}
     */
    this.$table = (0,ACore.$)('.as-dynamic-table', this);
    /***
     *
     * @type {AElement}
     */
    this.$thead = (0,ACore.$)('.as-dynamic-table>thead', this.$table);
    /***
     *
     * @type {AElement}
     */
    this.$tbody = (0,ACore.$)('.as-dynamic-table>tbody', this.$table);


    this.$filterInputs = [];

    this.$attachhook = (0,ACore._)('attachhook').addTo(this);
    this.$domSignal = (0,ACore._)('attachhook').addTo(this);
    this.domSignal = new DomSignal/* default */.ZP(this.$domSignal);
    //controller
    this.table = null;
    this.$space = (0,ACore.$)('.as-dynamic-table-space', this);
    this.$fixedYCtn = (0,ACore.$)('.as-dynamic-table-fixed-y-ctn', this);
    this.$fixedXCtn = (0,ACore.$)('.as-dynamic-table-fixed-x-ctn', this);
    this.$fixedXYCtn = (0,ACore.$)('.as-dynamic-table-fixed-xy-ctn', this);
    this.$viewport = (0,ACore.$)('.as-dynamic-table-viewport', this);
    this.$hscrollbar = (0,ACore.$)('.as-dynamic-table-hb', this);
    this.$vscrollbar = (0,ACore.$)('.as-dynamic-table-vb', this);

    this.$pageSelector = new VirtualPageSelector(this);
    this.extendStyle = Object.assign(new AppPattern_Attributes(this), this.extendStyle);
    this.extendStyle.loadAttributeHandlers(this.styleHandlers);


    // this.$attachhook.requestUpdateSize = this.fixedContentCtrl.updateSize.bind(this.fixedContentCtrl);
    this.$attachhook.requestUpdateSize = this.requestUpdateSize.bind(this);
    var trashTO = -1;
    this.readySync = new Promise(rs => {
        this.onReady = rs;
    });
    this.$attachhook.once('attached', () => {
        delete pendingTables[this._pendingId];
        // setTimeout(()=>{
        //     Object.values(pendingTables).forEach(table=>{
        //         if (!table.isDescendantOf(document.body))
        //         table.revokeResource();
        //     });
        // }, 5000);
        ResizeSystem/* default.add */.Z.add(this.$attachhook);
        this.layoutCtrl.onAttached();
        this.colSizeCtrl.onAttached();
        manager.add(this);
        setTimeout(() => {
            this.requestUpdateSize();
            if (this.onReady) {
                this.onReady();
                this.onReady = null;
            }
        }, 10);

        clearTimeout(trashTO);

        var checkAlive = () => {
            if (this.isDescendantOf(document.body)) {
                setTimeout(checkAlive, 2000);
            }
            else {
                this.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' || width === '100%') {
        classList.push('as-width-match-parent');
    }
    return (0,ACore._)({
        id: 'no-id-' + (0,stringGenerate.randomIdent)(10),
        extendEvent: ['orderchange', 'colresize'],
        class: classList,
        child: [
            {
                tag: Hanger/* default.tag */.Z.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: Scroller/* VScrollbar */.eP,
                class: 'as-dynamic-table-vb'
            },
            {
                tag: Scroller/* HScrollbar */.MP,
                class: 'as-dynamic-table-hb'
            },
        ]
    });
};

DynamicTable.prototype.extendStyle = {};//init value

DynamicTable.prototype.extendStyle.tableLayout = 'fixed';
DynamicTable.prototype.extendStyle.width = 'auto';
DynamicTable.prototype.extendStyle.minWidth = 'unset';

DynamicTable.prototype.styleHandlers = {};


DynamicTable.prototype.styleHandlers.minWidth = {
    set: function (value) {
        var parsedValue = (0,attribute.parseMeasureValue)(value);
        if (!parsedValue) value = 'unset';
        else if (parsedValue.value === 'match_parent') value = '100%';
        else if (parsedValue.unit === 'px') value = parsedValue.value + parsedValue.unit;
        if (parsedValue && parsedValue.unit) {
            this.style.minWidth = value;
            this.addClass('as-has-min-width');
        }
        else {
            this.removeClass('as-has-min-width');
        }
        return value;
    }
};

DynamicTable.prototype.styleHandlers.width = {
    set: function (value) {
        var parsedValue = (0,attribute.parseMeasureValue)(value);
        if (!parsedValue) value = 'auto';
        else if (parsedValue.value === 'match_parent') value = '100%';
        else if (parsedValue.unit === 'px') value = parsedValue.value + parsedValue.unit;
        if (parsedValue && parsedValue.unit) {
            this.style.width = value;
            this.removeClass('as-width-auto');
        }
        else {
            this.addClass('as-width-auto');
        }
        return value;
    }
};

DynamicTable.prototype.styleHandlers.height = {
    set: function (value) {//todo: handle expression
        var parsedValue;
        if (value && value.indexOf && value.indexOf('--') > 0) {
            this.style.height = value;
        }
        else {
            parsedValue = (0,attribute.computeMeasureExpression)(value, { elt: this, parentSize: 0 });
            if (!parsedValue) value = 'auto';
            else if (parsedValue.value === 'match_parent') value = '100%';
            else if (parsedValue.unit === 'px') value = parsedValue.value + parsedValue.unit;
            if (parsedValue && parsedValue.unit) {
                this.style.height = value;
                this.removeClass('as-auto-height');
            }
            else {
                this.addClass('as-auto-height');
            }
        }

        return value;
    }
};

//
// DynamicTable.prototype.width = function (value) {
//     this.extendStyle.minWidth = value;
// };
//


DynamicTable.prototype.styleHandlers.tableLayout = {

    /***
     * @this {DynamicTable}
     * @param value
     */
    set: function (value) {
        if (value === 'fixed') {
            this.addClass('as-table-layout-fixed');
        }
        else {
            this.removeClass('as-table-layout-fixed');
            value = 'auto';
        }
        return value;
    }
};


DynamicTable.prototype.addStyle = function (arg0, arg1) {
    if ((typeof arg0 === "string") && (arg0 in this.extendStyle)) {
        if (arg0.indexOf('-') > 0) arg0 = (0,stringFormat.kebabCaseToCamelCase)(arg0);//not --
        this.extendStyle[arg0] = arg1;
    }
    else {
        AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
    }
    return this;
};


DynamicTable.prototype.requestUpdateSize = function () {
    this.layoutCtrl.onResize();
};

DynamicTable.prototype.revokeResource = function () {
    this.$attachhook.cancelWaiting();
    delete pendingTables[this._pendingId];
    this.css.stop();
    this.css = null;
    this.revokeResource = noop/* default */.Z;
    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();
    ResizeSystem/* default.removeTrash */.Z.removeTrash();

};

DynamicTable.prototype.getSavedState = function () {
    var res = {};
    res.scrollTop = this.$vscrollbar.innerOffset;
    res.scrollLeft = this.$hscrollbar.innerOffset;
    return res;
};

DynamicTable.prototype.setSavedState = function (state) {
    this.readySync.then(() => {
        state = state || {};
        this.$vscrollbar.innerOffset = state.scrollTop || 0;
        this.$hscrollbar.innerOffset = state.scrollLeft || 0;
        this.$hscrollbar.emit('scroll');
        this.$vscrollbar.emit('scroll');
    });
};


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);
    }
    ResizeSystem/* default.requestUpdateSignal */.Z.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.slice();
};

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 counter = 300;
    var wait = () => {
        counter--;
        if (this.isDescendantOf(document.body)) {
            if (this.hasClass('as-adapt-infinity-grow') || !this.hasClass('as-overflow-y')) {
                row = this.rowOf(row);
                if (row) {
                    (0,utils.vScrollIntoView)(row.elt);
                }
            }
            else {
                this.table.body.viewIntoRow(row);//TODO: CHECK MORE
            }
        }
        else if (counter > 0) {
            setTimeout(wait, 30);
        }

    }
    setTimeout(wait, 130);
};

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 = (0,ACore.$$)('th', this.table.header.elt).reduce((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/* default */.Z;

DynamicTable.property = {};

DynamicTable.property.adapter = {
    /***
     * @this DynamicTable
     * @param data
     */
    set: function (data) {
        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(() => {
            this.requestUpdateSize();
        }, 10);

        setTimeout(() => {
            this.requestUpdateSize();
        }, 30);

        setTimeout(() => {
            this.requestUpdateSize();
        }, 100);
    },
    get: function () {
        return this._adapterData;
    }
};
DynamicTable.property.filterInputs = {
    set: function (inputs) {
        inputs = inputs || [];
        this.$filterInputs.slice().forEach(input => {
            this.removeFilter(input);
        });

        inputs.forEach(input => this.addFilter(input));
    },
    get: function () {
        return this.$filterInputs;
    }
};


DynamicTable.property.hiddenColumns = {
    set: function (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;
        }
        ResizeSystem/* default.update */.Z.update();
        ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
    },
    get: function () {
        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);
};


ACore/* default.install */.Z.install(DynamicTable);

/* harmony default export */ const dynamictable_DynamicTable = (DynamicTable);


/***
 *
 * @param {DynamicTable} elt
 * @constructor
 */
function LayoutController(elt) {
    /***
     *
     * @type {DynamicTable}
     */
    this.elt = elt;
    this.maxRows = Math.ceil(Math.max((0,Dom/* getScreenSize */.tE)().height / 40, 1080 / 40));
    this.offset = Vec2/* default.ZERO */.Z.ZERO;
    Object.keys(this.constructor.prototype).forEach(key => {
        if (key.startsWith('ev_')) this[key] = this[key].bind(this);
    });

    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 = Vec2/* default.ZERO */.Z.ZERO;
    this.scrollingStartOffset = Vec2/* default.ZERO */.Z.ZERO;
}

/***
 *
 * @param {WheelEvent} event
 */
LayoutController.prototype.ev_wheel = function (event) {
    var vScroller = (0,utils.findVScrollContainer)(event.target);
    if (vScroller && vScroller.hasClass && vScroller.hasClass('as-bscroller')) return;
    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 = (0,attribute.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(cell => {
        return !cell.data.style || !cell.data.style.width;
    });
    if (freeCells.length === 0) return;
    var cellWidths = freeCells.map(cell => cell.copyElt.getBoundingClientRect().width);
    var sumWidth = cellWidths.reduce((ac, w) => ac + w, 0);
    var needGrowUp = mv.value - bound.width;
    freeCells.forEach((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 () {
    ResizeSystem/* default.updateUp */.Z.updateUp(this.elt.parentElement);

    this.update();

    if (this.elt.table) {
        this.handleDisplay();
        this.handleMinWidth();
        this.elt.table.updateCopyEltSize();
        this.updateOverflowStatus();
        this.elt.$vscrollbar.once('scroll', () => {
            // return;
            setTimeout(() => {
                if (this.elt.table.body.rows.length === 0) return;
                var tableId = this.elt.id;

                var rows = this.elt.table.header.rows;
                if (!rows || rows.length === 0) return;
                var changed = false;
                var colDict = {};

                rows.forEach(row => {
                    var cells = row.cells;
                    if (!cells) return;
                    cells.forEach(cell => {
                        var colId = cell.data.id;
                        var bound;
                        if (cell.colspan > 1) return;
                        if (!colId && !colDict[cell.idx]) {//local style
                            bound = cell.copyElt.getBoundingClientRect();
                            if (bound.width > 0) {
                                this.elt.css.setProperty(`#${this.elt.id} th[data-col-idx="${cell.idx}"]:not(colspan)`, '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.update = function () {
    var stWidth = this.elt.extendStyle.width;
    var psWidth = (0,attribute.parseMeasureValue)(this.elt.extendStyle.width);
    var stHeight = this.elt.extendStyle.height;
    var psHeight = (0,attribute.computeMeasureExpression)(stHeight, {
        elt: this,
        parentSize: (this.elt.parentElement ? this.elt.parentElement.getBoundingClientRect().height : 0)
    });
    var cpStyle = getComputedStyle(this.elt);
    var psMaxHeight = (0,attribute.parseMeasureValue)(cpStyle.getPropertyValue('max-height'));
    var psMinWidth = (0,attribute.parseMeasureValue)(cpStyle.getPropertyValue('min-width'));
    var parentElt = this.elt.parentElement;
    var parentCpStyle;
    var parentBound;
    var screenSize;
    var singleView = (() => {
        var ctn = this.elt.parentElement && this.elt.parentElement.parentElement;
        if (!ctn) return false;
        if (!ctn.hasClass || !ctn.hasClass('absol-single-page-scroller-viewport')) return false;
        if (ctn.lastChild === ctn.firstChild && ctn.firstChild === this.elt) return singleView;
    })();
    var singleViewBound;
    var getMaxBoundHeight = () => {
        var mxH = Infinity;
        if (this.elt.hasClass('as-adapt-infinity-grow')) return Infinity;
        if (!psHeight) {

        }
        else if (psHeight.unit === 'px') {
            mxH = psHeight.value;
        }
        else if (psHeight.unit === '%' && parentElt) {
            parentBound = parentBound || parentElt.getBoundingClientRect();
            mxH = parentBound.height * psHeight.value / 100;
        }
        else if (psHeight.unit === 'vh') {
            screenSize = screenSize || (0,Dom/* getScreenSize */.tE)();
            mxH = screenSize.height * psHeight.value / 100;
        }

        if (psMaxHeight && psMaxHeight.unit === 'px') {
            mxH = Math.min(mxH, psMaxHeight.value);
        }
        return mxH;
    }

    var getMinInnerWidth = () => {
        var mnWidth = 0;
        var paddingLeft, paddingRight;
        if (!psWidth) {

        }
        else if (psWidth.unit === 'px') {
            mnWidth = psWidth.value;
        }
        else if (psWidth.unit === '%' && parentElt) {
            parentBound = parentBound || parentElt.getBoundingClientRect();
            parentCpStyle = parentCpStyle || getComputedStyle(parentElt);
            paddingLeft = parseFloat((parentCpStyle.getPropertyValue('padding-left') || '0px').replace('px', ''));
            paddingRight = parseFloat((parentCpStyle.getPropertyValue('padding-right') || '0px').replace('px', ''));
            mnWidth = (parentBound.width - paddingLeft - paddingRight) * psWidth.value / 100;
        }
        else if (psWidth.unit === 'vw') {
            screenSize = screenSize || (0,Dom/* getScreenSize */.tE)();
            mnWidth = screenSize.width * psWidth.value / 100;
        }

        if (psMinWidth && psMinWidth.unit === 'px') {
            mnWidth = Math.max(mnWidth, psMinWidth.value);
        }
        return mnWidth;
    };


    var bound, tbBound;
    var maxHeight;
    if (!this.elt.table) return;
    if (stWidth === 'auto') {//table max-width is 100% of parentWidth
        this.elt.table.elt.addStyle('min-width', Math.max(getMinInnerWidth() - 17, 0) + 'px');
    }
    else if (psWidth.unit === 'px' || psWidth.unit === 'vw' || psWidth.unit === '%') {
        this.elt.table.elt.addStyle('min-width', getMinInnerWidth() - 17 + 'px');
        bound = this.elt.getBoundingClientRect();
        if (bound.width > 0 && !this.elt.table.body.offset) {//if overflowY this.elt.table.body.offset >0
            tbBound = this.elt.table.elt.getBoundingClientRect();
            // if (singleView) {
            //     // singleViewBound =
            // }
            // if (this.elt.parentElement && this.elt.parentElement.)
            maxHeight = getMaxBoundHeight();
            if (!maxHeight || maxHeight.value >= tbBound) {
                this.elt.table.elt.addStyle('min-width', getMinInnerWidth() + 'px');
                //isOverflowY = false;
            }
            else {
                //isOverflowY = true;
            }
        }
    }
};


LayoutController.prototype.onResize = function () {
    this.update();
    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 };

    var bound = this.elt.getBoundingClientRect();
    var cpStyle = getComputedStyle(this.elt);
    var psMaxHeight = (0,attribute.parseMeasureValue)(cpStyle.getPropertyValue('max-height'));
    if (bound.width < contentBound.width) {
        this.elt.addClass('as-overflow-x');
    }
    else {
        this.elt.removeClass('as-overflow-x');
        this.elt.$space.removeStyle('left');
    }

    if (this.elt.hasClass('as-adapt-infinity-grow')) {
        this.elt.removeClass('as-overflow-y');
        this.elt.$space.removeStyle('top');
    }
    else if (bound.height < contentBound.height || (psMaxHeight && psMaxHeight.unit === 'px' && bound.width < contentBound.width + 17 && psMaxHeight.value < contentBound.height + 18)) {
        this.elt.addClass('as-overflow-y');
    }
    else {
        this.elt.removeClass('as-overflow-y');
        this.elt.$space.removeStyle('top');
    }

    this.elt.addStyle('--dt-content-height', contentBound.height + 'px');
    this.elt.addStyle('--dt-content-width', contentBound.width + 'px');
};

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');
    }
    if (tableBound.width < viewportBound.width) {
        this.elt.$vscrollbar.addStyle('right', viewportBound.width - tableBound.width + 'px');
    }
    else {
        this.elt.$vscrollbar.removeStyle('right');
    }

    // this.$vscrollbar
};

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 Vec2/* default */.Z(0, 1);
        event.preventDefault();
    }
    else if (isOverflowX && Math.abs(dir.y) < Math.abs(dir.x)) {
        this.scrollingDir = new Vec2/* default */.Z(1, 0);
        event.preventDefault();
    }
    else {
        this.scrollingDir = Vec2/* default.ZERO */.Z.ZERO;
    }
    this.scrollingStartOffset = new Vec2/* default */.Z(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 Vec2/* default */.Z(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) {
    Object.keys(this.constructor.prototype).forEach(key => {
        if (key.startsWith('ev_')) this[key] = this[key].bind(this);
    });
    /***
     *
     * @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 Vec2/* default */.Z(1, 0);
    var oy = new Vec2/* default */.Z(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) {
    if (!this.elt.isDescendantOf(document.body)) return;
    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(cell => cell.data.id === this.colId || cell.idx === this.colId);
    if (!this.cell) {
        this.dragOK = false;
        return;
    }
    this.cellElt = this.cell.copyElt;
    this.startingBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.cellElt.getBoundingClientRect());
};


ColSizeController.prototype.ev_drag = function (event) {
    if (!this.dragOK) return;
    if (!this.elt.isDescendantOf(document.body)) return;
    var newWidth = this.startingBound.width + event.currentPoint.sub(event.startingPoint).x;
    this.cellElt.addStyle('width', newWidth + 'px');
    this.elt.table.updateCopyEltSize();


    //todo: split code
    var viewportBound = this.elt.$viewport.getBoundingClientRect();
    var tableBound = this.elt.table.elt.getBoundingClientRect();
    if (tableBound.width < viewportBound.width) {
        this.elt.$vscrollbar.addStyle('right', viewportBound.width - tableBound.width + 'px');
    }
    else {
        this.elt.$vscrollbar.removeStyle('right');
    }
    this.elt.addStyle('--dt-content-height', tableBound.height + 'px');
    this.elt.addStyle('--dt-content-width', tableBound.width + 'px');
};


ColSizeController.prototype.ev_dragEnd = function (event) {
    if (!this.dragOK) return;
    if (!this.cell) return;
    if (!this.elt.isDescendantOf(document.body)) return;
    if (typeof this.colId === "string") {
        if (this.cell.colspan === 1)
            manager.commitColWidth(this.elt, this.elt.id, this.cell.data.id, this.cellElt.getBoundingClientRect().width, true);
        this.notifyColResize(event);
    }
    else {
        if (this.cell.colspan === 1)
            this.elt.css.setProperty(`#${this.elt.id} th[data-col-idx="${this.colId}"]:not([colspan])`, 'width', this.cellElt.getBoundingClientRect().width + 'px').commit();
    }
    this.elt.requestUpdateSize();
    setTimeout(() => {
        if (!this.cellElt.isDescendantOf(document.body)) return;
        this.cellElt.removeStyle('width');
        this.elt.requestUpdateSize();
    }, 150);
};

ColSizeController.prototype.getColWidth = function () {
    var res = {};
    this.elt.table.header.rows[0].cells.forEach(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: () => {
                return cell.copyElt.getBoundingClientRect().width;
            }
        })
    });

    return res;
};

ColSizeController.prototype.setColWidth = function (colId, value) {
    var cell = this.elt.table.header.rows[0].cells.find(cell => cell.data.id === colId || cell.idx === colId);
    cell.copyElt.removeStyle('width');
    if (typeof colId === "string") {
        if (cell.colspan !== 1)
            manager.commitColWidth(this.elt, this.elt.id, colId, value, true);
    }
    else {
        this.elt.css.setProperty(`#${this.elt.id} th[data-col-idx="${colId}"]:not([colspan])`, 'width', value + 'px').commit();
    }
    this.elt.requestUpdateSize();
};

ColSizeController.prototype.notifyColResize = function (originalEvent) {
    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: () => {
            if (colWidth) return colWidth;
            colWidth = this.getColWidth();

            return colWidth;
        }
    });

    this.elt.emit('colresize', event, this);
};

/**
 * new version
 * @param {DynamicTable} elt
 * @constructor
 */
function RowDragController(elt) {
    this.elt = elt;
    this._isDragging = false;
    this.prevDragedRow = null;
    this.ev_clickOutDraggedRow  = this.ev_clickOutDraggedRow.bind(this);
}

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 (0,utils.findMaxZIndex)(e);
};


RowDragController.prototype._updateClass = function () {
    this.row.body.rows.forEach((row, i) => {
        if (!row._elt) return;
        if (this.newIdx < this.rowIdx) {
            if (i < this.newIdx || i >= this.rowIdx) {
                row._elt.addStyle('transform', `translate(0, 0)`);
            }
            else if (i < this.rowIdx) {
                row._elt.addStyle('transform', `translate(0, ${this.rowRect.height}px)`);
            }
        }
        else if (this.newIdx > this.rowIdx) {
            if (i <= this.rowIdx || i > this.newIdx) {
                row._elt.addStyle('transform', `translate(0, 0)`);
                row._elt._transformY = this.rowRect.height;
            }
            else if (i <= this.newIdx) {
                row._elt.addStyle('transform', `translate(0, ${-this.rowRect.height}px)`);
                row._elt._transformY = -this.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, (elt, i) => {
        var rect = Rectangle/* default.fromClientRect */.Z.fromClientRect(elt.getBoundingClientRect());
        rect.y -= elt._transformY || 0;
        return rect;
    });
};

RowDragController.prototype._computeNewIdx = function () {
    var firstBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.row.body.elt.firstChild.getBoundingClientRect());
    var delta = firstBound.A().sub(this.bounds[0].A());
    var cBound = Rectangle/* default.fromClientRect */.Z.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;
    if (this.prevDragRow) {
        this.prevDragRow.elt.removeClass('as-dragged');
        this.prevDragRow = null;
    }
    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 = (0,ACore._)({
        class: 'as-dt-body-row-cloned-ctn',
        style: {
            zIndex: this._getZIndex() + 20,
            cursor: 'move',
            opacity: 0.9
        },
        child: (0,ACore.$)(this._cloneTableRow(this.row)).removeStyle('transform')
    }).addTo(document.body);
    this.row.elt.addClass('as-dragging');
    this.rowRect = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.row.elt.getBoundingClientRect());
    this.elt.addStyle('--dt-dragging-row-height', this.rowRect.height);
    this.viewportRect = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.elt.$viewport.getBoundingClientRect());
    this.headerRect = Rectangle/* default.fromClientRect */.Z.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 = (0,ACore.$)(row.body.table.elt.cloneNode(false))
        .addStyle({ tableLayout: 'fixed', width: row.body.table.elt.getBoundingClientRect().width + 'px' });
    var tBodyElt = (0,ACore.$)(row.body.elt.cloneNode(false));
    tableElt.addChild(tBodyElt);
    var rowElt = (0,ACore.$)(this.row.elt.cloneNode(false)).addStyle({
        height: this.row.elt.getBoundingClientRect().height + 'px',
        backgroundColor: '#FFF9C4'//this.row.elt.getComputedStyleValue('background-color')
    });
    tBodyElt.addChild(rowElt);
    this.row.cells.forEach(cell => {
        var width = cell.elt.getBoundingClientRect().width;
        (0,ACore.$)(cell.elt.cloneNode(true)).addStyle({ width: width + 'px' }).addTo(rowElt);
    });
    return tableElt;
};


RowDragController.prototype.ev_drag = function (event) {
    var newY = event.currentPoint.sub(this.pointeroffset).y;
    this.ctn.addStyle('top', newY + 'px');
    clearTimeout(this._dragOutTO);

    var ctnBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.ctn.getBoundingClientRect());
    var onDragOutPositive = () => {
        var dy = ctnBound.D().y - this.viewportRect.D().y;
        dy /= 1000 / 60 / 4 * this.rowRect.height;
        dy = Math.min(dy, this.elt.$vscrollbar.innerHeight - this.elt.$vscrollbar.outerHeight - this.elt.$vscrollbar.innerOffset);

        if (dy > 0.5) {//dy may be very small
            this.elt.$vscrollbar.innerOffset += dy;
            this.elt.$vscrollbar.emit('scroll');
        }
        this._computeNewIdx();
        this._updateClass();
        clearTimeout(this._dragOutTO);
        this._dragOutTO = setTimeout(onDragOutPositive, 33);
    };

    var onDragOutNegative = () => {
        var dy = ctnBound.y - this.headerRect.D().y;
        dy /= 1000 / 60 / 4 * this.rowRect.height;
        dy = Math.max(dy, -this.elt.$vscrollbar.innerOffset);
        if (dy < -0.5) {//dy may be very small
            this.elt.$vscrollbar.innerOffset += dy;
            this.elt.$vscrollbar.emit('scroll');
        }
        this._computeNewIdx();
        this._updateClass();
        clearTimeout(this._dragOutTO);
        this._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(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)
        }
        if (this.prevDragRow) {
            this.prevDragRow.elt.removeClass('as-dragged');
        }

        this.prevDragRow = this.row;
        this.prevDragRow.elt.addClass('as-dragged');

        this.elt.emit('orderchange', eventData, this.body.table.wrapper);


        setTimeout(() => {
            document.addEventListener('click', this.ev_clickOutDraggedRow);
        }, 400);
    }
};

RowDragController.prototype.ev_clickOutDraggedRow = function (event) {
    var finished = false;
    if (!this.prevDragRow) {
        finished = true;
    }
    else if (event.target && AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(event.target, this.prevDragRow.elt)) {
        finished = false;
    }
    else if (event.target && event.target.classList
        && (event.target.classList.contains('absol-scrollbar-button') || event.target.classList.contains('absol-scrollbar'))) {
        finished = false;
    }
    else {
        finished = true;
    }

    if (finished) {
        if (this.prevDragRow) {
            this.prevDragRow.elt.removeClass('as-dragged');
            this.prevDragRow = null;
        }
        document.removeEventListener('click', this.ev_clickOutDraggedRow);
    }
};

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__(4112);
// EXTERNAL MODULE: ./node_modules/absol/src/JSMaker/generator.js
var generator = __webpack_require__(2914);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/objectmergetool/dialog/OMTSelectOptionsDialog.js









/***
 * @extends Fragment
 * @param {OMTBaseType} node
 * @constructor
 */
function OMTSelectOptionsDialog(node) {
    Fragment/* default.call */.Z.call(this);
    this.node = node;
    this.calc();
    this.getView();
    this.start();
}

OOP/* default.mixClass */.ZP.mixClass(OMTSelectOptionsDialog, Fragment/* default */.Z);

OMTSelectOptionsDialog.prototype.calc = function () {
    this.options = this.node.getSelectOptions();
    this.curHash = this.node.getHash();
    this.selectedHash = this.curHash;
    this.selectedOption = null;
    this.ident = (0,stringGenerate.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 = (0,ACore._)({
        tag: RadioButton/* default.tag */.Z.tag,
        style: {
            marginRight: '10px'
        },
        props: {
            name: this.ident,
            checked: nodeHash === this.curHash
        },
        on: {
            change: function () {
                if (radio.checked) {
                    self.selectedHash = nodeHash;
                    self.selectedOption = opt;
                }
            }
        }
    });
    return (0,ACore._)({
        class: 'as-omt-option-row',
        child: [
            radio,
            node.elt
        ]
    });
};

OMTSelectOptionsDialog.prototype.createView = function () {
    var self = this;
    this.$view = (0,ACore._)({
        tag: MessageDialog/* default.tag */.Z.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 (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((opt, i) => this._makeOptionRow(opt, i, dict)).filter(x => !!x);
    if (!dict[this.curHash]) {
        rows.unshift(this._makeOptionRow(this.node.export(), -1, dict));
    }

    this.$view.addChild(rows);

    this.$modal = (0,ACore._)({
        tag: Modal/* default.tag */.Z.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 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 = (0,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(command => ({
                    tag: FlexiconButton/* default.tag */.Z.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 = (0,ACore.$)('.as-omt-field-command-ctn', this.elt);
    this.$rawCtn = (0,ACore.$)('.as-omt-field-raw-ctn', this.elt);
    this.$viewModeBtn = (0,ACore._)({
        tag: FlexiconButton/* default.tag */.Z.tag,
        attr: {
            'data-command': 'view_mode'
        },
        props: {
            icon: 'span.mdi.mdi.mdi-code-braces',//code-braces
            title: 'View Raw'
        },
        on: {
            click: function () {
                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 = (0,ACore.$)('.as-omt-field-body', this.elt);
};

OMTBaseType.prototype.updateRaw = function () {
    var rawElt = (0,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: (0,generator/* generateJSVariable */.NQ)(this.export())}
            }
        ]
    };
};

OMTBaseType.prototype.assign = function (o) {
    this.value = o;
    this.$body.clearChild().addChild((0,ACore._)({
        tag: 'code',
        child: {
            text: (0,generator/* generateJSVariable */.NQ)(o)
        }
    }));
};

OMTBaseType.prototype.getHash = function () {
    return (0,stringUtils/* stringHashCode */.$)((0,generator/* generateJSVariable */.NQ)(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(x => !!x);
    var name = this.descriptor.name;
    return parentOptions.map(ot => ot[name]).filter(ot => 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






/***
 * @extends OMTBaseType
 * @constructor
 */
function OMTStruct() {
    type_OMTBaseType.apply(this, arguments);
    this.children = (this.descriptor.fields || []).map(field => type_OMTBaseType.make(this.tool, this, field));
    this.$body.addChild(this.children.map(child => child.elt));
    this.data = null;
}


OOP/* default.mixClass */.ZP.mixClass(OMTStruct, type_OMTBaseType);

OMTStruct.prototype.type = 'struct';


OMTStruct.prototype.assign = function (o) {
    if (o !== null && typeof o === "object") {
        this.elt.removeClass('as-null');
        this.children.forEach(child => {
            var name = child.descriptor.name;
            child.assign(o[name]);
        });
    }
    else {
        this.elt.addClass('as-null');
    }
};

OMTStruct.prototype.export = function () {
    return this.children.reduce((ac, cr) => {
        ac[cr.descriptor.name] = cr.export();
        return ac;
    }, {});
};

OMTStruct.prototype.getHash = function () {
    var hash = this.children.map(c => c.getHash()).join('_');
    return (0,stringUtils/* 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((child=> 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;
}


OOP/* default.mixClass */.ZP.mixClass(OMTString, type_OMTBaseType);
type_OMTBaseType.classes.string = OMTString;

OMTString.prototype.assign = function (o) {
    this.value = o;
    this.$body.clearChild();
    this.$value = (0,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);
}


OOP/* default.mixClass */.ZP.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 = (0,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 = (0,utils.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);
}


OOP/* default.mixClass */.ZP.mixClass(OMTImage, type_OMTBaseType);

type_OMTBaseType.classes.image = OMTImage;
type_OMTBaseType.prototype.type = 'image';

OMTImage.prototype.assign = function (o) {
    this.value = o;
    var title = '';
    this.$body.clearChild();
    var 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 = (0,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;
}

OOP/* default.mixClass */.ZP.mixClass(OMTEnum, type_OMTBaseType);

type_OMTBaseType.classes["enum"] = OMTEnum;

OMTEnum.prototype.render = function () {
    type_OMTBaseType.prototype.render.call(this);
    this.$value = (0,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(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(child => child.getHash());
    res.sort((a, b) => a - b);
    return (0,DataStructure_Array.arrayUnique)(res);
}

/***
 * @extends Fragment
 * @param {OMTArray} node
 * @constructor
 */
function OMTArrayMergeDialog(node) {
    Fragment/* default.call */.Z.call(this);
    this.node = node;
    this.calc();
    this.getView();
    this.start();
}

OOP/* default.mixClass */.ZP.mixClass(OMTArrayMergeDialog, Fragment/* default */.Z);


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(cr => {
                var hash = cr.getHash();
                if (dict[hash]) return;
                dict[hash] = true;
                itemArr.push(cr.export());
                hashArr.push(hash);
            });
        }
    }

    if (this.curHash === hashArr && (0,DataStructure_Array.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 = (0,stringUtils/* stringHashCode */.$)(hashArrayOf(node).join(','));
    if (dict[nodeHash]) return null;
    dict[nodeHash] = node;
    var checked = (0,DataStructure_Array.arrayUnique)(this.curHash.concat(hashArrayOf(node))).length === this.curHash.length;
    if (checked) this.selectedNodes[nodeHash] = node;
    var radio = (0,ACore._)({
        tag: CheckBoxInput/* default.tag */.Z.tag,
        style: {
            marginRight: '10px'
        },
        props: {
            checked: checked
        },
        on: {
            change: function () {
                if (radio.checked) {
                    self.selectedNodes[nodeHash] = node;
                }
                else {
                    delete self.selectedNodes[nodeHash];
                }
                self.$view.$actionBtns[1].disabled = Object.keys(self.selectedNodes).length === 0;
            }
        }
    });
    return (0,ACore._)({
        class: 'as-omt-option-row',
        child: [
            radio,
            node.elt
        ]
    });
};

OMTArrayMergeDialog.prototype.createView = function () {
    var self = this;
    /***
     * @type MessageDialog
     */
    this.$view = (0,ACore._)({
        tag: MessageDialog/* default.tag */.Z.tag,
        class: 'as-omt-dialog',
        props: {
            dialogTitle: {mlKey:'txt_option'},
            dialogActions: [
                {
                    text: 'OK',
                    name: 'ok'
                },
                {
                    text: 'Cancel',
                    name: 'cancel'
                }
            ]
        },
        on: {
            action: function (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((opt, i) => this._makeOptionRow(opt, i, dict)).filter(x => !!x);

    this.$view.addChild(rows);

    this.$modal = (0,ACore._)({
        tag: Modal/* default.tag */.Z.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;
}


OOP/* default.mixClass */.ZP.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) {
    this.$body.clearChild();
    this.children = (o || []).map((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(c => c.elt));
};

OMTArray.prototype.export = function () {
    return this.children.map(c => 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((child => 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) {
    Fragment/* default.call */.Z.call(this);
    this.node = node;
    this.calc();
    this.getView();
    this.start();
}

OOP/* default.mixClass */.ZP.mixClass(OMTEnumSetMergeDialog, Fragment/* default */.Z);

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((0,DataStructure_Array.arrayUnique)(this.currentValues.concat(selectedValues)));
        this.node.notifyChange();
    }
};

OMTEnumSetMergeDialog.prototype._getCurrent = function () {
    var selectedValues = this.selectOptions.reduce((ac, cr, i) => {
        if (this.selected[i]) ac = ac.concat(cr);
        return ac;
    }, []);
    selectedValues = (0,DataStructure_Array.arrayUnique)(selectedValues);
    return selectedValues;
}

OMTEnumSetMergeDialog.prototype._makeOptionRow = function (opt, i) {
    var self = this;
    var checked = (0,DataStructure_Array.arrayUnique)(this.currentValues.concat(opt)).length === (0,DataStructure_Array.arrayUnique)(this.currentValues).length;
    this.selected[i] = checked;
    var checkbox = (0,ACore._)({
        tag: CheckBoxInput/* default.tag */.Z.tag,

        style: {
            marginRight: '10px',
        },
        props: {
            checked: checked
        },
        on: {
            change: function () {
                self.selected[i] = checkbox.checked;
                var currentValues = self._getCurrent();
                self.previewNode.assign(currentValues);
                self.$view.$actionBtns[1].disabled = currentValues.length === 0;
            }
        }
    });

    var mSelect = (0,ACore._)({
        tag: js_MultiCheckTreeMenu.tag,
        class: 'as-border-none',
        props: {
            pendingValues: opt,
            readOnly: true
        }
    });

    return (0,ACore._)({
        class: 'as-omt-option-row',
        child: [
            checkbox,
            mSelect
        ]
    });
};

OMTEnumSetMergeDialog.prototype.createView = function () {
    var self = this;
    this.$optionRows = this.selectOptions.map((opt, i) => this._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 = (0,ACore._)({
        tag: MessageDialog/* default.tag */.Z.tag,
        class: ['as-omt-dialog'],
        props: {
            dialogTitle: 'Merge',
            dialogActions: [
                {
                    text: 'OK',
                    name: 'ok'
                },
                {
                    text: 'Cancel',
                    name: 'cancel'
                }
            ],

        },
        on: {
            action: function (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(items => {
        (0,ACore.$$)(js_MultiCheckTreeMenu.tag, this.$view).forEach(elt => {
            elt.items = items;
            elt.values = elt.pendingValues;
        });
    });


    this.$modal = (0,ACore._)({
        tag: Modal/* default.tag */.Z.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();
}

OOP/* default.mixClass */.ZP.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 = (0,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 textItems = this.export().map(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(text => ({
                    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);
}


OOP/* default.mixClass */.ZP.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 = (0,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 (0,utils.calcDTQueryHash)(this.value);
};


OMTFileArray.prototype.getRaw = function () {
    var infoArr = (this.value || []).map(it => (0,utils.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(info => ({
                    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);
}


OOP/* default.mixClass */.ZP.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 = (0,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 Color_Color/* default */.Z) {
            color = o.toString("hex8");
        } else if (typeof o === "string") {
            color = Color_Color/* default.parse */.Z.parse(o).toString("hex8");
        }
    } catch (err) {

    }
    this.color = color;
    this.$value.addStyle('--omt-color-value', color);
};


OMTColor.prototype.getHash = function () {
    return (0,stringUtils/* stringHashCode */.$)(this.color+'');
};


OMTColor.prototype.getRaw = function () {
    var color = Color_Color/* default.parse */.Z.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);
}


OOP/* default.mixClass */.ZP.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 = (0,ACore._)({
        tag: CheckBoxInput/* default */.Z,
        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;
}


OOP/* default.mixClass */.ZP.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 = (0,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);
}


OOP/* default.mixClass */.ZP.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 = (0,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);
}


OOP/* default.mixClass */.ZP.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 = (0,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;
}

OOP/* default.mixClass */.ZP.mixClass(OMTEnumOfPair, type_OMTBaseType);

type_OMTBaseType.classes["enum<pair>"] = OMTEnumOfPair;
OMTEnumOfPair.prototype.type = 'enum<pair>';

OMTEnumOfPair.prototype.render = function () {
    type_OMTBaseType.prototype.render.call(this);
    this.$value = (0,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(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 = (0,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 (0,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 (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 () {
        return this._descriptor;
    }
};

ObjectMergeTool.property.objects = {
    set: function (value) {
        this._objects = value || [];
        this._tryFlushData();
    },
    get: function () {
        return this._objects;
    }
};

ObjectMergeTool.property.data = {
    get: function () {
        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');
    }
};


ACore/* default.install */.Z.install(ObjectMergeTool);

/* harmony default export */ const objectmergetool_ObjectMergeTool = (ObjectMergeTool);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tokenizeinput.css
var tokenizeinput = __webpack_require__(1323);
;// 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);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/tokenizeiput/TITextController.js
var TITextController = __webpack_require__(1875);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/tokenizeiput/tiutils.js
var tiutils = __webpack_require__(3421);
;// 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 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 = (0,utils.getSelectionRangeDirection)(range);
    var newRange;

    var 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 ((0,tiutils/* isTokenText */.tk)(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 (!(0,tiutils/* isText */.Gs)(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 (!(0,tiutils/* isText */.Gs)(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 (!(0,tiutils/* isText */.Gs)(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 ((0,tiutils/* isTokenText */.tk)(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;
            }
            (0,utils.setSelectionRange)(newRange, direction === 'backward');
        }
        var nextToken, nextText;
        if ((0,tiutils/* isToken */.hD)(endCtn.nextSibling)) {
            nextToken = endCtn.nextSibling;
            displayText = nextToken.getAttribute('data-display');
            nextText = (0,tiutils/* getFirstTextNode */.ot)(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 (0,tiutils/* findNextTextNode */.M4)(this.elt, current);
};

TISelectionController.prototype.getPrevTextNode = function (current) {
    return (0,tiutils/* findPrevTextNode */.LD)(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 ((0,tiutils/* isNewLine */.K0)(nodes[nodes.length - 1])) nodes.pop();
    var node;
    for (var i = 0; i < nodes.length; ++i) {
        node = nodes[i];
        if ((0,tiutils/* isText */.Gs)(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 ((0,tiutils/* isToken */.hD)(node)) {
            st += node.getAttribute('data-text');
            if (!startCtn && st.length >= start) {
                startCtn = (0,tiutils/* getFirstTextNode */.ot)(node);
                startOffset = startCtn.data.length;
            }

            if (!endCtn && st.length >= end) {
                endCtn = (0,tiutils/* getFirstTextNode */.ot)(node);
                endOffset = endCtn.data.length;
            }
        }
        else if ((0,tiutils/* isNewLine */.K0)(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 ((0,tiutils/* isNewLine */.K0)(node)) {
                startCtn = this.elt;
                startOffset = nodes.length;
            }
            else if ((0,tiutils/* isText */.Gs)(node)) {
                startCtn = node;
                startOffset = node.length;
            }
            else {
                startCtn = (0,tiutils/* getLastTextNode */.No)(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);
    (0,utils.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 ((0,tiutils/* isNewLine */.K0)(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 ((0,tiutils/* isTokenText */.tk)(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 ((0,tiutils/* isTokenText */.tk)(endCtn)) {
        endCtn = endCtn.parentElement;
        if (endOffset > 0) endOffset = endCtn.getAttribute('data-text').length;
    }

    var start = undefined;
    var end = undefined;
    var direction = (0,utils.getSelectionRangeDirection)(range);
    var st = '';
    var node;
    for (var i = 0; i < nodes.length; ++i) {
        node = nodes[i];
        if ((0,tiutils/* isText */.Gs)(node)) {
            if (start === undefined && node === startCtn) {
                start = st.length + startOffset;
            }
            if (end === undefined && node === endCtn) {
                end = st.length + endOffset;
            }
            st += node.data;
        }
        else if ((0,tiutils/* isToken */.hD)(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 ((0,tiutils/* isNewLine */.K0)(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 = BrowserDetector/* default.isSafari */.Z.isSafari ? 100 : 1;

/***
 * @extends AElement
 * @constructor
 */
function TokenizeHyperInput() {
    this._tagMap = {};
    this.$br = (0,ACore.$)('br', this);
    this.historyCtrl = new tokenizeiput_TIHistory(this);
    this.textCtrl = new TITextController/* default */.Z(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 (0,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 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(item => item.type.indexOf('image') >= 0);

        var fileItems = items.filter(item => item.type !== 'text/plain' && item.type.indexOf('image') < 0);
        var plainTextItems = items.filter((item) => 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(item => 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(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) {
    this.prevKey = { time: new Date().getTime(), value: (0,keyboard/* keyboardEventToKeyBindingIdent */.Ej)(event) };
    setTimeout(() => {
        this.selectionCtrl.onSelect();
        this.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 (value) {
        value = value || '';
        this.textCtrl.setText(value);
        // this.applyData(value, value.length);
        this.commitChange(value, value.length);
    },
    get: function () {
        return this.textCtrl.getText();
    }
};

TokenizeHyperInput.property.disabled = {
    set: function (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 () {
        return this.hasClass('as-disabled');
    }
};

TokenizeHyperInput.property.tagList = {
    get: function () {
        return (0,utils.getTagListInTextMessage)(this.value);
    }
};

TokenizeHyperInput.property.tagMap = {
    set: function (o) {
        o = o || {};
        this._tagMap = o;
        Array.prototype.forEach.call(this.childNodes, 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 = this._tagMap[id];
                if (text) {
                    child.getAttribute('data-display', '@' + text);
                    child.firstChild.data = '@' + text;
                }
            }
        })
    },
    get: function () {
        return this._tagMap;
    }
}


ACore/* default.install */.Z.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 (value) {
        if (value) this.addClass('as-enable-search');
        else this.removeClass('as-enable-search');
    },
    /***
     * @this SelectListBox
     */
    get: function () {
        return this.hasClass('as-enable-search');
    }
};

SelectListBoxPropHandlers.items = {
    /***
     * @this SelectListBox
     * @param {{}} items
     */
    set: function (items) {
        this.itemListCtrl.setItems(items);
    },
    get: function () {
        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 () {
        if (!this._elt) {
            this._elt = (0,ACore._)({
                tag: SelectListItem/* default.tag */.ZP.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) {
    this.elt = elt;
    this.$scroller = this.elt.$scroller;
    this.$content = this.elt.$content;
    this.items = items;
    this.children = items.map(item => new selectlistbox_SLBItemHolder(this, item));
    this.children.forEach((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 = (0,ACore._)({
        class: 'as-select-list-box-page',
        style: {
            top: 20 * idx * 50 + 'px'
        },
        child: children.map(child => 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 maxHeight = Math.max(4096, (0,Dom/* getScreenSize */.tE)().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((u, i) => this._getPageElt(startIdx + i));
    Array.prototype.forEach.call(this.$content.childNodes, elt => {
        if (needViewPages.indexOf(elt) < 0) {
            elt.remove();
        }
    });
    needViewPages.forEach(elt=>{
       if (!elt.parentElement){
           this.$content.addChild(elt);
       }
    });
}


function SLBModeSearch(elt, items) {
    this.items = items;
}

OOP/* default.mixClass */.ZP.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));
}

OOP/* default.mixClass */.ZP.mixClass(SLBItemListController, ListDictionary/* default */.Z)


SLBItemListController.itemHeight = 20;
SLBItemListController.preLoadN = 3;
SLBItemListController.prototype.toLoadNextY = 200;

SLBItemListController.prototype.getItems = function () {
    return (0,utils.copySelectionItemArray)(this.items);

};

SLBItemListController.prototype.setItems = function (items) {
   this.items = (0,utils.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 (0,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;

ACore/* default.install */.Z.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__(924);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PathMenu.js





/***
 * @extends AElement
 * @constructor
 */
function PathMenu() {
    this._path = [];
    this.$items = [];
}


PathMenu.tag = 'PathMenu'.toLowerCase();
PathMenu.render = function () {
    return (0,ACore._)({
        attr: {
            tabindex: '1'
        },
        extendEvent: ['press', 'change'],
        class: 'as-path-menu'
    });
};


PathMenu.prototype._makeItem = function (data, idx) {
    var self = this;
    var button = (0,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 && AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(document.activeElement, self) && self.hasClass('as-opening-item')) {
            if (button.quickMenu) button.quickMenu.open();
        }
    });

    var extendIconElt = (0,ACore.$)('.as-ribbon-split-button-extend .mdi', button);

    var primaryBtn = (0,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 = (0,ACore._)(data.icon);
    }
    else if (data.iconSrc) {
        icon = (0,ACore._)({ tag: 'img', props: { src: data.iconSrc } })
    }

    if (icon) {
        if (icon.parentElement) icon = (0,ACore.$)(icon.cloneNode(true));
        icon.addClass('as-ribbon-split-button-icon');
        primaryBtn.addChildBefore(icon, primaryBtn.firstChild);
    }

    var quickTrigger = (0,ACore.$)('.as-ribbon-split-button-extend', button);


    if (data.items && data.items.length > 0) {
        button.quickMenu = QuickMenu/* default.toggleWhenClick */.Z.toggleWhenClick(quickTrigger, {
            getMenuProps: function () {
                return {
                    items: data.items.map(function (it, menuIndex) {
                        if (typeof it === "string") return it;
                        if (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 () {
                self.addClass('as-opening-item');
                extendIconElt.addClass('mdi-rotate-90');
            },
            onClose: function () {
                self.removeClass('as-opening-item');
                extendIconElt.removeClass('mdi-rotate-90');
            },
            onSelect: function (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 (path) {
        this._path = path || [];
        this.$items.forEach(elt => elt.remove());
        this.$items = this._path.map((it, i) => this._makeItem(it, i));
        this.addChild(this.$items);
    },
    get: function () {
        return this._path;
    }
};

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


MCTMPropHandlers.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};



MCTMPropHandlers.items = {
    set: function (items) {
        this.$box.items = items;
        this.tokenCtrl.updateFromViewValues();
    },
    get: function () {
        return this.$box.items;
    }
};

MCTMPropHandlers.values = {
    set: function (values) {
        this.$box.values = values || [];
        this.tokenCtrl.updateFromViewValues();
    },
    get: function () {
        if (this.isFocus) {
            return this.savedValues;
        }
        else {
            return this.$box.values;
        }
    }
};


MCTMPropHandlers.leafOnly = {
    set: function (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 () {
        return this.hasClass('as-leaf-only');
    }
};


MCTMPropHandlers.isFocus = {
    /***
     * @this MultiCheckTreeMenu
     * @param value
     */
    set: function (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 (!(0,DataStructure_Array.arrayCompare)(this.savedValues, newValues)) {
                this.notifyChange();
            }
            else {
                this.tokenCtrl.updateFromViewValues();
            }
            this.savedValues = this.values;


        }
    },
    get: function () {
        return this.hasClass('as-focus');
    }
};


MCTMPropHandlers.enableSearch = {
    set: function (value){
        this.$box.enableSearch = value;
    },
    get: function (){
        return this.$box.enableSearch ;
    }
};

/* harmony default export */ const multichecktreemenu_MCTMPropHandlers = (MCTMPropHandlers);


/**************************** ADAPT OLD VERSION **********************************************************************/

MCTMPropHandlers.$checkTreeBox = {
    get: function () {
        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 () {
    this.$box.remove();
    setTimeout(() => {
        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 (0,ACore._)({
        tag: js_SelectBoxItem,
        on: {
            close: function () {
                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 = (0,ACore._)({
        tag: this.classes.Box
    });
    this.$itemCtn = (0,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 (0,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;

ACore/* default.install */.Z.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((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((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 = (0,ACore.$)('.am-check-tree-item-text', this).firstChild;
    this.$desc = (0,ACore.$)('.am-check-tree-item-desc', this).firstChild;
    this.$iconCtn = (0,ACore.$)('.am-check-tree-item-icon-ctn', this);
    this.$checkbox = (0,ACore.$)('checkboxinput', this)
        .on('change', this.eventHandler.checkboxChange);
    this.addEventListener('click', this.eventHandler.click);

}

OOP/* default.mixClass */.ZP.mixClass(CheckTreeLeafItem, MCheckTreeItem);

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

CheckTreeLeafItem.render = function () {
    return (0,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);
}

OOP/* default.mixClass */.ZP.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');

}

OOP/* default.mixClass */.ZP.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.prototype.findItemByValue = function (value) {
    return this.itemListCtrl.getItemByValue(value);
};


MCheckTreeLeafBox.eventHandler = Object.assign({}, checktreebox_MCheckTreeBox.eventHandler);

ACore/* default.install */.Z.install(MCheckTreeLeafBox);


/* harmony default export */ const checktreeleafbox_MCheckTreeLeafBox = (MCheckTreeLeafBox);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/multichecktreeleafmenu/MultiCheckTreeLeafMenu.js






/**
 * @extends MultiCheckTreeMenu
 * @constructor
 */
function MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu() {
    multichecktreemenu_MultiCheckTreeMenu.apply(this, arguments)
}

OOP/* default.mixClass */.ZP.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.prototype.findItemsByValue = function (value) {
    return this.$box.findItemByValue(value);
};

MultiCheckTreeLeafMenu_MultiCheckTreeLeafMenu.property = multichecktreeleafmenu_MCTLMPropHandler;

ACore/* default.install */.Z.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 (items) {
        this.itemListCtrl.setItems(items);
        if ('savedValue' in this) {
            this.modes.normal.setValue(this.savedValue, this.strictValue);
        }
    },
    get: function () {
        return this.itemListCtrl.getItems();
    }
};

DSBPropHandlers.value = {
    set: function (value) {
        this.savedValue = value;
        this.modes.normal.setValue(value, this.strictValue);
    },
    get: function () {
        return this.modes.normal.getValue(this.strictValue);
    }
};

DSBPropHandlers.selectedItem = {
    get: function (){
        return  this.modes.normal.getSelectedItem();
    }
};


DSBPropHandlers.strictValue = {
    set: function (value) {
        if (value) {
            this.$box.addClass('as-strict-value');
        }
        else {
            this.$box.removeClass('as-strict-value');
        }
    },
    get: function () {
        return this.$box.hasClass('as-strict-value');
    }
};

DSBPropHandlers.enableSearch = {
    set: function (value) {
        if (value) {
            this.$box.addClass('as-enable-search');
        }
        else {
            this.$box.removeClass('as-enable-search');
        }
    },
    get: function () {
        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) {
    this.items = items;
    this.value = [undefined, undefined];
    this.elt = elt;
    this.$lists = this.elt.$lists;
    this.$leftItems = items.map((item) => this._makeLeftItem(item));
    this.$leftItemDict = this.$leftItems.reduce((ac, cr) => {
        ac[(0,utils.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 = (0,ACore._)({
        class: 'absol-selectlist-item',
        attr: {
            'data-key': (0,utils.keyStringOf)(item.value)
        },
        child: {
            tag: 'span',
            class:'absol-selectlist-item-text',
            child: { text: item.text }
        },
        on: {
            click: function () {
                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 = (0,ACore._)({
        class: 'absol-selectlist-item',
        attr: {
            'data-key': (0,utils.keyStringOf)(item.value)
        },
        child: {
            tag: 'span',
            class:'absol-selectlist-item-text',
            child: { text: item.text }
        },
        on: {
            click: function () {
                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[(0,utils.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 key = (0,utils.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(sItem => this._makeRightItem(leftItem, sItem));
            holder.dict = holder.list.reduce((ac, cr) => {
                ac[(0,utils.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[(0,utils.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/* default */.Z;


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[(0,utils.keyStringOf)(value[0])]) {
        value[0] = this.items[0] && this.items[0].value;
    }
    var rightHolder = this.rightListDict[(0,utils.keyStringOf)(value[0])];
    if (rightHolder) {
        if (!rightHolder.dict[(0,utils.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[(0,utils.keyStringOf)(value[0])]) {
        item[0] = this.$leftItemDict[(0,utils.keyStringOf)(value[0])].itemData;
    }
    var rightHolder = this.rightListDict[(0,utils.keyStringOf)(value[0])];
    if (rightHolder) {
        if (rightHolder.dict[(0,utils.keyStringOf)(value[1])]) {
            item[1] = rightHolder.dict[(0,utils.keyStringOf)(value[1])].itemData;
        }
    }

    return item;
}


DSBModeNormal.prototype.viewToSelected = function () {
    setTimeout(() => {
        if (this.$selectedLeft) {
            (0,utils.vScrollIntoView)(this.$selectedLeft);
        }
        if (this.$selectedRight) {
            (0,utils.vScrollIntoView)(this.$selectedRight);
        }
    }, 50);
};

/***
 * @extends DSBModeNormal
 * @param elt
 * @param items
 * @constructor
 */
function DSBModeSearch(elt, items) {
    DSBModeNormal.apply(this, arguments);
}

OOP/* default.mixClass */.ZP.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[(0,utils.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[(0,utils.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 = (0,utils.copySelectionItemArray)(items);
    this._searchItems = (0,search/* prepareSearchForList */.Lb)((0,utils.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 (0,utils.copySelectionItemArray)(this.items);
};


MDSBItemListController.prototype.makeSearch = function (query) {
    if (this._searchCache[query]) return this._searchCache[query].resetAndGet();


    var items = this._searchItems;

    var queryItem = (0,search/* default */.ZP)({ text: query });
    var maxScore = 0;
    var holders = items.map(function (item) {
        var h = {
            item: item,
            itemScore: (0,search/* calcItemMatchScore */.lk)(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 = (0,search/* calcItemMatchScore */.lk)(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 (){
            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__(560);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectbox/MDualSelectBox.js









/***
 * @extends {AElement}
 * @constructor
 */
function MDualSelectBox() {
    this.$box = (0,ACore.$)('.am-dropdown-box', this);
    this.$lists = (0,ACore.$$)('.as-dual-select-box-list', this);
    this.itemListCtrl = new dualselectbox_MDSBItemListController(this);
    this.$searchInput = (0,ACore.$)(Searcher/* default.tag */.Z.tag, this)
        .on('stoptyping', this.eventHandler.searchModify);
    this.$closeBtn = (0,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 (0,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/* default.tag */.Z.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 ((0,utils.keyStringOf)(newValue) !== (0,utils.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 || (0,EventEmitter/* hitElement */.EY)(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 (){
    this.$box.remove();
    setTimeout(()=>{
        this.elt.on('click', this.ev_click);
    }, 50);
};

/* harmony default export */ const dualselectmenu_MDSMBoxController = (MDSMBoxController);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/VarScope.js
var VarScope = __webpack_require__(1312);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dualselectmenu/DSMPropsHandlers.js



var DSMPropsHandlers = {};


DSMPropsHandlers.isFocus = {
    set: function (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 ((0,utils.keyStringOf)(this.savedValue) !== (0,utils.keyStringOf)(this.$box.value)) {
                delete this.savedValue;
                this.notifyChange();
            }
        }
    },
    get: function () {
        return this.hasClass('as-focus');
    }
};

DSMPropsHandlers.items = {
    set: function (items) {
        this.$box.items = items;
        if ('pendingValue' in this) {
            this.$box.value = this.pendingValue;
        }
        this.updateText();
    },
    get: function () {
        return this.$box.items;
    }
};

DSMPropsHandlers.value = {
    set: function (value) {
        this.pendingValue = value;
        this.$box.value = value;
        this.updateText();
    },
    get: function () {
        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 (value) {
        this.attr('data-format', value);
        this.updateText();
    },
    get: function () {
        return this.attr('data-format') || '$0, $1';
    }
};

DSMPropsHandlers.strictValue = {
    set: function (value) {
        this.$box.strictValue = value;
        if (value) {
            this.addClass('as-strict-value');
        }
        else {
            this.removeClass('as-strict-value');
        }
    },
    get: function () {
        return this.$box.strictValue;
    }
};


DSMPropsHandlers.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
};


DSMPropsHandlers.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        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 = (0,ACore._)({
        tag: dualselectbox_MDualSelectBox,
    });
    this.$item = (0,ACore.$)('.absol-selectlist-item', this);
    OOP/* default.drillProperty */.ZP.drillProperty(this, this.$box, 'enableSearch');
    this.boxCtrl = new dualselectmenu_MDSMBoxController(this);
    this.strictValue = true;
}


DualSelectMenu_DualSelectMenu.tag = 'DualSelectMenu'.toLowerCase();

DualSelectMenu_DualSelectMenu.render = function () {
    return (0,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((0,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 = (0,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) {
    this.head = head;
    this.data = data;
    this.cells = this.data.cells.map(cellData => new treetable_TTHeadCell(this, cellData));
    this.elt = (0,ACore._)({
        tag:'tr',
        class:'as-tree-table-head-row'
    });
    this.elt.addChild(this.cells.map((cell, i)=> 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) {
    this.data = data;
    this.table = table;
    this.elt = this.table.elt.$head;
    this.rows = (this.data.rows || []).map(rowData => new treetable_TTHeadRow(this, rowData));
    this.elt.clearChild().addChild(this.rows.map(r=> 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 () {
        if (!this._elt) {
            this._elt = (0,ACore._)({
                tag: 'td',
                class: 'as-tree-table-cell',
                props: {
                    ttCell: this
                },
                on: {
                    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") {
                (0,utils.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) {
    this.id = (0,stringGenerate.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(cellData => new treetable_TTCell(this, cellData));

    this.subRows = (this.data.subRows || []).map(rowData => new TTRow(body, rowData, this));
    if (!(0,utils.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.initOpened === 'boolean') {
        this.isOpened = body.table.elt.initOpened;
    }
    else if ((typeof body.table.data.initOpened  === 'number')) {
        this.isOpened = this.level < body.table.data.initOpened ;
    }
}

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(row => 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 (!(0,utils.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(elt => bodyElt.addChildBefore(elt, bf));
    } else {
        bodyElt.addChild(rowElements);
    }
    this.updateSizeUp();
    this.requestParentUpdateContent();
};


TTRow.prototype.close = function () {
    if (!this.isOpened) return;
    var rowElements = this.getRowElements();
    rowElements.shift();
    rowElements.forEach(elt => elt.remove());
    this.isOpened = false;
    if (!(0,utils.isNone)(this.data.id) && this.cells)
        this.body.table.elt.savedState[this.data.id] = this.isOpened;
    this._elt.removeClass('as-is-opened');
    this.updateSizeUp();
    this.requestParentUpdateContent();
};

TTRow.prototype.updateSizeUp = function () {
    this.body.table.elt.notifySizeChange();
};

TTRow.prototype.requestParentUpdateContent = function () {
    var c = this.body.table.elt.parentElement;
    while (c) {
        if (c.updateContent) {
            console.log('update content');
            c.updateContent();
            break;
        }
        else
        c = c.parentElement;
    }
};

TTRow.prototype.remove = function () {
    var idx = -1;
    var rowElements;

    var removeRow = (idx, rows, dataRows) => {
        rows.splice(idx, 1);
        dataRows.splice(idx, 1);
        if (this.clonedRow) this.clonedRow.remove();
        if (this.elt.parentElement) {
            rowElements = this.clonedRow ? this.clonedRow.getRowElements() : this.getRowElements();
            rowElements.forEach(elt => elt.selfRemove());
            ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
        }
        this.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 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(elt => this.body.elt.addChildBefore(elt, bf));
        } else {
            rowElements.forEach(elt => this.body.elt.addChild(elt));
        }
        ResizeSystem/* default.requestUpdateSignal */.Z.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 idx = -1;
    var rowElements;
    var bf;
    var newRow;
    var newClonedRow;
    var needView;

    var makeReplaceRow = (idx, rows, dataRows) => {
        newRow = new TTRow(this.body, newRowData, this.parentRow);
        rows.splice(idx, 1, newRow);
        dataRows.splice(idx, 1, newRowData);
        if (this.clonedRow) {
            newClonedRow = new TTClonedRow(newRow, null, idx);
            this.clonedRow.replace(newClonedRow)
        }
        if (this.elt.parentElement) {
            rowElements = this.clonedRow ? this.clonedRow.getRowElements() : this.getRowElements();
            bf = this.body.elt.findChildAfter(rowElements[rowElements.length - 1]);
            rowElements.forEach(elt => elt.selfRemove());
            rowElements = newClonedRow ? newClonedRow.getRowElements() : newRow.getRowElements();
            if (bf) {
                rowElements.forEach(elt => this.body.elt.addChildBefore(elt, bf));
            } else {
                rowElements.forEach(elt => this.body.elt.addChild(elt));
            }
            ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
        }
        this.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 idx = -1;

    var makeNewRowBefore = (idx, rows, dataRows) => {
        var row, clonedRow;
        var rowElements;
        row = new TTRow(this.body, newRowData, this.parentRow);
        if (this.clonedRow) {
            clonedRow = new TTClonedRow(row, null, idx);
        }
        if (this.elt.parentElement) {
            rowElements = clonedRow ? clonedRow.getRowElements() : row.getRowElements();
            rowElements.forEach(elt => this.body.elt.addChildBefore(elt, this.elt));
            ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
        }
        rows.splice(idx, 0, row);
        dataRows.splice(idx, 0, newRowData);
        if (this.clonedRow) {
            this.clonedRow.addRowBefore(clonedRow);
        }
        this.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 idx = -1;
    var rowElements;
    var bf;

    var makeNewRowAfter = (idx, rows, dataRows) => {
        var row = new TTRow(this.body, newRowData, this.parentRow);
        var clonedRow;
        if (this.clonedRow) clonedRow = new TTClonedRow(row, null, idx);
        if (this.elt.parentElement) {
            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(elt => this.body.elt.addChildBefore(elt, bf));

            } else {
                rowElements.forEach(elt => this.body.elt.addChild(elt));
            }
            ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
        }
        rows.splice(idx + 1, 0, row);
        dataRows.splice(idx + 1, 0, newRowData);
        if (this.clonedRow) this.clonedRow.addRowBefore(clonedRow);
        this.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 () {
        if (!this._elt) {
            this._elt = (0,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((cell, i) => (cell.elt).attr('data-col-idx', i + '')));
            if (this.data.on && (typeof this.data.on.click  === "function")) {
                this._elt.on('click', (event)=>{
                    this.data.on.click.call(this._elt, event, this);
                });
            }
            this.$toggle = (0,ACore.$)('.as-tree-table-toggle', this._elt);
            if (this.$toggle) {
                this.$toggleCell = this.$toggle.parentElement;
                this.$toggleCell.addClass('as-has-toggle');
                this.$toggle = (0,ACore._)({
                    elt: this.$toggle, child: 'toggler-ico',
                    on: {
                        click: () => {
                            if (this.clonedRow) {
                                this.clonedRow.toggle();
                            } else {
                                this.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(row => queryResult[row.id])
            .map((row, i) => new TTClonedRow(row, queryResult, i));
        this.subRows.sort((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((row, i) => new TTClonedRow(row, queryResult, i));
    }
}

['toggle', 'open', 'close', 'getRowElements', 'updateSizeUp'].forEach(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(row => row.detach());
};

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTBody.js



/***
 *
 * @param {TTTable}table
 * @param {TTDBody} data
 * @constructor
 */
function TTBody(table, data) {
    this.table = table;
    this.data = data;
    this.elt = this.table.elt.$body;
    /***
     *
     * @type {TTRow[]}
     */
    this.rows = (this.data.rows || []).map(rowData => 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(row => queryResult[row.id])
            .map((row, i) => new TTClonedRow(row, queryResult, i));
        this.clonedRows.sort((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(row => row.detach());
    this.clonedRows = null;
};

/***
 *
 */
TTBody.prototype.renderRows = function (rows) {
    rows = rows || this.rows;
    this.elt.clearChild().addChild(rows.reduce((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 row = new treetable_TTRow(this, rowData, null);
    this.data.rows.push(rowData);
    this.rows.push(row);
    var elements = row.getRowElements();
    elements.forEach(elt => this.elt.addChild(elt));
    ResizeSystem/* default.requestUpdateSignal */.Z.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 (0,ACore._)(it);
            }));
        }
        else {
            elt.addChild((0,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 (0,ACore._)(it);
            }))
        }
        else {
            elt.addChild((0,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__(7961);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/treetable/TTQueryController.js




/***
 *
 * @param {TreeTable} elt
 * @constructor
 */
function TTQueryController(elt) {
    this.searchMaster = new ListSearchMaster/* default */.Z();
    this.elt = elt;
    this.$filterInputs = [];
    this.$searchInput = null;
    this['request'] = this['request'].bind(this);
    this._waitDestroy();
    this._rtsiIdx = -1;
}

TTQueryController.prototype._waitDestroy = function (){
    setTimeout(()=>{
        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 ((0,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 ((0,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 query = this.makeQuery();
    if (query)
        this.searchMaster.query(query).then(searchResult => {
            this.elt.table.body.applyQueryResult(searchResult);
        });
    else this.elt.table.body.applyQueryResult(null);
};

TTQueryController.prototype.getSearchItems = function () {
    var 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 (){
    if (this._rtsiIdx > 0) return;
    this._rtsiIdx = setTimeout(()=>{
        this._rtsiIdx = -1;
        this.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;
    this.$textCtn = (0,ACore.$)('.as-linear-color-tiny-text', this);
    /***
     *
     * @type {Text}
     */
    this.$text = this.$textCtn.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 (0,ACore._)({
        class: 'as-linear-color-tiny-bar',
        child: [
            {
                tag: 'span',
                class: 'as-linear-color-tiny-text',
                style: { display: 'none' },
                child: { text: '' }
            },
            '.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 (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 () {
        return this._value;
    }
};


LinearColorTinyBar.property.valueText = {
    set: function (value) {
        if (typeof value === "string" || typeof value ===  'number') {
            this.$text.data = value;
            this.$textCtn.removeStyle('display', 'none');
        }
        else {
            this.$text.data = '';
            this.$textCtn.addStyle('display', 'none');
        }
    },
    get: function () {
        return this.$text.data;
    }
};

LinearColorTinyBar.property.colorMapping = {
    set: function (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 () {
        return this._colorMapping;
    }
};

ACore/* default.install */.Z.install(LinearColorTinyBar);

/* harmony default export */ const js_LinearColorTinyBar = (LinearColorTinyBar);


printer.ShareSerializer.addHandlerBefore({
    match: (elt, scope, stack) => {
        return elt.hasClass && elt.hasClass('as-linear-color-tiny-bar-rect');
    },
    exec: (printer, elt, scope, stack, accept) => {
        var bound = Rectangle/* default.fromClientRect */.Z.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 = () => {
    var dynamicCss = new DynamicCSS/* default */.Z();

    dynamicCss.setRules(Array(20).fill(null).reduce((ac, cr, i) => {
        ac[`.as-tree-table-row[data-level="${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="${i}"] .as-tree-table-cell.as-has-toggle`] = {
            'padding-left': `calc(5px + ${2 * i + 1.5}em)`
        }

        ac[`.as-printer-content .as-tree-table-row[data-level="${i}"] .as-tree-table-cell.as-has-toggle`] = {
            'padding-left': `calc(5px + ${2 * i}em)`
        }


        return ac;
    }, {})).commit();
    loadCss = noop/* default */.Z;
}

/***
 * @extends AElement
 * @constructor
 */
function TreeTable() {
    loadCss();
    this._hiddenColumns = [];
    this.$head = (0,ACore.$)('thead', this);
    this.$body = (0,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 (0,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);
};

TreeTable.prototype.getRows = function () {
    return this.table.body.rows.slice();
};

/***
 *
 * @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) {
    if (!this.table) return;
    rowDataArr.forEach(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 counter = 300;
    var wait = () => {
        counter--;
        if (this.isDescendantOf(document.body)) {
            row = this.rowOf(row);
            if (row) {
                (0,utils.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 (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;
        }

        ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
        var td = (0,ACore.$)('td', this);
        if (td) {
            var attachhook = (0,ACore._)('attachhook').once('attached', () => {
                attachhook.remove();
                ResizeSystem/* default.requestUpdateSignal */.Z.requestUpdateSignal();
            }).addTo(td);
        }
    },
    get: function () {
        return this._adapterData;
    }
};

TreeTable.property.filterInputs = {
    set: function (inputs) {

    },
    get: function () {

    }
};

TreeTable.property.searchInput = {
    set: function (input) {
        if (input)
            this.queryCtrl.attachSearchInput(input);
        else this.queryCtrl.detachSearchInput();
    },
    get: function () {
        return this.queryCtrl.$searchInput;
    }
};

TreeTable.property.hiddenColumns = {
    set: function (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)) ResizeSystem/* default.update */.Z.update();
    },
    get: function () {
        return this._hiddenColumns;
    }
};


ACore/* default.install */.Z.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 = (0,ACore._)({
        tag: Hanger/* default */.Z,
        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);
    event.preventDefault();
};

TTRowMoveTool.prototype.ev_dragDeinit = function () {
    this.$body.off(this.dragListenners);
};

TTRowMoveTool.prototype.ev_dragStart = function (event) {
    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 = (0,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 || (0,ACore._)({
        tag: Modal/* default */.Z,
        style: {
            zIndex: zIndex + 201,
            userSelect: 'none'
        }
    });
    this.$modal.addTo(document.body);
    this.$clonedBody = (0,ACore.$)(originBody.cloneNode());
    this.$clonedTable.addChild(this.$clonedBody);
    var originRowElt = row.elt;
    this.$clonedRow = (0,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 || (0,ACore._)('.as-dt-insert-line');
    this.$newPostLine.addStyle({
        left: rowBound.left + 'px',
        width: rowBound.width + 'px'
    });
    this.$newPostLine.addTo(document.body);
    this.rowBond = Rectangle/* default.fromClientRect */.Z.fromClientRect(rowBound);
    this.mouseOffset = event.currentPoint.sub(this.rowBond.A());
    Array.prototype.forEach.call(this.$clonedRow.childNodes, (td, i) => {
        var originTd = originRowElt.childNodes[i];
        var bound = originTd.getBoundingClientRect();
        (0,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(row => this._boundOfRow(row));
    this.idx = this.siblingRows.indexOf(this.row);
    this.newIdx = this.idx;
    this.$scroller = (0,utils.findVScrollContainer)(this.elt);
    if (this.$scroller === document.body.parentElement) this.$scroller = null;
    this.overflowCheckITV = setInterval(() => {
        if (!this.$scroller) return;
        var scrollerBound = this.$scroller.getBoundingClientRect();
        var cloneBound = this.$clonedTable.getBoundingClientRect();
        if (cloneBound.height >= scrollerBound.height) return;

        var newScrollTop = this.$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(this.$scroller.scrollHeight - this.$scroller.clientHeight, newScrollTop);
        }

        newScrollTop = Math.max(0, newScrollTop);
        if (newScrollTop !== this.$scroller.scrollTop) {
            this.$scroller.scrollTop = newScrollTop;
        }
    }, 33);
};

TTRowMoveTool.prototype._boundOfRow = function (row) {
    var rowElements = row.getRowElements();
    var bound = Rectangle/* default.fromClientRect */.Z.fromClientRect(rowElements[0].getBoundingClientRect());
    if (rowElements.length > 1) {
        bound = bound.merge(
            Rectangle/* default.fromClientRect */.Z.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 = Rectangle/* default.fromClientRect */.Z.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': x => x ? (0,datetime.formatDateTime)(x, 'dd/MM/yyyy') : '',
        'DateTime': x => x ? (0,datetime.formatDateTime)(x, 'dd/MM/yyyy HH:mm') : '',
        text: x => (x || '') + ''
    };

    var 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 = (0,utils.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': x => [{ tag: 'span', child: { text: x ? (0,datetime.formatDateTime)(x, 'dd/MM/yyyy') : '' } }],
        'DateTime': x => [{ tag: 'span', child: { text: x ? (0,datetime.formatDateTime)(x, 'dd/MM/yyyy HH:mm') : '' } }],
        text: x => [{ tag: 'span', child: { text: (x || '') + '' } }],
        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: (x, desc) => {
            var dict = getItemDict(desc);
            var item = dict[(0,utils.keyStringOf)(x)];
            if (item) return [{ tag: 'span', child: { text: item.text } }];
            else return [{ tag: 'span', child: { text: '' } }];
        },
        '{enum}': (x, desc) => {
            var dict = getItemDict(desc);
            if (!(x instanceof Array)) return [{ tag: 'span', child: { text: '' } }];
            var items = x.map(it => dict[(0,utils.keyStringOf)(it)]).filter(it => !!it);
            var text = items.map(it => it.text).join(', ');
            return [{ tag: 'span', child: { text: text } }];
        }
    }
    /**
     *
     * @type {TTDAdapter}
     */
    var res = {
        data: {
            initOpened: true,
            head: {
                rows: [
                    {
                        cells: adapterData.propertyNames.map(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(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;
}

printer.ShareSerializer.addHandlerBefore({
    id: 'TreeTableCellBorder',
    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: (0,attribute.parseMeasureValue)(borderRadius),
            color: borderColor,
        });

        return true;


    },
    exec: (printer, elt, scope, stack, accept) => {
        var borderStyle = scope.get('borderStyle');
        var bound = Rectangle/* default.fromClientRect */.Z.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/js/finder/Finder.js + 2 modules
var Finder = __webpack_require__(8556);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/treechart.css
var treechart = __webpack_require__(255);
;// 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 = (0,ACore._)('attachhook').addTo(this);
    this.domSignal = new DomSignal/* default */.ZP(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 (0,ACore._)({
        class: 'as-tree-chart'
    });
};

TreeChart.prototype._updateContent = function () {
    if (this.$root) {
        this.$root.remove();
        this.$root = null;
    }
    var data = this.data;
    if (!data) return;
    var makeTree = (nodeData, level) => {
        var textChildren = [];
        if (nodeData.icon) {
            textChildren.push((0,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 = (0,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 = (0,ACore.$)('.as-tree-chart-content', elt);
        elt.$childCtn = (0,ACore.$)('.as-tree-chart-child-ctn', elt);

        var fillColor, textColor;
        if (typeof nodeData.fill === "string") {
            fillColor = Color_Color/* default.parse */.Z.parse(nodeData.fill);
        }
        else if (nodeData.fill instanceof Color_Color/* default */.Z) {
            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((it) => 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 = (elt, level) => {
        if (!elt.$children) return;
        var sArr, maxS;
        if (level < maxHorizonLevel) {
            sArr = elt.$children.map(e => e.$content.getBoundingClientRect().height);
            maxS = Math.max.apply(Math, sArr);
            elt.$children.forEach((elt, i) => {
                if (sArr[i] < maxS) {
                    elt.$content.addStyle('height', maxS + 'px');
                }
            });
        }
        else {
            sArr = elt.$children.map(e => e.$content.getBoundingClientRect().width);
            maxS = Math.max.apply(Math, sArr);
            elt.$children.forEach((elt, i) => {
                if (sArr[i] < maxS) {
                    elt.$content.addStyle('width', maxS + 'px');
                }
            });
        }
        elt.$children.forEach(c => visit(c, level + 1));
    };

    visit(this.$root, 0);
    var newBound = this.getBoundingClientRect();
    if (cBound.width !== newBound.width || cBound.height !== newBound.height) {
        ResizeSystem/* default.update */.Z.update();
    }
    this.domSignal.emit('fixWidth');
};

TreeChart.prototype._fixWidth = function () {
    if (!this.$root) return;
    var cBound = this.getBoundingClientRect();
    var maxHorizonLevel = this.maxHorizonLevel;
    var visit = (elt) => {
        if (!elt.$children) return;
        elt.$children.forEach(c => 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) {
        ResizeSystem/* default.update */.Z.update();
    }
};


TreeChart.property = {};

TreeChart.property.data = {
    set: function (data) {
        data = (0,generator/* copyJSVariable */.Ew)(data || null);
        this._data = data;
        this._updateContent();
    },
    get: function () {
        return this._data;
    }
};

TreeChart.property.maxHorizonLevel = {
    set: function (value) {
        if (!(0,utils.isNaturalNumber)(value)) value = 2;//default
        this._maxHorizonLevel = value;
        this._updateContent();
    },
    get: function () {
        return this._maxHorizonLevel;
    }
}


ACore/* default.install */.Z.install(TreeChart);
/* harmony default export */ const js_TreeChart = (TreeChart);

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Clipboard.js
var Clipboard = __webpack_require__(5164);
;// 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 (0,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((ac, u, i) => {
    ac['v' + i] = {
        set: function (value) {
            this._v[i] = value;
            this._updateText();
        },
        get: function () {
            return this._v[i];
        },
        remove: function () {
            this._v[i] = null;
        }
    }
    return ac;
}, {});


MultiLanguageText.attribute.key = {
    set: function (value) {
        this._key = value;
        this._updateText();
    },
    get: function () {
        return this._key;
    },
    remove: function () {
        this._key = null;
    }
};

MultiLanguageText.replaceAll = function (root) {
  (0,ACore.$$)('mlt', root).forEach(elt=>{
      if (elt.tagName !== 'MLT') return;
      var attr = Array.prototype.reduce.call(elt.attributes,(ac, at)=>{
          ac[at.name] = at.value;
          return ac;
      },{});
      elt.selfReplace((0,ACore._)({
          tag: MultiLanguageText,
          attr: attr
      }));
  });
};
/* harmony default export */ const js_MultiLanguageText = (MultiLanguageText);

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CopyableIconTooltip.js








/***
 * @extends {AElement}
 * @constructor
 */
function CopyableIconTooltip() {
    this._content = '';
    this.$content = null;
    this._value = '';
    this._icon = 'span.mdi.mdi-information-outline';
    this.$icon = (0,ACore.$)('.as-cit-icon', this);
    this.tooltip = new TooltipController(this);
}

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

CopyableIconTooltip.render = function () {
    return (0,ACore._)({
        tag: 'button',
        class: 'as-copyable-icon-tooltip',
        child: 'span.mdi.mdi-information-outline.as-cit-icon'
    });
};


CopyableIconTooltip.property = {};

CopyableIconTooltip.property.content = {
    set: function (value) {
        this._content = value || '';
        if (typeof this._content === "object") {
            this.$content = (0,ACore._)(this._content);
        }
        else if (typeof this._content === "string") {
            this.$content = (0,ACore._)({
                tag: 'span',
                style:{'white-space':'pre-wrap'},
                props:{
                    innerHTML: this._content
                }
            });

            js_MultiLanguageText.replaceAll(this.$content);
        }
    },
    get: function () {
        return this._content;
    }
};

CopyableIconTooltip.property.icon = {
    set: function (value) {
        value = value || '';
        this._icon = value;
        this.clearChild();
        this.$icon = null;
        if (value) {
            if ((0,Dom/* isDomNode */.mV)(value)) {
                if (value.parentElement) value = value.cloneNode(true);
            }
            else value = (0,ACore._)(value);
            this.$icon = (0,ACore.$)(value).addClass('as-cit-icon');
            this.addChild(this.$icon);
        }
    },
    get: function () {
        return this._icon;
    }
};

CopyableIconTooltip.property.value = {
    set: function (value) {
        this._value = value;
    },
    get: function () {
        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/* default.show */.Z.show(this.elt, this.elt.$content, 'auto');
};

TooltipController.prototype.ev_mouseLeave = function () {
    this.timeout = setTimeout(() => {
        Tooltip/* default.close */.Z.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;
    }

    (0,Clipboard.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 = (0,ACore.$)('.as-date-n-level-input-select-level', this);
    /**
     *
     * @type {DateInput}
     */
    this.$date = (0,ACore.$)('dateinput', this);
    this.ctrl = new DateNLevelInputCtrl(this);
    this._allowLevels = this.defaultAllowLevels.slice();
    (0,OOP/* drillProperty */.pj)(this, this.$date, 'min');
    (0,OOP/* drillProperty */.pj)(this, this.$date, 'max');
    /**
     * @name level
     * @type {"date"| "week" | "month" | "quarter" | "year"}
     * @memberOf DateNLevelInput#
     * */

    /**
     * @name allowLevels
     * @type {Array<"date"| "week" | "month" | "quarter" | "year">}
     * @memberOf DateNLevelInput#
     * */

    /**
     * @name value
     * @type {Date}
     * @memberOf DateNLevelInput#
     * */

    /**
     * @readonly
     * @name format
     * @type {string}
     * @memberOf DateNLevelInput#
     * */
}


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 (0,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 (value) {
        if (typeof value === "string") {
            value = value.split(/\s*,\s*/);
        }
        if (!(value instanceof Array)) {
            value = this.defaultAllowLevels.slice();
        }
        value = value.filter(x => !!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 () {
        return this._allowLevels.slice();
    }
};

DateNLevelInput.property.level = {
    set: function (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 () {
        var level = this.ctrl.level;
        if (this._allowLevels.indexOf(level) < 0) level = this._allowLevels[0];
        return level;
    }
};

DateNLevelInput.property.format = {
    get: function () {
        return this.$date.format;
    }
};

DateNLevelInput.property.value = {
    set: function (value) {
        this.$date.value = value;
        this.ctrl.prevVal = this.$date.value;
    },
    get: function () {
        return this.$date.value;
    }
};


DateNLevelInput.property.readOnly = {
    set: function (value) {
        this.$date.readOnly = value;
        if (value) {
            this.addClass('as-read-only');
        }
        else {
            this.removeClass('as-read-only');
        }
    },
    get: function () {
        return this.$date.readOnly;
    }
};


DateNLevelInput.property.disabled = {
    set: function (value) {
        this.$date.disabled = value;
        this.$level.disabled = value;
        if (value) {
            this.addClass('as-disabled');
        }
        else {
            this.removeClass('as-disabled');
        }
    },
    get: function () {
        return this.$date.disabled;
    }
};

function DateNLevelInputCtrl(elt) {
    this.elt = elt;
    this.prevVal = this.elt.value;
    this.elt.$date.on('change', this.ev_dateChange.bind(this));
    this.level = 'date';
    QuickMenu/* default.toggleWhenClick */.Z.toggleWhenClick(this.elt.$level, {
        getMenuProps: () => {
            var props = {};
            props.items = this.elt._allowLevels.map(name => {
                return {
                    text: `${this.elt.leve2Name[name]} (${this.elt.leve2format[name]})`,
                    level: name,
                    icon: name === this.level ? 'span.mdi.mdi-check' : null
                }
            });
            return props;
        },
        onSelect: item => {
            if (this.level !== item.level) {
                this.level = item.level;
                this.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 && (0,datetime.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);

ACore/* default.install */.Z.install(DateNLevelInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tableoftextinput.css
var tableoftextinput = __webpack_require__(978);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/swatchestable.css
var swatchestable = __webpack_require__(4132);
;// 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








/**
 * @extends AElement
 * @constructor
 */
function ColorCell() {
    this.$value = this.firstChild;
    if (!ColorCell.css) {
        ColorCell.css = new DynamicCSS/* default */.Z()
            .setProperty('.as-color-cell.as-null .as-color-cell-value',
                'background-image',
                `url("data:image/svg+xml;base64,${(0,base64.base64EncodeUnicode)(red_cross.replace(/\$width/g, '24').replace(/\$height/g, '24'))}")`)
            .commit();
    }
}

ColorCell.tag = 'ColorCell'.toString();

ColorCell.render = function () {
    return (0,ACore._)({
        class: 'as-color-cell',
        child: [
            '.as-color-cell-value'
        ]
    });
};


ColorCell.property = {};

ColorCell.property.value = {
    set: function (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 () {
        return this._value;
    }
};


function SwatchesTable() {
    this._data = [];
    this._poolCells = [];
    this._poolRows = [];
    this._dict = {};
}

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

SwatchesTable.render = function () {
    return (0,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 = Color_Color/* default.parse */.Z.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 (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 = (0,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 = (0,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 (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[Color_Color/* default.parse */.Z.parse(row[j].value + '').toHex8()] = rowElt.childNodes[j];
                    }
                    else {
                        rowElt.childNodes[j].firstChild.removeStyle('background-color');
                        this._dict[Color_Color/* default.parse */.Z.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[Color_Color/* default.parse */.Z.parse(row[j]).toHex8()] = rowElt.childNodes[j];
                }

            }
        }
    },
    get: function () {
        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" }
    ]
];

ACore/* default.install */.Z.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__(4558);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/spectrumcolor.css
var spectrumcolor = __webpack_require__(7702);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/SpectrumColor.js



function SpectrumColor() {

}

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

SpectrumColor.render = function () {
    return (0,ACore._)({
        class:'as-spectrum-color',
        child: {
            class:'as-spectrum-color-sat',
            child:'.as-spectrum-color-val'
        }
    });
};


ACore/* default.install */.Z.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 DynamicCSS/* default */.Z()
            .setProperty('.as-color-cell.as-solid-color-picker-selected.as-null .as-color-cell-value',
                'background-image',
                `url("data:image/svg+xml;base64,${(0,base64.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);
    OOP/* default.drillProperty */.ZP.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 Color_Color/* default */.Z([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 = (0,ACore._)('.as-solid-color-picker-selected-dot');//share

    /**
     * @type {import('./SwatchesTable').default}
     */
    this.$swatchesTable = this.swatchMode.$swatchesTable;

    this.$recentSwatchesTable = this.historyCtrl.$recentSwatchesTable;


    this.$attachhook = (0,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 = (0,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#
     */

    /**
     * @name hex8Value
     * @type {string}
     * @memberof SolidColorPicker#
     */
}


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

SolidColorPicker.render = function () {
    return (0,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 cHex8 = this.hex8Value;
    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 (value) {
        value = value || null;
        if (value && !value.toHex8) {//is
            try {
                value = Color_Color/* default.parse */.Z.parse(value + '');
            } catch (e) {
                value = new Color_Color/* default */.Z([0, 0, 0, 0]);
            }
        }
        this.rawValue = value;
        this._lastEmitHex8 = this.hex8Value;

        this.footerCtrl.viewValue();
        this.pickerMode.viewValue();
        this.swatchMode.viewValue();
    },
    get: function () {
        var nullable = this.nullable;
        var hasOpacity = this.hasOpacity;
        var value = this.rawValue || null;//
        if (!nullable && !value) value = new Color_Color/* default */.Z([0, 0, 0, 0]);
        if (!hasOpacity && value) value.rgba[3] = 1;
        return value;
    }
};

SolidColorPicker.property.hex8Value = {
    get: function () {
        var value = this.value;
        if (value) return value.toHex8();
        return 'null';
    }
};

/**
 * @type {SolidColorPicker}
 */
SolidColorPicker.property.swatches = {
    set: function (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 () {
        return this._swatches;
    }
};


SolidColorPicker.property.nullable = {
    set: function (value) {
        if (value) {
            this.addClass('as-nullable');
        }
        else {
            this.removeClass('as-nullable');
        }
        this.footerCtrl.viewValue();
        this.pickerMode.viewValue();
        this.swatchMode.viewValue();
    },
    get: function () {
        return this.hasClass('as-nullable');
    }
};

SolidColorPicker.property.hasOpacity = {
    /**
     * @this SolidColorPicker#
     * @param value
     */
    set: function (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 () {
        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();
    }
};

ACore/* default.install */.Z.install('solidcolorpicker', SolidColorPicker);

/**
 *
 * @param {SolidColorPicker} elt
 *
 * @constructor
 */
function SCPHistoryController(elt) {
    this.elt = elt;
    this.$recentSwatchesTable = (0,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) {
    this.elt = elt;
    this.$swatchesName = (0,ACore.$)('.as-solid-color-picker-swatches-name', this.elt);

    QuickMenu/* default.toggleWhenClick */.Z.toggleWhenClick(this.$swatchesName, {
        anchor: [1, 6],
        getMenuProps: () => {
            return {
                extendClasses: 'as-solid-color-picker-swatches-name-menu',
                extendStyle: {
                    'font-size': this.elt.getComputedStyleValue('font-size')
                },
                items: this.elt._swatchesNames.map((name, i) => {
                    return { text: name, value: this.elt._swatchesShortName[i], icon: this.elt._swatchesIcons[i] };
                })
            }
        },
        onSelect: (item) => {
            this.elt.swatches = item.value;
        }
    });
    this.$mode = (0,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 (value) {
        this.$mode.value = value;
        this.updateMode();
    },
    get: function () {
        return this.$mode.value;
    }
});

/**
 *
 * @param {SolidColorPicker} elt
 * @constructor
 */
function SCPSWatchMode(elt) {
    this.elt = elt;
    /**
     *
     * @type {BScroller}
     */
    this.$swatchesTableCtn = (0,ACore.$)('.as-solid-color-picker-swatches-ctn', this.elt);

    /**
     * @type {SwatchesTable}
     */
    this.$swatchesTable = (0,ACore.$)('.as-solid-color-picker-swatches-ctn swatchestable', this.elt)
        .on('presscell', this.ev_pressCell.bind(this));
    this.$noneCtn = (0,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 = Color_Color/* default.parse */.Z.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 ${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 ${hC.toString('rgba')}`);
        cell.addChild(this.elt.$selectedDot);
    }
};


/**
 *
 * @param {SolidColorPicker} elt
 * @constructor
 */
function SCPPickerMode(elt) {
    this.elt = elt;
    this.$spectrum = (0,ACore._)({
        tag: 'hanger', elt: (0,ACore.$)('.as-solid-color-picker-spectrum', this.elt)
    })
        .on('predrag', this.ev_spectrumDrag.bind(this))
        .on('drag', this.ev_spectrumDrag.bind(this));
    this.$hueDot = (0,ACore.$)('.as-solid-color-picker-hue-dot', this.elt);
    this.$spectrumDot = (0,ACore.$)('.as-solid-color-picker-spectrum-dot', this.elt);

    this.$alpha = (0,ACore._)({ tag: 'hanger', elt: (0,ACore.$)('.as-solid-color-picker-alpha', this.elt) })
        .on('predrag', this.ev_alphaDrag.bind(this))
        .on('drag', this.ev_alphaDrag.bind(this));
    this.$alphaDot = (0,ACore.$)('.as-solid-color-picker-alpha-dot', this.elt);

    this.$hue = (0,ACore._)({ tag: 'hanger', elt: (0,ACore.$)('.as-solid-color-picker-hue', this.elt) })
        .on('predrag', this.ev_hueDrag.bind(this))
        .on('drag', this.ev_hueDrag.bind(this));

    this.$near = (0,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 Color_Color/* default */.Z([0, 0, 0, 1]);
    var hsba = Color_Color/* default.rgbaToHSBA */.Z.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 Color_Color/* default */.Z([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 Color_Color/* default */.Z([0, 0, 0, 1]);
    var hsba = Color_Color/* default.rgbaToHSBA */.Z.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 Color_Color/* default.fromHSB */.Z.fromHSB(hue, sat * (7 - i) / 8, brightness);
    });
    var darkerColors = Array(7).fill(null).map(function (u, i) {
        return Color_Color/* default.fromHSB */.Z.fromHSB(hue, sat, brightness * (7 - i) / 8);
    });

    var hueNearColors = [-5, -3, -2, 1, 2, 3, 5].map(function (u) {
        var nHue = hue + u / 40;
        if (nHue > 1) nHue -= 1;
        else if (nHue < 0) nHue += 1;

        return Color_Color/* default.fromHSB */.Z.fromHSB(nHue, sat, brightness);
    });

    this.$near.data = [whiterColors, darkerColors, hueNearColors];
};

SCPPickerMode.prototype._setHue = function (hue) {
    this._hue = hue;
    var spectrumColor = Color_Color/* default.fromHSB */.Z.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 = Color_Color/* default.fromHSBA */.Z.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 Color_Color/* default */.Z([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 = Color_Color/* default.fromHSBA */.Z.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 = (0,ACore.$)('.as-solid-color-picker-selected', this.elt);
    this.$opacity = (0,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 = (0,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 Color_Color/* default */.Z(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 = Color_Color/* default.parse */.Z.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 () {
        if (!this.elt.hasOpacity) return 1;
        var opFromText = parseFloat(this.$opacity.value) / 100;
        if ((0,utils.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() {
    this.$value = (0,ACore.$)('.as-font-color-button-value', this);
    this.$primary = (0,ACore.$)('.as-ribbon-split-button-primary', this).on('click', () => {
        this.emit('submit', {
            type: 'submit',
            target: this
        }, this);
    });
    this.$extend = (0,ACore.$)('.as-ribbon-split-button-extend', this);
    new FCBPickerController(this);

    /**
     * @type {string}
     * @name value
     * @memberof FontColorButton#
     */
}

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

FontColorButton.render = function () {
    return (0,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: Icons/* FontColorIcon */.Tj,
                        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 (value) {
        this.$value.value = value;
    },
    get: function () {
        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 ((0,EventEmitter/* hitElement */.EY)(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 = (0,ACore._)({
        tag: colorpicker_SolidColorPicker,
        props: {
            hasOpacity: false
        }
    });
    this.share.$follower = (0,ACore._)({
        tag: Follower/* default */.Z,
        child: this.share.$picker,
        props: {
            anchor: [2, 1, 6, 5, 9, 11]
        }
    });
};

FCBPickerController.prototype.openPicker = function () {
    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', (0,utils.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(() => {
        document.addEventListener('click', this.ev_clickOut);
    }, 5);
};


FCBPickerController.prototype.closePicker = function () {
    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(() => {
        this.elt.$extend.on('click', this.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[]}
     */

    OOP/* default.drillProperty */.ZP.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 AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
};

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

TableOfTextInput.render = function () {
    return (0,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);

ACore/* default.install */.Z.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 = (0,ACore.$)('table', wrapper);
    this.$body = (0,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((ac, cell) => 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 (value) {
            if (!(0,utils.isNaturalNumber)(value)) value = 1;
            value = Math.max(1, Math.floor(value));
            this._minCol = value;
        },
        get: function () {
            return this._minCol;
        }
    },
    maxCol: {
        /**
         * @this TableOfTextInput
         * @param value
         */
        set: function (value) {
            if (!(0,utils.isNaturalNumber)(value)) value = 20;
            value = Math.min(20, Math.max(1, Math.floor(value)));
            this._maxCol = value;
        },
        get: function () {
            return Math.max(this._minCol, this._maxCol);
        }
    },
    minRow: {
        /**
         * @this TableOfTextInput
         * @param value
         */
        set: function (value) {
            if (!(0,utils.isNaturalNumber)(value)) value = 1;
            value = Math.max(1, Math.floor(value));
            this._minRow = value;
        },
        get: function () {
            return this._minRow;
        }
    },
    maxRow: {
        /**
         * @this TableOfTextInput
         * @param value
         */
        set: function (value) {
            if (!(0,utils.isNaturalNumber)(value)) value = 20;
            value = Math.min(20, Math.max(1, Math.floor(value)));
            this._maxRow = value;
        },
        get: function () {
            return Math.max(this._minRow, this._maxRow);
        }
    },
    data: {
        set: function (value) {
            if (typeof value === "string") {
                value = {
                    rows: [
                        { cells: [{ value: value }] }
                    ]
                };
            }
            value = (0,generator/* copyJSVariable */.Ew)(value || this.defaultData);

            if (!(value.rows instanceof Array)) value.rows = (0,generator/* copyJSVariable */.Ew)(this.defaultData.rows);
            value.rows.forEach(row => {
                if (!(row.cells instanceof Array)) {
                    row.cells = []
                }
                if (row.cells.length === 0) {
                    row.cells.push({ value: '' });
                }
            });

            this.rows.forEach(row => row.tr.remove());
            this.rows = value.rows.map(rowData => new TEIRow(this, rowData));
            this.$body.addChild(this.rows.map(row => row.tr));
            this.calcCellPos();
        },
        get: function () {
            return {
                rows: this.rows.map(row => row.data)
            }
        }
    },
    excelRichTextRows: {
        get: function () {
            var cBound = this.elt.getBoundingClientRect();
            var placeHolderElt;
            var renderSpace;
            if (!cBound.width || !cBound.height) {
                if (this.parentElement) {
                    placeHolderElt = (0,ACore._)({
                        style: {
                            display: 'none'
                        }
                    });
                    this.selfReplace(placeHolderElt);
                }
                renderSpace = (0,ACore._)({
                    style: {
                        position: 'fixed',
                        zIndex: -1000,
                        visibility: 'hidden',
                        opacity: 0
                    }
                }).addTo(document.body);
            }

            var textNodes = (0,Text.getTextNodesIn)(this.elt).filter(t => !!t.data);
            var lineHeight = 25.662879943847656;
            cBound = this.elt.getBoundingClientRect();
            var y0 = cBound.top + 4 + 3.2348480224609375;
            var textInfos = textNodes.reduce((ac, txt) => {
                var cell = cellOf(txt);
                var style = cell.style.export();
                var bounds = (0,utils.getTextNodeBounds)(txt);

                bounds.forEach(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' + Color_Color/* default.parse */.Z.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((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((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 = (0,ACore._)('tr');
    /**
     *
     * @type {TEICell[]}
     */
    this.cells = [];
    this.data = data;
}

Object.defineProperty(TEIRow.prototype, 'data', {
    set: function (data) {
        this.cells = data.cells.map(cellData => new TEICell(this, cellData));
        this.tr.clearChild().addChild(this.cells.map(cell => cell.td));
    },
    get: function () {
        return {
            cells: this.cells.map(cell => cell.data)
        }
    }
});


var 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) {
    this.row = row;
    this.table = row.table;
    this.td = (0,ACore._)({
        tag: 'td',
        class: 'as-table-of-text-input-cell',
        on: {
            click: (event) => {
                if (event.target === this.td) this.focus();
            },
        },
        child: {
            tag: js_PreInput,
            attr: {
                spellcheck: 'false'
            },
            props: {
                teiCell: this
            },
            on: {
                focus: () => {
                    this.table.formatTool.onFocus(this);
                },
                blur: () => {
                    this.table.formatTool.onBlur(this);
                },
                change: (event) => {
                    if (event.originalEvent)
                        this.table.elt.emit('change', {
                            type: 'change',
                            target: this.table,
                            cell: this
                        }, this.table.elt);
                }
            }
        }
    });
    this.$input = (0,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 = (0,Text.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 (value) {
            if (value === 'bold') {
                this.td.addClass('as-bold');

            }
            else {
                this.td.removeClass('as-bold');
            }
        },
        get: function () {
            if (this.td.hasClass('as-bold')) return 'bold';
            return 'normal';
        },
        export: function () {
            if (this.td.hasClass('as-bold')) return 'bold';
            return undefined;
        }
    },
    fontStyle: {
        set: function (value) {
            if (value === 'italic') {
                this.td.addClass('as-italic');
            }
            else {
                this.td.removeClass('as-italic');
            }
        },
        get: function () {
            if (this.td.hasClass('as-italic')) return 'italic';
            return 'normal';
        },
        export: function () {
            if (this.td.hasClass('as-italic')) return 'italic';
            return undefined;
        }
    },
    fontSize: {
        set: function (value) {
            if (typeof value === "string") value = parseInt(value.replace(/[^0-9.]/g, ''), 10);
            if (!(0,utils.isRealNumber)(value)) value = 11;
            value = Math.abs(value);
            value = value || 11;
            this.td.addStyle('font-size', value + 'pt');
            return value;
        },
        get: function (ref) {
            var value = ref.get();
            return value || 11;
        },
        export: function (ref) {
            var value = ref.get();
            if (value === 11) value = undefined;
            return value || undefined;
        }
    },
    color: {
        set: function (value) {
            try {
                var cValue = Color_Color/* default.parse */.Z.parse(value);
                value = cValue.toString('hex6');
            } catch (err) {
                value = '#000000';
            }
            this.td.addStyle('color', value);
            return value;
        },
        get: function (ref) {
            return ref.get() || '#000000';
        },
        export: function (ref) {
            var value = ref.get();
            if (value === '#000000') value = undefined;
            return value || undefined;
        }
    },
    textAlign: {
        set: function (value) {
            if (!['left', 'right', 'center'].includes(value))
                value = 'left';
            this.td.addStyle('text-align', value);
            return value;
        },
        get: function (ref) {
            var value = ref.get();
            return value || 'left';
        },
        export: function (ref) {
            var value = ref.get();
            if (value === 'left') value = undefined;
            return value;
        }
    }
};

Object.defineProperty(TEICell.prototype, "data", {
    set: function (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 () {
        var res = {};
        res.value = this.$input.value;
        res.style = this.style.export();
        Object.keys(res.style).forEach(key => {
            if (res.style[key] === undefined) delete res.style[key];
        });
        return res;
    }
});


Object.defineProperties(TEICell.prototype, {
    colspan: {
        set: function (value) {

        },
        get: function () {
            var value = this.td.attr('colspan') || '1';
            value = parseInt(value);
            if ((0,utils.isNaturalNumber)(value)) return value;
            return 1;
        }
    },
    rowspan: {
        set: function (value) {

        },
        get: function () {
            var value = this.td.attr('rowspan') || '1';
            value = parseInt(value);
            if ((0,utils.isNaturalNumber)(value)) return value;
            return 1;
        }
    },
    colpos: {
        get: function () {

        }
    },
    rowpos: {
        get: function () {

        }
    }
});

function TEIFormatTool(table) {
    Object.keys(TEIFormatTool.prototype).filter(k => k.startsWith('ev_')).forEach(k => this[k] = this[k].bind(this));
    this.table = table;
    this.table.elt.on('keydown', this.ev_keydown)
    this.$tool = (0,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 = (0,ACore.$)('.as-table-of-text-input-tool-font-size', this.$tool).on('change', this.ev_fontSizeChange);
    this.$bold = (0,ACore.$)('.as-table-of-text-input-tool-bold', this.$tool).on('click', this.ev_clickBold);
    this.$italic = (0,ACore.$)('.as-table-of-text-input-tool-italic', this.$tool).on('click', this.ev_clickItalic);
    this.$fontColor = (0,ACore.$)(colorpicker_FontColorButton.tag, this.$tool).on('submit', this.ev_fontColorSubmit);
    this.$alignBtns = (0,ACore.$$)('.as-table-of-text-input-tool-text-align', this.$tool)
        .reduce((ac, btn) => {
            var value = btn.attr('data-align');
            btn.on('click', ev => {
                this.ev_clickAlign(value, ev);
            });
            ac[value] = btn;
            return ac;
        }, {});
    this.$commandBtns = (0,ACore.$$)('.as-table-of-text-input-tool-command', this.$tool)
        .reduce((ac, btn) => {
            var value = btn.attr('data-command');
            btn.on('click', ev => {
                this.commands[value].exec.call(this);
                // 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', () => this.updateAvailableCommands());
}


TEIFormatTool.prototype.commands = {
    left: {
        /**
         * @this TEIFormatTool
         */
        available: function () {
            return this.focusCell.row.cells.length < this.table.maxCol;
        },
        /**
         * @this TEIFormatTool
         */
        exec: function () {
            var idx = this.focusCell.row.cells.indexOf(this.focusCell);
            this.table.rows.forEach(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 () {
            var idx = this.focusCell.row.cells.indexOf(this.focusCell);
            this.table.rows.forEach(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 () {
            return this.table.rows.length < this.table.maxRow;
        },
        /**
         * @this TEIFormatTool
         */
        exec: function () {
            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(() => ({
                    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 () {
            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(() => ({
                    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 () {
            return this.table.minCol < this.focusCell.row.cells.length;
        },
        /**
         * @this TEIFormatTool
         */
        exec: function () {
            if (!this.focusCell) return;
            var focusRow = this.focusCell.row;
            var idx = focusRow.cells.indexOf(this.focusCell);
            this.table.rows.forEach(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 () {
            return this.table.minRow < this.table.rows.length;
        },
        /**
         * @this TEIFormatTool
         */
        exec: function () {
            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) {
    if (this.focusCell !== cell && this.focusCell) {
        this.focusCell.td.removeClass('as-focus');
    }

    if (!this.focusCell) {
        setTimeout(() => {
            document.addEventListener('click', this.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 () {
    Object.keys(this.$commandBtns).forEach(key => {
        var available = this.focusCell && this.commands[key].available.call(this);
        this.$commandBtns[key].disabled = !available;
    });
};


TEIFormatTool.prototype.onBlur = function (cell) {

};


TEIFormatTool.prototype.ev_clickOut = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(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 = (0,keyboard/* keyboardEventToKeyBindingIdent */.Ej)(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;

    }
};
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/mobile/MHeaderBar.js
var MHeaderBar = __webpack_require__(9277);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mobileapp.css
var mobileapp = __webpack_require__(8789);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/Context.js
var Context = __webpack_require__(5721);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/mobile/MExplore.js













var makeTextToNode = (data, pElt) => {
    var node;
    if (typeof data === "string") {
        node = (0,ACore._)({ text: data });
    }
    else if (data instanceof Array) {
        data.forEach(it => makeTextToNode(it, pElt));
    }
    if (node)
        pElt.addChild(node);
}

var makeIconToNode = (data, pElt) => {
    var node;
    if (data) node = (0,ACore._)(data);
    pElt.clearChild();
    if (node) pElt.addChild(node);
}

function MExploreSectionBreak() {
    this._name = '';
    this.$name = (0,ACore.$)('.am-explore-section-break-name', this);
}

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

MExploreSectionBreak.render = function () {
    return (0,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 (value) {
        if (value === null || value === undefined) value = '';
        this._name = value;
        this.$name.clearChild();
        makeTextToNode(value, this.$name);

    },
    get: function () {
        return this._name;
    }
};


function MExploreItemBlock() {
    this.$name = (0,ACore.$)('.am-explore-item-block-name', this);
    this._name = '';
    this._icon = null;
    this.$icon = (0,ACore.$)('.am-explore-item-block-icon', this);
    this.$name = (0,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 (0,ACore._)({
        attr: {
            tabindex: '1'
        },
        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 (value) {
        value = value || null;
        this._icon = value;
        makeIconToNode(value, this.$icon)
    },
    get: function () {
        return this._icon;
    }
};

MExploreItemBlock.property.name = {
    set: function (value) {
        if (value === null || value === undefined) value = '';
        makeTextToNode(value, this.$name);
        this._name = value;
    },
    get: function () {
        return this._name;
    }
};

MExploreItemBlock.property.hidden = {
    set: function (value) {
        if (value) {
            this.addClass('as-hidden');
        }
        else {
            this.removeClass('as-hidden');
        }
    },
    get: function () {
        return this.hasClass('as-hidden');
    }
}


function MExploreItemList() {

}

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


MExploreItemList.render = function () {

}

/**
 * @extends AElement
 * @constructor
 */
function MExploreGroup() {
    this.$br = (0,ACore.$)(MExploreSectionBreak.tag, this);
    this._items = [];
    this.$items = [];
    this.$itemCtn = (0,ACore.$)('.am-explore-group-item-ctn', this);
    /**
     * @name name
     * @type {string}
     * @memberof MExploreGroup#

     /**
     * @name items
     * @type {[]}
     * @memberof MExploreGroup#
     */
}


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


MExploreGroup.render = function () {
    return (0,ACore._)({
        class: 'am-explore-group',
        extendEvent: ['press'],
        child: [
            {
                tag: MExploreSectionBreak
            },
            {
                class: 'am-explore-group-item-ctn'
            }
        ]
    });
};


MExploreGroup.property = {};
MExploreGroup.property.name = {
    set: function (value) {
        value = value || '';
        this.$br.name = value;
        if (value) {
            this.$br.removeStyle('display');
        }
        else {
            this.$br.addStyle('display', 'none');
        }
    },
    get: function () {
        return this.$br.name;
    }
};

MExploreGroup.property.items = {
    /**
     * @this MExploreGroup
     * @param items
     */
    set: function (items) {
        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(it => {
            var elt = (0,ACore._)({
                tag: MExploreItemBlock,
                props: {
                    data: it,
                    name: it.name,
                    icon: it.icon,
                    hidden: !!it.hidden
                },
                on: {
                    click: event => {
                        this.emit('press', {
                            type: 'press',
                            target: elt,
                            itemData: it,
                            originalEvent: event,
                            itemElt: elt
                        }, this);
                    }
                }
            });
            if (window.ABSOL_DEBUG) {
                elt.attr('title', 'score: ' + it.score);
            }
            return elt;
        });
        this.$itemCtn.addChild(this.$items);
    },
    get: function () {
        return this._items;
    }
}

MExploreGroup.property.hidden = {
    set: function (value) {
        if (value) {
            this.addClass('as-hidden');
        }
        else {
            this.removeClass('as-hidden');
        }
    },
    get: function () {
        return this.hasClass('as-hidden');
    }
};

/**
 * @extends AElement
 * @constructor
 */
function MSpringboardMenu() {
    if (BrowserDetector/* default.isMobile */.Z.isMobile) {
        this.addClass('as-mobile');
    }
    this.keyboardCtrl = new MSMKeyboardController(this);
    this.$groups = [];
    this.$attachHook = (0,ACore._)('attachhook').addTo(this);
    this.$attachHook.on('attached', () => {
        ResizeSystem/* default.add */.Z.add(this);
        this.updateSize();
        this.keyboardCtrl.lowPriorityFocus();
    });
    this.$attachHook.requestUpdateSize = this.updateSize.bind(this);

    this.searchingPlugin = new MSMSearchingPlugin(this);
    /**
     * @name searching
     * @type {{input: SearchTextInput, items: []}}
     * @memberof MSpringboardMenu#
     */
}

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

MSpringboardMenu.render = function () {
    return (0,ACore._)({
        attr: {
            tabindex: '1'
        },
        class: 'am-springboard-menu',
        extendEvent: ['press']
    });
};


MSpringboardMenu.prototype.updateSize = function () {
    if (!this.isDescendantOf(document.body)) return;
    if (this.$groups.length === 0) return;
    var maxChildLength = 0;
    var longestGroupElt = this.$groups[0];
    var groupElt;
    for (var i = 0; i < this.$groups.length; ++i) {
        groupElt = this.$groups[i];
        if (groupElt.$items.length > maxChildLength) {
            longestGroupElt = groupElt;
            maxChildLength = groupElt.$items.length;
        }
    }
    var style = getComputedStyle(groupElt.$itemCtn);
    var width = parseFloat(style.width.replace('px', ''));
    if (width < 10) return;
    var paddingLeft = parseFloat(style.paddingLeft.replace('px', ''));
    var paddingRight = parseFloat(style.paddingRight.replace('px', ''));
    var rowLength = Math.max(1, Math.floor((width - paddingLeft - paddingRight) / 150));
    var itemWidth = Math.floor((width - paddingLeft - paddingRight) / rowLength) - 1;
    this.addStyle('--item-width', itemWidth + 'px');
};


MSpringboardMenu.property = {};

MSpringboardMenu.property.groups = {
    /**
     * @this MSpringboardMenu
     * @param groups
     */
    set: function (groups) {
        if (!(groups instanceof Array)) groups = [];
        this.$groups.forEach(elt => elt.selfRemove());
        this.$groups = groups.map(group => {
            var hidden = group.hidden || !group.items || group.items.length === 0 || group.items.every(it => it.hidden);
            var elt = (0,ACore._)({
                tag: MExploreGroup,
                props: {
                    data: group,
                    name: group.name,
                    items: group.items || [],
                    hidden: hidden
                },
                on: {
                    press: (event) => {
                        this.emit('press', Object.assign({ groupElt: elt, groupData: group }, event), this);
                    }
                }
            });
            return elt;
        });
        this.addChild(this.$groups);
        this.updateSize();
    },
    get: function () {
        return this.$groups.map(gr => gr.data);
    }
};

ACore/* default.install */.Z.install(MSpringboardMenu);

/**
 *
 * @param {MSpringboardMenu}  elt
 * @constructor
 */
function MSMKeyboardController(elt) {
    this.elt = elt;
    if (!BrowserDetector/* default.isMobile */.Z.isMobile)
        this.elt.on('keydown', this.ev_keydown.bind(this));
    this.itemsMatrix = [];
}

MSMKeyboardController.prototype.canLowPriorityFocus = function () {
    var elt = document.activeElement;
    if (!elt || elt === document.body || elt === this.elt) {
        return true;
    }
    if (elt.hasClass && elt.hasClass('am-explore-item-block') && elt.isDescendantOf(this.elt)) return false;
    var style;
    while (elt && elt !== document.body && elt !== this.elt) {
        style = getComputedStyle(elt);
        if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {
            return true;
        }
        elt = elt.parentElement;
    }

    return false;
};

MSMKeyboardController.prototype.lowPriorityFocus = function () {
    if (!this.canLowPriorityFocus()) return;
    this.elt.focus();
    // var firstItem = null;
    // for (var i = 0; i < this.elt.$groups.length; ++i) {
    //     var group = this.elt.$groups[i];
    //     if (group.$items.length > 0) {
    //         firstItem = group.$items[0];
    //         break;
    //     }
    // }
    // if (firstItem) {
    //     firstItem.focus();
    // }
};

MSMKeyboardController.prototype.calcItemsMatrix = function () {
    var arr = [];
    var group;
    var item;
    for (var i = 0; i < this.elt.$groups.length; ++i) {
        group = this.elt.$groups[i];
        for (var j = 0; j < group.$items.length; ++j) {
            item = group.$items[j];
            if (item.hidden) continue;
            arr.push(item);

        }
    }
    arr = arr.map(item => {
        var rect = item.getBoundingClientRect();
        return {
            item: item,
            ii: Math.round(rect.top / 30),
            jj: Math.round(rect.left / 30)
        }
    });
    var rows = arr.reduce((ac, it) => {
        ac[it.ii] = ac[it.ii] || [];
        ac[it.ii].push(it);
        return ac;
    }, {});
    rows = Object.values(rows);
    rows.sort((a, b) => {
        return a[0].ii - b[0].ii;
    });
    rows.forEach(row => {
        row.sort((a, b) => {
            return a.jj - b.jj;
        });
    });
    this.itemsMatrix = rows.map(row => row.map(it => it.item));
    return rows;
};

MSMKeyboardController.prototype.findItemsStartsWith = function (prefix) {
    prefix = prefix.toLowerCase();
    var res = [];
    var group;
    var item;
    for (var i = 0; i < this.elt.$groups.length; ++i) {
        group = this.elt.$groups[i];
        for (var j = 0; j < group.$items.length; ++j) {
            item = group.$items[j];
            if (item.hidden) continue;
            if ((0,stringFormat.nonAccentVietnamese)(item.name.toLowerCase()).startsWith(prefix)) {
                res.push(item);
            }
        }
    }
    return res;
};

/**
 *
 * @param  elt
 */
MSMKeyboardController.prototype.positionOf = function (elt) {
    if (!elt) return null;
    if (elt.hidden) return null;
    var row;
    var item;
    for (var i = 0; i < this.itemsMatrix.length; ++i) {
        row = this.itemsMatrix[i];
        for (var j = 0; j < row.length; ++j) {
            item = row[j];
            if (item === elt) {
                return [i, j];

            }
        }
    }
    return null;
};

MSMKeyboardController.prototype.ev_keydown = function (event) {
    if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') return;
    var key = (0,keyboard/* keyboardEventToKeyBindingIdent */.Ej)(event);
    var focusElt = document.activeElement;
    if (!focusElt || !focusElt.hasClass) focusElt = null;
    if (focusElt && !focusElt.hasClass('am-explore-item-block')) focusElt = null;
    if (focusElt && focusElt.hidden) focusElt = null;
    if (focusElt && !focusElt.isDescendantOf(this.elt)) focusElt = null;
    var focusIdx;
    var itemEltArr;
    var itemPos;
    if (key.length === 1) {
        itemEltArr = this.findItemsStartsWith(key);
        focusIdx = itemEltArr.indexOf(focusElt);
        if (itemEltArr.length > 0) {
            itemEltArr[(focusIdx + 1) % itemEltArr.length].focus();
        }
    }
    else if (['arrowdown', 'arrowup', 'arrowleft', 'arrowright'].indexOf(key) >= 0) {
        event.preventDefault();
        this.calcItemsMatrix();
        itemPos = this.positionOf(focusElt);
        switch (key) {
            case 'arrowdown':
                itemPos = itemPos || [-1, 0];
                if (itemPos[0] < this.itemsMatrix.length - 1) {
                    itemPos[0]++;
                    itemPos[1] = Math.min(itemPos[1], this.itemsMatrix[itemPos[0]].length - 1);
                }

                break;
            case 'arrowup':
                itemPos = itemPos || [1, 0];
                if (itemPos[0] > 0) {
                    itemPos[0]--;
                    itemPos[1] = Math.min(itemPos[1], this.itemsMatrix[itemPos[0]].length - 1);
                }
                break;
            case 'arrowleft':
                itemPos = itemPos || [0, 1];
                if (itemPos[1] > 0) {
                    itemPos[1]--;
                }
                else if (itemPos[0] > 0) {
                    itemPos[0]--;
                    itemPos[1] = this.itemsMatrix[itemPos[0]].length - 1;
                }

                break;
            case 'arrowright':
                itemPos = itemPos || [0, -1];
                if (itemPos[1] < this.itemsMatrix[itemPos[0]].length - 1) {
                    itemPos[1]++;
                }
                else if (itemPos[0] < this.itemsMatrix.length - 1) {
                    itemPos[0]++;
                    itemPos[1] = 0;
                }
                break;
        }
        focusElt = this.itemsMatrix[itemPos[0]] && this.itemsMatrix[itemPos[0]][itemPos[1]];
        if (focusElt) focusElt.focus();
    }
    else if (key === 'enter') {
        event.preventDefault();
        if (focusElt) focusElt.click();
    }
};

/**
 * @extends Context
 * @param {MSpringboardMenu} elt
 * @constructor
 */
function MSMSearchingPlugin(elt) {
    Context/* default.call */.Z.call(this);
    this.elt = elt;
    this._data = null;
    OOP/* default.drillProperty */.ZP.drillProperty(this.elt, this, 'searching', 'data');
    this.ev_inputStopTyping = this.ev_inputStopTyping.bind(this);
    /**
     * @type {SearchTextInput|null}
     */
    this.$input = null;
    this.itemHolders = [];
    this.$seachGroups = [];
}


(0,OOP/* mixClass */.Jx)(MSMSearchingPlugin, Context/* default */.Z);

MSMSearchingPlugin.prototype.onStart = function () {
    this.$input = this._data && this._data.input;
    if (!this.$input) {
        this.$input = (0,ACore._)({
            tag: Searcher/* default */.Z
        });
        this.elt.addChildBefore(this.$input, this.elt.firstChild);
    }

    this.$input.on('stoptyping', this.ev_inputStopTyping);
    this.calcItemHoldersFromItems();
};

MSMSearchingPlugin.prototype.calcItemHoldersFromItems = function () {
    // var holders = [];
    var count = 0;

    var virtualGroups = [];


    var visit = (item, parent) => {
        if (item.hidden) return;
        count++;
        var holder = this.makeHolder(item);
        holder.path = parent.path.concat([parent.item.name]);
        holder.count = count;
        if (holder.type === 'group') {
            virtualGroups.push(holder);
        }
        else {
            parent.children = parent.children || [];
            parent.children.push(holder);
        }

        if (item.items && item.items.length > 0) {
            if (holder.type !== 'group') {
                holder = Object.assign({}, holder, { type: 'group', children: [] });
                virtualGroups.push(holder);
            }
            item.items.forEach((child) => visit(child, holder));
        }
    }

    var rootHolder = Object.assign({},
        this.makeHolder({ name: 'root' }),
        {
            children: [],
            path: [],
            type: 'group'
        });
    virtualGroups.push(rootHolder);
    this._data.items.forEach((item) => visit(item, rootHolder));
    virtualGroups = virtualGroups.filter(it => it.children && it.children.length > 0);
    this.itemHolders = virtualGroups;
};

MSMSearchingPlugin.prototype.onResume = function () {
    this.elt.addClass('as-searching');
    //view search
};


MSMSearchingPlugin.prototype.onPause = function () {
    this.elt.removeClass('as-searching');
    //view origin
};

MSMSearchingPlugin.prototype.onStop = function () {
    this.$input.on('stopchange', this.ev_inputStopTyping);
    if (this.$input.isDescendantOf(this.elt)) {
        this.$input.remove();
    }

    //turn off event
};

MSMSearchingPlugin.prototype.makeHolder = function (item) {
    var spliter = /[\s,-\.+?\_]+/;
    var notEmp = function (e) {
        return e.length > 0;
    };
    var res = {
        item: item,
        text: item.name || item.searchName || '',
        hidden: !!item.hidden,
        type: item.type
    };
    if (item.hidden) return res;
    res.text = res.text.toLowerCase();
    res.words = res.text.split(spliter).filter(notEmp);
    res.text = res.words.join(' ');
    res.nacWords = res.words.map(txt => (0,stringFormat.nonAccentVietnamese)(txt));
    res.nacText = res.nacWords.join(' ');
    res.wordDict = res.words.reduce((ac, cr) => {
        ac[cr] = true;
        return ac;
    }, {});
    res.nacWordDict = res.nacWords.reduce((ac, cr) => {
        ac[cr] = true;
        return ac;
    }, {});
    return res;
};

MSMSearchingPlugin.prototype.calcScore = function (queryHolder, itemHolder) {
    var score = 0;
    var mustIncluded = false;
    if (itemHolder.nacText.indexOf(queryHolder.nacText) >= 0) mustIncluded = true;
    if (itemHolder.text.indexOf(queryHolder.text) >= 0) mustIncluded = true;
    score += (0,stringMatching.wordsMatch)(queryHolder.words, itemHolder.words) / ((0,Math_int.harmonicMean)(queryHolder.words.length, itemHolder.words.length) || 1);
    score += (0,stringMatching.wordsMatch)(queryHolder.nacWords, itemHolder.nacWords) / ((0,Math_int.harmonicMean)(queryHolder.nacWords.length, itemHolder.nacWords.length) || 1);
    var dict = Object.keys(itemHolder.nacWordDict);
    Object.keys(queryHolder.nacWordDict).forEach(function (qWord) {
        var bestWordScore = 0;
        var bestWord = '';
        var word;
        for (word in dict) {
            if ((0,stringMatching.wordLike)(qWord, word) > bestWordScore) {
                bestWordScore = (0,stringMatching.wordLike)(qWord, word);
                bestWord = word;
            }
        }
        if (bestWordScore > 0) {
            score += bestWordScore / ((0,Math_int.harmonicMean)(qWord.length, bestWord.length) || 1);
            delete dict[bestWord];
        }
    });

    return { score: score, mustIncluded: mustIncluded };
};


MSMSearchingPlugin.prototype.ev_inputStopTyping = function () {
    var query = this.$input.value;
    this.query(query);
};

MSMSearchingPlugin.prototype.query = function (query) {
    query = query || '';
    query = query.trim();

    if (query && query.length > 0 && this.state !== 'RUNNING') {
        this.start();
    }
    else if (!query || query.length === 0) {
        this.pause();
        return;
    }

    var scoreList = [];
    var queryHolder = this.makeHolder({ name: query }, -1);
    var visit2calcScore = (holder) => {
        var res = Object.assign({
            item: holder.item,
            type: holder.type,
            path: holder.path
        }, this.calcScore(queryHolder, holder));
        scoreList.push(res.score);
        if (holder.children) {
            res.children = holder.children.map(visit2calcScore);
            res.childrenScore = res.children.reduce((ac, cr) => Math.max(ac, cr.score, cr.childrenScore || 0), 0);
            res.treeScore = Math.max(res.score, res.childrenScore || 0);
        }
        return res;
    };

    var itemsHolders = this.itemHolders.map(visit2calcScore);
    scoreList.push(0);
    scoreList.sort((a, b) => b - a);
    var maxScore = scoreList[0] || 0;
    var midScore;
    if (maxScore < 1) {
        midScore = Math.max(maxScore - 0.2, 0.1);
        midScore = Math.max(midScore, scoreList[Math.floor(scoreList.length * 0.2 * maxScore)] - 0.01);

    }
    else {
        midScore = maxScore * 0.6;
        midScore = Math.max(midScore, scoreList[Math.floor(scoreList.length * 0.3)] - 0.1);
    }

    var visit2filter = function (holder) {
        var score = holder.score;
        var childrenScore = holder.childrenScore || 0;
        if (holder.mustIncluded) return true;
        if (score >= midScore && childrenScore <= score) return true;
        if (holder.children) {
            holder.children = holder.children.filter(visit2filter);
            return holder.children.length > 0;
        }
        return false;
    };

    itemsHolders = itemsHolders.filter(visit2filter);

    itemsHolders.forEach(holder => {
        if (holder.children)
            holder.children.sort((a, b) => b.treeScore - a.treeScore);
    });

    itemsHolders.sort((a, b) => b.treeScore - a.treeScore);

    this.$seachGroups.forEach(elt => elt.remove());
    this.$seachGroups = itemsHolders.map(holder => {
        var elt = (0,ACore._)({
            tag: MExploreGroup,
            class: 'as-search-result',
            props: {},
            on: {
                press: (event) => {
                    this.elt.emit('press', Object.assign({ groupElt: elt, groupData: holder.item }, event), this.elt);
                }
            }
        });
        if (window.ABSOL_DEBUG) {
            elt.attr('title', 'score: ' + holder.score + ', childrenScore: ' + holder.childrenScore);
        }
        if (holder.item.name === 'root') {
            elt.name = '/';
        }
        else {
            elt.name = holder.path.slice(1).concat(holder.item.name).join(' / ');
        }
        if (holder.children) {
            elt.items = holder.children.map(child => Object.assign({ score: child.score }, child.item));
        }

        return elt;
    });
    this.elt.addChild(this.$seachGroups);
};


Object.defineProperty(MSMSearchingPlugin.prototype, 'data', {
    get: function () {
        return this._data;
    },
    set: function (value) {
        this.stop();
        value = value || null;
        if (value && !value.items) value = null;
        if (value && !value.items.length) value = null;
        this._data = value;
        if (value) this.start(true);
    }
});

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/colorpickerbutton.css
var colorpickerbutton = __webpack_require__(9693);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/colorpicker/ColorPicker.js







function ColorPicker() {
    var res = (0,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">
            <span class="f-mode">hsba(</span>
            <span class="absol-editabe-text num0">0</span><span class="separator0">deg, </span>
            <span class="absol-editabe-text num1">0</span><span class="separator1">%, </span>
            <span class="absol-editabe-text num2">0</span><span class="separator2">%, </span>
            <span class="absol-editabe-text num3">0</span><span>)</span>
        </div>`,
        '    </div>',
        '    <button class="absol-color-picker-mode">HSB</button>',
        '</div>'].join('')
    );

    res.$fMode = (0,ACore.$)('.f-mode', res);
    res.$sep0 = (0,ACore.$)('.separator0', res);
    res.$sep1 = (0,ACore.$)('.separator1', res);
    res.$sep2 = (0,ACore.$)('.separator2', res);

    res.$num0 = (0,ACore._)('editabletext.num0');
    res.$num1 = (0,ACore._)('editabletext.num1');
    res.$num2 = (0,ACore._)('editabletext.num2');
    res.$num3 = (0,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);

    (0,ACore.$)(".absol-editabe-text.num0", res).selfReplace(res.$num0);
    (0,ACore.$)(".absol-editabe-text.num1", res).selfReplace(res.$num1);
    (0,ACore.$)(".absol-editabe-text.num2", res).selfReplace(res.$num2);
    (0,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 = (0,ACore.$)('.absol-color-picker-color', res);
    res.$colorVal = (0,ACore.$)('.absol-color-picker-val', res);
    res.$draggerVal = (0,ACore.$)('.absol-color-dragger', res.$colorVal);
    res.eventHandler = OOP/* default.bindFunctions */.ZP.bindFunctions(res, ColorPicker.eventHandler);
    res.$colorVal.on('pointerdown', res.eventHandler.colorPointerDown, true);
    res.$hue = (0,ACore.$)('.absol-color-picker-hue', res);
    res.$draggerHue = (0,ACore.$)('.absol-color-dragger', res.$hue);
    res.$hue.on('pointerdown', res.eventHandler.huePointerDown);
    res.$alpha = (0,ACore.$)('.absol-color-picker-alpha', res);
    res.$alpha.on('pointerdown', res.eventHandler.alphaPointerDown);
    res.$draggerAlpha = (0,ACore.$)('.absol-color-dragger', res.$alpha);

    res.$textContainer = (0,ACore.$)('.absol-color-picker-text-container', res);

    res.$mode = (0,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 = (0,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 (value) {
        if (value) {
            this.addClass('with-alpha');
        }
        else {
            this.removeClass('with-alpha');
        }
    },
    get: function () {
        return this.containClass('with-alpha');
    }
};

ColorPicker.property.saturation = {
    set: function (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 () {
        return this._saturation;
    }
};

ColorPicker.property.brightness = {
    set: function (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 () {
        return this._brightness;
    }
};

ColorPicker.property.mode = {
    set: function (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 () {
        return this.$mode.innerHTML;
    }
};


ColorPicker.property.hue = {
    set: function (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 () {
        return this._hue;
    }
};

ColorPicker.property.alpha = {
    set: function (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 () {
        return this._alpha;
    }
};


ColorPicker.property.value = {
    set: function (value) {
        if (typeof value == 'string') {
            value = Color_Color/* default.parse */.Z.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 () {
        return Color_Color/* default.fromHSBA */.Z.fromHSBA(this.hue, this.saturation, this.brightness, this.alpha);
    }
}


ColorPicker.property.RGBA = {
    set: function (value) {
        var hsba = Color_Color/* default.rgbaToHSBA */.Z.rgbaToHSBA(value || [0, 0, 0, 0]);
        this.hue = hsba[0];
        this.saturation = hsba[1];
        this.brightness = hsba[2];
        this.alpha = hsba[3];
    },
    get: function () {
        var rgba = Color_Color/* default.hsbaToRGBA */.Z.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, b };
};


ColorPicker.prototype._getHOfEvent = function (event) {
    var hueBound = this.$hue.getBoundingClientRect();
    var h = event.clientY - hueBound.top;
    h = h / hueBound.height;
    h = Math.max(0, Math.min(1, h));
    return h;
};

ColorPicker.prototype._getAOfEvent = function (event) {
    var alphaBound = this.$alpha.getBoundingClientRect();
    var a = alphaBound.bottom - event.clientY;
    a = a / alphaBound.height;
    a = Math.max(0, Math.min(1, a));
    return a;
};

ColorPicker.prototype._getTextColorCode = function () {
    var h = this.hue + 0.5;
    if (h > 1) h -= 1;
    var s = this.saturation > 0.5 ? 0 : 1;
    var b = this.brightness > 0.5 ? 0 : 1;
    var rgba = Color_Color/* default.hsbaToRGBA */.Z.hsbaToRGBA([h, s, b, 1]);
    return 'rgba(' + rgba.map((x, i) => i < 3 ? x * 255 : x).join(',') + ')';

};

ColorPicker.prototype.init = function (props) {
    this.RGBA = [1, 1, 1, 1];
    this.super(props);
};

ColorPicker.prototype._update = function () {
    //update vs
    var rgba = Color_Color/* default.hsbaToRGBA */.Z.hsbaToRGBA([this.hue, 1, 1, 1]);
    this.$color.addStyle('background', 'rgba(' + rgba.map((x, i) => i < 3 ? x * 255 : x).join(',') + ')');
    rgba = Color_Color/* default.hsbaToRGBA */.Z.hsbaToRGBA([this.hue, this.saturation, this.brightness, this.alpha]);
    this.$textContainer.addStyle('background', 'rgba(' + rgba.map((x, i) => i < 3 ? x * 255 : x).join(',') + ')');
    this.$textContainer.addStyle('color', this._getTextColorCode());
    this._updateColorText();
};


ColorPicker.prototype._updateColorText = function () {
    var hsba = [this.hue, this.saturation, this.brightness, this.alpha];
    var mode = this.mode;
    this.$fMode.innerHTML = mode.toLocaleLowerCase() + '(';
    if (mode.match(/^H/)) {
        this.$sep0.innerHTML = 'deg, ';
        this.$sep1.innerHTML = '%, ';
        if (mode.match(/A$/)) {
            this.$sep2.innerHTML = "%, ";
            this.$num3.removeStyle('display');

        }
        else {
            this.$sep2.innerHTML = "%";
            this.$num3.addStyle('display', 'none');

        }
    }
    else {
        this.$sep0.innerHTML = ', ';
        this.$sep1.innerHTML = ', ';
        if (mode.match(/A$/)) {
            this.$sep2.innerHTML = ", ";
            this.$num3.removeStyle('display');

        }
        else {
            this.$num3.addStyle('display', 'none');
            this.$sep2.innerHTML = "";
        }

    }
    if (mode.match(/HSB/)) {
        this.$num0.text = '' + Math.round(hsba[0] * 360);
        this.$num1.text = '' + Math.round(hsba[1] * 100);
        this.$num2.text = '' + Math.round(hsba[2] * 100);
        this.$num3.text = hsba[3].toFixed(3);
    }
    else {
        var cBytes = Color_Color/* default */.Z['hsbaTo' + (mode.match(/A$/) ? mode : mode + 'A')](hsba);
        if (mode.match(/^H/)) {
            this.$num0.text = '' + Math.round(cBytes[0] * 360);
            this.$num1.text = '' + Math.round(cBytes[1] * 100);
            this.$num2.text = '' + Math.round(cBytes[2] * 100);
            this.$num3.text = hsba[3].toFixed(3);
        }
        else {
            this.$num0.text = '' + Math.round(cBytes[0] * 255);
            this.$num1.text = '' + Math.round(cBytes[1] * 255);
            this.$num2.text = '' + Math.round(cBytes[2] * 255);
            this.$num3.text = hsba[3].toFixed(3);
        }
        // var tempMode = mode.indexOf('A') < 0 ? mode + 'A' : mode;
        // var tempColor = Color['hsbaTo' + tempMode](hsba);
        // this.$textContainer.value = Color[mode.toLocaleLowerCase() + 'ToText'](tempColor);
    }
};

ColorPicker.eventHandler = {};

ColorPicker.eventHandler.colorPointerDown = function (event) {
    var newSV = this._getSVOfEvent(event);
    this.saturation = newSV.s;
    this.brightness = newSV.b;

    absol.$(document.body)
        .on('pointermove', this.eventHandler.colorPointerMove)
        .on('pointerup', this.eventHandler.colorPointerFinish)
        .on('pointerleave', this.eventHandler.colorPointerFinish);
    this.emit('change', { target: this, originEvent: event, value: this.value });
};

ColorPicker.eventHandler.colorPointerFinish = function (event) {
    absol.$(document.body)
        .off('pointermove', this.eventHandler.colorPointerMove)
        .off('pointerup', this.eventHandler.colorPointerFinish)
        .off('pointerleave', this.eventHandler.colorPointerFinish);
};

ColorPicker.eventHandler.colorPointerMove = function (event) {
    var newSV = this._getSVOfEvent(event);
    this.saturation = newSV.s;
    this.brightness = newSV.b;
    event.preventDefault();
    this.emit('change', { target: this, originEvent: event, value: this.value });
};



ColorPicker.eventHandler.huePointerDown = function (event) {
    var newH = this._getHOfEvent(event);
    this.hue = newH;
    event.preventDefault();
    absol.$(document.body)
        .on('pointermove', this.eventHandler.huePointerMove)
        .on('pointerup', this.eventHandler.huePointerFinish)
        .on('pointerleave', this.eventHandler.huePointerFinish);
    this.emit('change', { target: this, originEvent: event, value: this.value });
};

ColorPicker.eventHandler.huePointerFinish = function (event) {
    absol.$(document.body)
        .off('pointermove', this.eventHandler.huePointerMove)
        .off('pointerup', this.eventHandler.huePointerFinish)
        .off('pointerleave', this.eventHandler.huePointerFinish);
    event.preventDefault();

};

ColorPicker.eventHandler.huePointerMove = function (event) {
    var newH = this._getHOfEvent(event);
    this.hue = newH;
    event.preventDefault();
    this.emit('change', { target: this, originEvent: event, value: this.value });
};



ColorPicker.eventHandler.alphaPointerDown = function (event) {
    var newA = this._getAOfEvent(event);
    this.alpha = newA;

    absol.$(document.body)
        .on('pointermove', this.eventHandler.alphaPointerMove)
        .on('pointerup', this.eventHandler.alphaPointerFinish)
        .on('pointerleave', this.eventHandler.alphaPointerFinish);
    event.preventDefault();
    this.emit('change', { target: this, originEvent: event, value: this.value });
};

ColorPicker.eventHandler.alphaPointerFinish = function (event) {
    absol.$(document.body)
        .off('pointermove', this.eventHandler.alphaPointerMove)
        .off('pointerup', this.eventHandler.alphaPointerFinish)
        .off('pointerleave', this.eventHandler.alphaPointerFinish);
    event.preventDefault();
};

ColorPicker.eventHandler.alphaPointerMove = function (event) {
    var newA = this._getAOfEvent(event);
    this.alpha = newA;
    event.preventDefault();
    this.emit('change', { target: this, originEvent: event, value: this.value });
};

ColorPicker.eventHandler.modeClick = function (event) {
    this.mode = this.switchMode[this.mode];
    event.preventDefault();
};


ColorPicker.eventHandler.inputBlur = function () {
    var mode = this.mode;
    var alpha = 1;
    if (mode.match(/A$/)) {
        alpha = parseFloat(this.$num3.text);
    }
    var bytes;
    if (mode.match(/^H/)) {
        bytes = [parseFloat(this.$num0.text) / 360, parseFloat(this.$num1.text) / 100, parseFloat(this.$num2.text) / 100, alpha];
    }
    else if (mode.match(/^RGB/)) {
        bytes = [parseFloat(this.$num0.text) / 255, parseFloat(this.$num1.text) / 255, parseFloat(this.$num2.text) / 255, alpha];
    }

    var hsba = mode.match(/^HSB/) ? bytes : Color_Color/* default */.Z[(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];
};


ACore/* default.install */.Z.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 = BrowserDetector/* default.isMobile */.Z.isMobile;


/***
 * @extends AElement
 * @constructor
 */
function ColorPickerButton() {
    if (!ColorPickerButton.css) {
        ColorPickerButton.css = new DynamicCSS/* default */.Z()
            .setProperty('.as-color-cell.as-color-picker-button-inner.as-null .as-color-cell-value',
                'background-image',
                `url("data:image/svg+xml;base64,${(0,base64.base64EncodeUnicode)(red_cross.replace(/\$width/g, '33').replace(/\$height/g, '18'))}")`)
            .commit();
    }
    this.mode = 'OBJECT';
    this.$innerValue = (0,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#
     */

    /***
     * @name readOnly
     * @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 (EventEmitter/* default.hitElement */.ZP.hitElement(this, event) || EventEmitter/* default.hitElement */.ZP.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.readOnly) return;
    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 = (0,ACore._)('modal').on('click', function (event) {
                if (event.tagert === this) {
                    if (ColorPickerButton.lastOpen) ColorPickerButton.lastOpen.closePicker();

                }
            });
        }
        else {
            ColorPickerButton.$follower = (0,ACore._)('follower.as-color-picker-button-follower');
            ColorPickerButton.$follower.cancelWaiting();
        }

        ColorPickerButton.$ColorPicker = (0,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 (0,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 (value) {
        this._value = value;
        this.$innerValue.value = value || null;
    },
    get: function () {
        var nullable = this.nullable;
        var value = this._value;
        if (!this._value && nullable) return value;//null, ""
        if (!this._value && !nullable) {
            value = new Color_Color/* default */.Z([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 (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 () {
        return this._mode;
    }
};


ColorPickerButton.property.hasOpacity = {
    get: function () {
        return this.hasOpacityModes.indexOf(this._mode) >= 0;
    }
};


ColorPickerButton.property.nullable = {
    set: function (value) {
        if (value) {
            this.addClass('as-nullable');
        }
        else {
            this.removeClass('as-null-nullable');
        }
    },
    get: function () {
        return this.hasClass('as-nullable');
    }
};

ColorPickerButton.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-readonly');
        }
        else {
            this.removeClass('as-readonly');
        }
    },
    get: function () {
        return this.hasClass('as-readonly');
    }
};


ACore/* default.install */.Z.install(ColorPickerButton);

/* harmony default export */ const colorpicker_ColorPickerButton = (ColorPickerButton);

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/colorpicker/SelectColorSchemeMenu.js
var SelectColorSchemeMenu = __webpack_require__(5830);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/progressbar.css
var progressbar = __webpack_require__(9862);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ProgressCircle.js



var ProgressCircle_ = ACore/* default._ */.Z._;
var ProgressCircle_$ = ACore/* default.$ */.Z.$;


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 () {
    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 += `${50 + 50 * cosAngle}% ${50 + 50 * sinAngle}%`;
    pl += ', 50% 50%)';
    this.$pie.addStyle('clipPath', pl);
    this.$end.addStyle({
        left: `calc(${50 + 50 * cosAngle}% - ${(cosAngle + 1) * 0.8/2}em)`,
        top: `calc(${50 + 50 * sinAngle}% - ${(sinAngle + 1) * 0.8/2}em)`
    });

    if (this._value !== this._viewValue) {
        requestAnimationFrame(() => 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 (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 () {
        return this._variant;
    }
};

ProgressCircle.property.value = {

    /**
     * @this ProgressCircle
     * @param value
     */
    set: function (value) {
        value = Math.max(0, Math.min(1, value || 0));
        this._value = value;
        this._updateValue();
        this._updateText();

    },
    get: function () {
        return this._value;
    }
};


ProgressCircle.property.text = {
    set: function (value) {
        value = value || '';
        if (typeof value !== "string") value = '';
        this._text = value;
        this._updateText();
    },
    get: function () {
        return this._text;
    }
}


ProgressCircle.property.animated = {
    set: function (value) {
        value = !!value;
        this._animated = value;
        if (value) {
            this.addClass('as-animated');
        }
        else {
            this.removeClass('as-animated');
        }
    },
    get: function () {
        return this._animated;
    }
}



ACore/* default.install */.Z.install(ProgressCircle);


/* harmony default export */ const js_ProgressCircle = (ProgressCircle);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/expressioninput.css
var expressioninput = __webpack_require__(3386);
// EXTERNAL MODULE: ./node_modules/absol/src/SCLang/SCGrammar.js
var SCGrammar = __webpack_require__(3224);
// EXTERNAL MODULE: ./node_modules/absol/src/Pharse/DPParser.js + 1 modules
var DPParser = __webpack_require__(3281);
// EXTERNAL MODULE: ./node_modules/absol/src/Pharse/DPParseInstance.js
var DPParseInstance = __webpack_require__(56);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ExpressionInput.js



















/***
 * @extends PositionTracker
 * @constructor
 */
function ExpressionInput() {
    this.domSignal = new DelaySignal/* default */.Z();
    this.$rangeCtn = (0,ACore.$)('.as-expression-input-range-ctn', this);
    this.$content = (0,ACore.$)('.as-expression-input-content', this);
    this.$iconCtn = (0,ACore.$)('.as-expression-input-icon-ctn', this);
    // this.$forground = $('.as-expression-input-foreground', this);

    /**
     *
     * @type {null|AElement}
     */
    this.$icon = null;
    this.$alertIcon = (0,ACore.$)('.mdi.mdi-alert-circle', this.$iconCtn);
    this.engine = new EIEngine(this);
    this.userActionCtrl = new EIUserActionController(this);
    // this.selection = new EISelection(this);

    this.autoCompleteCtrl = new EIAutoCompleteController(this);
    this.undoMgn = new EIUndoManager(this);
    this.cmdTool = new EICommandTool(this);

    this._icon = null;


    /****
     * @name value
     * @type {string}
     * @memberOf ExpressionInput#
     */

    /**
     * @type {{variables: string[], functions: string[], sampleJS?:{getFunctions: function(): string[], getVariables: function(): string[]}}}
     * @memberOf ExpressionInput#
     * @name autocomplete
     */
    /**
     * @type {*}
     * @memberOf ExpressionInput#
     * @name icon
     */
}


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

ExpressionInput.render = function () {
    return (0,ACore._)({
        tag: js_PositionTracker,
        extendEvent: ['stopchange', 'blur', 'focus'],
        class: ['as-expression-input'],
        child: [
            {
                class: 'as-expression-input-icon-ctn',
                child: ['span.mdi.mdi-alert-circle']
            },
            {
                class: 'as-expression-input-content',
                attr: {
                    contenteditable: 'true',
                    spellcheck: 'false'
                }
            }//,
            // { class: 'as-expression-input-range-ctn' },

        ]
    });
};

ExpressionInput.prototype.requestUpdateSize = function () {
    if (this.cmdTool && this.cmdTool.$ctn && this.cmdTool.$ctn.parentElement) {
        this.cmdTool.$ctn.updatePosition();
    }
};

ExpressionInput.prototype.notifySizeCanBeChanged = function () {
    var bound = this.getBoundingClientRect();
    if (!this._prevSize || this._prevSize.width !== bound.width || this._prevSize.height !== bound.height) {
        ResizeSystem/* default.updateUp */.Z.updateUp(this, true);
    }
    this._prevSize = { width: bound.width, height: bound.height };
};

ExpressionInput.prototype.revokeResource = function () {
    (0,utils.revokeResource)(this.engine);
    (0,utils.revokeResource)(this.autoCompleteCtrl);
    (0,utils.revokeResource)(this.undoMgn);
    (0,utils.revokeResource)(this.cmdTool);
    (0,utils.revokeResource)(this.domSignal);
};


ExpressionInput.prototype.focus = function () {
    this.$content.focus();
    this.engine.setSelectedPosition(this.engine.value.length);
};

ExpressionInput.property = {};

ExpressionInput.property.readOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-read-only');
            this.$content.removeAttribute('contenteditable');
        }
        else {
            this.removeClass('as-read-only');
            if (!this.hasClass('as-disabled')) {
                this.$content.setAttribute('contenteditable', 'true');
            }
        }
    },
    get: function () {
        return this.hasClass('as-read-only');
    }
};

ExpressionInput.property.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('as-disabled');
            this.$content.removeAttribute('contenteditable');
        }
        else {
            this.removeClass('as-disabled');
            if (!this.hasClass('as-read-only')) {
                this.$content.setAttribute('contenteditable', 'true');
            }
        }
    },
    get: function () {
        return this.hasClass('as-disabled');
    }
}

ExpressionInput.property.value = {
    get: function () {
        return this.engine.value;
    },
    set: function (value) {
        this.engine.value = value;
        this.undoMgn.reset();
    }
};

ExpressionInput.property.icon = {
    /**
     * @this ExpressionInput
     * @param value
     */
    set: function (value) {
        if (this.$icon) this.$icon.remove();
        this.$iconCtn.clearChild();
        var elt;
        if ((0,Dom/* isDomNode */.mV)(value)) {
            if (value.parentElt)
                value = value.cloneNode(true);
            elt = value;
        }
        else if (value && (typeof value === 'string' || typeof value === 'object')) {
            if (value === 'default') value = 'span.mdi.mdi-equal';
            elt = (0,ACore._)(value);
        }

        if (elt) {
            this.$iconCtn.addChild(elt);
            this.$icon = elt;
            this.addClass('as-has-icon');
        }
        else {
            this.$icon = null;
            value = null;
            this.removeClass('as-has-icon');
        }
        this._icon = value;
    },
    get: function () {
        return this._icon;
    }
};

/***
 * @memberOf ExpressionInput#
 * @type {{}}
 */
ExpressionInput.eventHandler = {};


ACore/* default.install */.Z.install(ExpressionInput);


/* harmony default export */ const js_ExpressionInput = (ExpressionInput);


/**
 *
 * @param {ExpressionInput} elt
 * @constructor
 */
function EIUserActionController(elt) {
    this.elt = elt;
    this.$content = elt.$content;
    this._stopChangeTO = -1;
    /**
     *
     * @type {EIEngine}
     */
    this.engine = elt.engine;

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

    this.elt.on('stopchange', () => {
        this.elt.undoMgn.commit();
        this.elt.engine.highlightError();
    });

    this.$content.on({
        cut: this.ev_cut,
        blur: this.ev_blur,
        focus: this.ev_focus,
        paste: this.ev_paste,
        keydown: this.ev_keydown
    });


}


EIUserActionController.prototype.delayNotifyStopChange = function () {
    if (this._stopChangeTO > 0) {
        clearTimeout(this._stopChangeTO);
    }
    this._stopChangeTO = setTimeout(function () {
        this._stopChangeTO = -1;
        this.elt.emit('stopchange', {}, this.elt);
    }.bind(this), 200);
};


EIUserActionController.prototype.ev_keydown = function (event) {
    var key = (0,keyboard/* keyboardEventToKeyBindingIdent */.Ej)(event);
    if (key.match(/^[a-zA-Z0-9]$/)) {
        this.elt.engine.requestRedrawTokens();
        setTimeout(() => {
            this.elt.autoCompleteCtrl.openDropdownIfNeed();
            if (this.elt.autoCompleteCtrl.isOpen) {
                this.elt.autoCompleteCtrl.updateDropDownContent();
            }
        }, 200);
    }
    else if (key === 'enter') {
        event.preventDefault();
        if (this.elt.autoCompleteCtrl.isSelecting()) {
            this.elt.autoCompleteCtrl.applySelectingSuggestion();
        }
        else {
            this.engine.breakLine();
        }
    }
    else if (key === 'arrowleft' || key === 'arrowright' || key.match(/^[^a-zA-Z0-9]$/)) {
        this.elt.autoCompleteCtrl.closeDropdownIfNeed();
    }
    else if (key === 'arrowup' || key === 'arrowdown') {
        if (this.elt.autoCompleteCtrl.isSelecting()) {
            event.preventDefault();
            this.elt.autoCompleteCtrl.moveSelectingSuggestion(key === 'arrowup' ? 'up' : 'down');
        }
    }
    else if (key === 'ctrl-space') {
        this.engine.redrawTokens();
        this.elt.autoCompleteCtrl.openDropdown();
    }
    else if (key === 'escape') {
        if (this.elt.autoCompleteCtrl.isOpen) {
            this.elt.autoCompleteCtrl.closeDropdown();
            event.preventDefault();
        }
    }
    else if (key === 'ctrl-z') {
        event.preventDefault();
        this.elt.undoMgn.undo();
    }
    else if (key === 'ctrl-y') {
        event.preventDefault();
        this.elt.undoMgn.redo();
    }
    else if ((event.ctrlKey && event.key === 'X') || (!event.ctrlKey && event.key.length === 1)
        || event.key === 'Delete'
        || event.key === 'Backspace') {
        this.elt.engine.requestRedrawTokens();
        setTimeout(() => {
            this.elt.autoCompleteCtrl.openDropdownIfNeed();
            if (this.elt.autoCompleteCtrl.isOpen) {
                this.elt.autoCompleteCtrl.updateDropDownContent();
            }
        }, 200);
    }
    this.delayNotifyStopChange();
    setTimeout(() => {
        this.elt.notifySizeCanBeChanged();
    }, 1);
};

EIUserActionController.prototype.ev_paste = function (event) {
    var paste = (event.clipboardData || window.clipboardData).getData('text');
    paste = paste.replace(/[\r\n]+/g, ' ');
    event.preventDefault();
    var pos = this.elt.engine.getSelectPosition();
    if (!pos || !paste) return;
    var value = this.elt.value;
    this.elt.engine.value = value.substring(0, pos.start) + paste + value.substring(pos.end);
    this.elt.engine.setSelectedPosition(pos.start + paste.length);
    this.elt.engine.highlightError();
    this.elt.notifySizeCanBeChanged();
};

EIUserActionController.prototype.ev_cut = function (event) {
    this.elt.domSignal.emit('redrawTokens');
    this.delayNotifyStopChange();
    this.elt.notifySizeCanBeChanged();
};


EIUserActionController.prototype.ev_focus = function (event) {
    this.elt.engine.clearErrorHighlight();
    setTimeout(function () {
        //todo
        this.elt.engine.getSelectPosition();
    }.bind(this), 100);
};

EIUserActionController.prototype.ev_blur = function (event) {
    this.elt.engine.highlightError();
};

EIUserActionController.prototype.ev_dragInit = function (event) {
};


/**
 *
 * @param {ExpressionInput} elt
 * @constructor
 */
function EIEngine(elt) {
    this.elt = elt;
    this.lastSelectedPosition = { start: 0, end: 0, direction: 'forward' };
    this.$content = elt.$content;
    /**
     *
     * @type {null|Range}
     */
    this.range = null;
    this.elt.domSignal.on('redrawTokens', this.redrawTokens.bind(this));
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }
    this._isListenSelectionChange = false;
    this.$content.on('focus', this.ev_focus);
}


EIEngine.prototype.ev_focus = function () {
    if (!this._isListenSelectionChange) {
        document.addEventListener('selectionchange', this.ev_range);
        this._isListenSelectionChange = true;
    }
};


EIEngine.prototype.ev_range = function () {
    if (!this.elt.isDescendantOf(document.body)) {
        document.removeEventListener('selectionchange', this.ev_range);
        this._isListenSelectionChange = false;
    }
    this.updateRange();
};


EIEngine.prototype.revokeResource = function () {
    if (this._isListenSelectionChange) {
        document.removeEventListener('selectionchange', this.ev_range);
        this._isListenSelectionChange = false;
    }
};

EIEngine.prototype.requestRedrawTokens = function () {
    this.elt.domSignal.emit('redrawTokens');
}

EIEngine.prototype.highlightError = function () {
    var elt = this.elt;
    var contentElt = this.$content;
    var value = elt.value.trim();
    var it = EIParser.parse(value, 'exp');
    var i, notSkipCount = 0;
    var tokenErrorIdx = -1;
    if (value && it.error) {
        elt.addClass('as-error');
        elt.attr('title', it.error.message);
        tokenErrorIdx = it.error.tokenIdx;
    }
    else {
        elt.removeClass('as-error');
    }

    for (i = 0; i < contentElt.childNodes.length; ++i) {//todo: fix conflict (run before redraw)
        if (contentElt.childNodes[i].getAttribute &&contentElt.childNodes[i].classList.contains('as-token') && contentElt.childNodes[i].getAttribute('data-type') !== 'skip') {
            if (notSkipCount === tokenErrorIdx) {
                contentElt.childNodes[i].classList.add('as-unexpected-token');
            }
            else {
                contentElt.childNodes[i].classList.remove('as-unexpected-token');
            }
            notSkipCount++;
        }
    }
};


EIEngine.prototype.clearErrorHighlight = function () {
    var contentElt = this.$content;
    for (var i = 0; i < contentElt.length; ++i) {
        if (contentElt.childNodes[i].classList.contains('as-token') && contentElt.childNodes[i].getAttribute('data-type') !== 'skip') {
            contentElt.childNodes[i].classList.remove('as-unexpected-token');
        }
    }
};


EIEngine.prototype.drawTokensContent = function () {
    var selectedPos = this.getSelectPosition();
    var value = this.value;
    var tokens = EIParser.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);
};

EIEngine.prototype.updateTokenExType = function () {
    /**
     * @type {HTMLElement[]}
     */

    var tokenEltChain = Array.prototype.slice.call(this.$content.childNodes);
    var token, nextToken;
    var i, j;
    for (i = 0; i < tokenEltChain.length; ++i) {
        token = tokenEltChain[i];
        if (this.isTextNode(token)) continue;
        if (token.innerText === "true" || token.innerText === "false") {
            token.setAttribute('data-ex-type', 'boolean');
        }
        else if (token.getAttribute('data-type') === 'word') {
            j = i + 1;
            nextToken = tokenEltChain[i + 1];
            while (nextToken) {
                if (nextToken.getAttribute('data-type') === 'symbol' && nextToken.innerText === '(') {
                    token.setAttribute('data-ex-type', 'function');
                    break;
                }
                else if (nextToken.getAttribute('data-type') === 'skip') {
                    nextToken = tokenEltChain[++j];
                }
                else {
                    break;
                }
            }
        }
        else {
            token.removeAttribute('data-ex-type');
        }
    }
};

EIEngine.prototype.redrawTokens = function () {
    this.drawTokensContent();
    this.updateTokenExType();
    this.elt.notifySizeCanBeChanged();

};

/**
 *
 * @param {{type: string, content: string}} token
 * @returns {*}
 */
EIEngine.prototype.makeTokenElt = function (token) {
    if (token.content === '\n') return (0,ACore._)('br');
    return (0,ACore._)({
        tag: 'span',
        class: ['as-token'],
        attr: {
            'data-type': token.type
        },
        child: { text: token.content }
    });
};

EIEngine.prototype.insertText = function (text) {
    var lastPos = this.getSelectPosition();
    var value;
    if (this.lastSelectedPosition) {
        value = this.elt.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.elt.$content) {
            this.setSelectedPosition(this.lastSelectedPosition);
        }
    }
    else this.appendText(text);
    this.elt.userActionCtrl.delayNotifyStopChange();
};

EIEngine.prototype.appendText = function (text) {
    var newValue = this.value + text;
    this.value = newValue;
    if (document.activeElement === this.$content) {
        this.setSelectedPosition(newValue.length);
    }
    this.elt.userActionCtrl.delayNotifyStopChange();
};

EIEngine.prototype.isValidRange = function (range) {
    return AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(range.startContainer, this.$content) && AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(range.endContainer, this.$content);
};

EIEngine.prototype.updateRange = function () {
    var sel = window.getSelection();
    var range;
    for (var i = 0; i < sel.rangeCount; ++i) {
        range = sel.getRangeAt(i);
        if (this.isValidRange(range))
            this.range = range;
    }
};

EIEngine.prototype.isTextNode = function (node) {
    return node.nodeType === Node.TEXT_NODE;
};

EIEngine.prototype.isWordToken = function (node) {
    if (this.isTextNode(node)) return false;
    return node.getAttribute('data-type') === 'word';
};

EIEngine.prototype.isSymbolToken = function (node) {
    if (this.isTextNode(node)) return false;
    return node.getAttribute('data-type') === 'symbol';
};

EIEngine.prototype.isMemberSymbolToken = function (node) {
    return this.isSymbolToken(node) && node.innerText === '->';
};


EIEngine.prototype.isSkipToken = function (node) {
    if (this.isTextNode(node)) return false;
    return node.getAttribute('data-type') === 'skip';
}

EIEngine.prototype.getRange = function () {
    this.updateRange();
    return this.range;
};

/**
 *
 * @param {Range} range
 */
EIEngine.prototype.setRange = function (range) {
    this.range = range;
    var sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange(range);
};

EIEngine.prototype.childIndexOf = function (node) {
    if (!node.parentElement) return 0;
    return Array.prototype.indexOf.call(node.parentElement.childNodes, node);
};

EIEngine.prototype.lcaOf = function (nd1, nd2) {
    var track1 = [];
    var track2 = [];
    var rootNode = this.elt;
    while (nd1 && (nd1 !== rootNode)) {
        track1.unshift(nd1);
        nd1 = nd1.parentElement;
    }

    while (nd2 && (nd2 !== rootNode)) {
        track2.unshift(nd2);
        nd2 = nd2.parentElement;
    }
    var res = null;
    for (var i = 0; i < track1.length && i < track2.length; ++i) {
        if (track1[i] === track2[i]) res = track1[i];
        else break;
    }
    return res;
};

EIEngine.prototype.trimLeft = function (nd, ofs) {
    if (this.isTextNode(nd)) {
        nd.data = nd.data.substring(ofs);
    }
    else {
        for (var i = 0; i < ofs; ++i) {
            nd.removeChild(nd.firstChild);
        }
    }
};

EIEngine.prototype.trimRight = function (nd, ofs) {
    if (this.isTextNode(nd)) {
        nd.data = nd.data.substring(0, ofs);
    }
    else {
        while (nd.childNodes.length > ofs) {
            nd.removeChild(nd.lastChild);
        }
    }
};


EIEngine.prototype.breakTextNode = function (textNode, offset) {
    var parent = (0,ACore.$)(textNode.parentElement);
    var text = textNode.data;
    var newTextNode = (0,ACore._)({ text: text.substring(offset) });
    textNode.data = text.substring(0, offset);
    parent.addChildAfter(newTextNode, textNode);
    return newTextNode;
};


EIEngine.prototype.breakElement = function (elt, offset) {
    var parent = (0,ACore.$)(elt.parentElement);
    var newElt = elt.cloneNode(false);
    var rightChildren = Array.prototype.slice.call(elt.childNodes, offset);
    for (var i = 0; i < rightChildren.length; ++i) {
        newElt.appendChild(rightChildren[i]);
    }
    parent.addChildAfter(newElt, elt);
    return newElt;
};

EIEngine.prototype.breakNode = function (node, offset) {
    if (this.isTextNode(node)) {
        return this.breakTextNode(node, offset);
    }
    else {
        return this.breakElement(node, offset);
    }
};


EIEngine.prototype.breakLine = function () {
    var range = this.getRange();
    if (!range) return;
    var startCtn = range.startContainer;
    var endCtn = range.endContainer;
    var startOfs = range.startOffset;
    var endOfs = range.endOffset;
    var newNd;
    var lcaNd = this.lcaOf(startCtn, endCtn);
    while (startCtn !== lcaNd) {
        this.trimRight(startCtn, startOfs);
        startOfs = this.childIndexOf(startCtn) + 1;
        startCtn = startCtn.parentElement;
    }

    while (endCtn !== lcaNd) {
        this.trimLeft(endCtn, endOfs);
        endOfs = this.childIndexOf(endCtn);
        endCtn = endCtn.parentElement;
    }

    if (this.isTextNode(startCtn)) {
        newNd = startCtn.parentElement.cloneNode(false);
        newNd.appendChild((0,ACore._)({ text: startCtn.data.substring(0, startOfs) }));
        startCtn.parentElement.parentElement.insertBefore(newNd, startCtn.parentElement);
        startCtn.data = startCtn.data.substring(endOfs);
        newNd = (0,ACore._)('br');
        startCtn.parentElement.parentElement.insertBefore(newNd, startCtn.parentElement);
        startCtn = newNd.parentElement;
        startOfs = this.childIndexOf(newNd) + 1;
        endCtn = startCtn;
        endOfs = startOfs;

    }
    else if (startCtn === this.$content) {
        Array.prototype.slice.call(startCtn.childNodes, startOfs, endOfs - 1).forEach(nd => nd.remove());
        newNd = (0,ACore._)('br');
        startCtn.insertBefore(newNd, startCtn.childNodes[startOfs]);
        endOfs = startOfs + 1;
        startOfs = endOfs;
    }
    else {
        endCtn = this.breakElement(startCtn, startOfs);
        endOfs -= startCtn;
        if (endOfs >= 0) {
            newNd = this.breakElement(endCtn, endOfs);
            endCtn.remove();
            endCtn = newNd;
            endOfs = 0;
        }
        newNd = (0,ACore._)('br');
        endCtn.parentElement.insertBefore(newNd, endCtn);
        startCtn = newNd.parentElement;
        startOfs = this.childIndexOf(newNd) + 1;
        endCtn = startCtn;
        endOfs = startOfs;
    }

    var childNodes = Array.prototype.slice.call(this.$content.childNodes);
    var nd;
    for (var i = 0; i < childNodes.length; ++i) {
        nd = childNodes[i];
        if (nd.tagName === 'BR') continue;
        if (this.stringOf(nd).length === 0) {
            if (AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(startCtn, nd)) {
                startCtn = this.$content;
                startOfs = this.childIndexOf(nd);
            }
            if (AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(endCtn, nd)) {
                endCtn = this.$content;
                endOfs = this.childIndexOf(nd);
            }
            nd.remove();
        }
    }


    range = document.createRange();
    range.setStart(startCtn, startOfs);
    range.setEnd(endCtn, endOfs);
    this.setRange(range);

};

EIEngine.prototype.domRange2SelectPosition = function (range) {
    var sel = window.getSelection();
    if (!range) return null;
    var direction = 'forward';
    if (!range) return null;
    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,
        startCtn: range.startContainer, startOffset: range.startOffset,
        endCtn: range.endContainer, endOffset: range.endOffset
    };
};

EIEngine.prototype.getSelectPosition = function () {
    var range = this.getRange();
    this.lastSelectedPosition = this.domRange2SelectPosition(range) || this.lastSelectedPosition;
    return this.lastSelectedPosition;
};


/**
 *
 * @param  {null|number|{start: number, end: number}=}pos
 */
EIEngine.prototype.setSelectedPosition = function (pos) {
    var start;
    var end;
    if (typeof pos === "number") {
        start = pos;
        end = pos;
    }
    else if (pos === null) {
        return;
    }
    else {
        start = pos.start;
        end = pos.end;
    }


    var startCtn, startOfs, endCtn, endOfs;
    var text;
    text = '';
    var visit = (nd) => {
        var prevText = text;
        var parent = nd.parentElement;
        if (this.isTextNode(nd)) {
            text += nd.data;
            if (text.length > start && prevText.length <= start) {
                startCtn = nd;
                startOfs = start - prevText.length;
            }
            if (text.length > end && prevText.length <= end) {
                endCtn = nd;
                endOfs = end - prevText.length;
            }
        }
        else if (nd.tagName === 'BR' && parent && parent.lastChild !== nd) {
            text += '\n';
            if (text.length > start && prevText.length <= start) {
                startCtn = parent;
                startOfs = this.childIndexOf(nd);
            }
            if (text.length > end && prevText.length <= end) {
                endCtn = parent;
                endOfs = this.childIndexOf(nd);
            }
        }
        else {
            for (var i = 0; i < nd.childNodes.length; ++i) {
                visit(nd.childNodes[i]);
            }
        }
    }

    visit(this.$content);


    if (!startCtn) {
        startCtn = this.$content;
        startOfs = this.$content.childNodes.length;
    }

    if (!endCtn) {
        endCtn = startCtn;
        endOfs = startOfs;
    }


    var range = document.createRange();
    range.setStart(startCtn, startOfs);
    range.setEnd(endCtn, endOfs);
    this.setRange(range);
};

EIEngine.prototype.getPosition = function (node, offset) {
    var text = '';
    var found = false;
    var visit = (nd) => {
        var i;
        if (found) return;
        if (nd === node) {
            if (this.isTextNode(nd)) {
                text += nd.data.substring(0, offset);
            }
            else {
                for (i = 0; i < nd.childNodes.length && i < offset; ++i) {
                    visit(nd.childNodes[i]);
                }
            }
            found = true;
            return;
        }
        var parent = nd.parentElement;
        if (nd.tagName === 'BR' && parent && parent.lastChild !== nd) {
            text += '\n';
        }
        if (this.isTextNode(nd)) {
            text += nd.data;
        }
        else {
            for (i = 0; i < nd.childNodes.length && !found; ++i) {
                visit(nd.childNodes[i]);
            }
        }

    }

    visit(this.$content);


    return text.length;
};


EIEngine.prototype.stringOf = function (node) {
    if (!node) return '';
    if (node.nodeType === 3) {
        return node.data;
    }
    var res = '';
    var parent = node.parentElement;
    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';
    }


    return res + Array.prototype.map.call(node.childNodes, (cNode, index, arr) => {
        return this.stringOf(cNode, node);
    }).join('');
};

/**
 *
 * @param offset
 * @returns {AElement}
 */
EIEngine.prototype.tokenAt = function (offset) {
    var l = 0;
    var res = null;
    var nd, i;
    for (i = 0; i < this.$content.childNodes.length; ++i) {
        nd = this.$content.childNodes[i];
        l += this.stringOf(nd).length;
        if (l > offset || (i + 1 === this.$content.childNodes.length && l === offset)) {
            res = nd;
            break;
        }
    }
    return res;
};

/**
 *
 * @param {AElement}token
 * @returns {AElement}
 */
EIEngine.prototype.findPrefixWordTokenOf = function (token) {
    if (!token) return null;
    if (!this.isWordToken(token) && this.stringOf(token) !== '->') return null;
    var temp = token;
    var prefixStartElt = null;
    var state = this.isWordToken(temp) ? 0 : 1;//0: after is word, 1: symbol
    temp = temp.previousSibling;
    while (temp) {
        if (this.isSkipToken(temp)) {
            temp = temp.previousSibling;
            continue;
        }
        if (state === 0) {
            if (this.stringOf(temp) === '->') {
                state = 1;
            }
            else break;
        }
        else {
            if (this.isWordToken(temp)) {
                prefixStartElt = temp;
                state = 0;
            }
            else break;
        }
        temp = temp.previousSibling;
    }
    return prefixStartElt || null;
};

//
// EIEngine.prototype.selectCurrentMemberExpression = function () {
//     var rage = this.getRange();
//     if (!rage) return;
//     var startCtn = rage.startContainer;
//     var endCtn = rage.endContainer;
//     var startOfs = rage.startOffset;
//     var endOfs = rage.endOffset;
//
// };

Object.defineProperty(EIEngine.prototype, 'value', {
    get: function () {
        return Array.prototype.map.call(this.$content.childNodes, nd => this.stringOf(nd)).join('');
    },
    set: function (value) {
        var tokens = EIParser.tokenizer.tokenize(value || '');
        this.$content.clearChild()
            .addChild(tokens.map(function (token) {
                return this.makeTokenElt(token);
            }.bind(this)));
        this.updateTokenExType();
        this.lastSelectedPosition = {
            start: value.length,
            end: value.length,
            direction: 'forward'
        };
    }
});


/**
 *
 * @param {ExpressionInput} elt
 * @constructor
 */
function EIUndoManager(elt) {
    this.elt = elt;
    this.reset();
}

/**
 *
 * @returns {boolean} is changed value and commit success
 */
EIUndoManager.prototype.commit = function () {
    var text = this.elt.value;
    var range = this.elt.engine.getSelectPosition() || { start: text.length, end: text.length };

    var curValue = this.stack[this.idx].value;
    if (curValue === text) return false;

    var newItem = {
        value: text,
        range: { start: range.start, end: range.end, direction: range.direction || 'forward' }
    };
    while (this.stack.length > this.idx + 1) {
        this.stack.pop();
    }
    this.idx = this.stack.length;
    this.stack.push(newItem);
    return true;
};


EIUndoManager.prototype.reset = function () {
    var value = this.elt.value;
    this.stack = [{ value: value, range: { start: value.length, end: value.length, direction: "forward" } }];
    this.idx = 0;
};


EIUndoManager.prototype.undo = function () {
    if (this.idx <= 0) return;
    this.idx--;
    var item = this.stack[this.idx];
    this.elt.engine.value = item.value;
    this.elt.engine.setSelectedPosition(item.range);
};

EIUndoManager.prototype.redo = function () {
    if (this.idx + 1 >= this.stack.length) return;
    this.idx++;
    var item = this.stack[this.idx];
    this.elt.engine.value = item.value;
    this.elt.engine.setSelectedPosition(item.range);
};


/**
 *
 * @param {ExpressionInput} elt
 * @constructor
 */
function EIAutoCompleteController(elt) {
    this.elt = elt;
    this.$content = elt.$content;
    this.$tokenTarget = null;
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }

    this.rawSuggestionCache = {
        value: null,
        time: 0
    }

    /**
     *
     * @type {EISuggestionList |null}
     */
    this.$suggestionList = null;
    this.query = null;

    this.isOpen = false;
    this.dropIsDown = true;
}

EIAutoCompleteController.prototype.revokeResource = function () {


};

EIAutoCompleteController.prototype.openDropdownIfNeed = function () {
    if (this.isOpen) return;
    var query = this.getCurrentSearch();
    if (query && query.value && query.value.trim()) {
        this.openDropdown();
    }
}


/**
 *
 */
EIAutoCompleteController.prototype.openDropdown = function () {
    if (this.isOpen) {
        this.updateDropDownContent();
        return;
    }
    if (!this.hasSuggestions()) return;
    this.isOpen = true;
    this.dropIsDown = true;
    if (!this.$suggestionList) {
        this.$suggestionList = (0,ACore._)({
            tag: EISuggestionList,
            style: {
                top: '10px',
                left: '10px',
                position: 'fixed'
            },
            on: {
                select: (event) => {
                    this.applySuggestion(event.data);
                    this.closeDropdown();
                }
            }
        });
    }

    this.$suggestionList.addTo(this.elt);


    var zIndex = (0,utils.findMaxZIndex)(this.elt) + 1;
    this.$suggestionList.addStyle('z-index', zIndex + '');
    this.$suggestionList.reset();


    this.elt.startTrackPosition();


    // this.$dropDown.addTo(this.elt);

    this.$tokenTarget = null;


    this.updateDropDownContent();
    this.updateDropDownPosition();
    setTimeout(() => {
        document.addEventListener('click', this.ev_clickOut);
    }, 200);
};

EIAutoCompleteController.prototype.closeDropdown = function () {
    if (!this.isOpen) return;
    this.isOpen = false;
    this.elt.stopTrackPosition();
    this.$suggestionList.remove();
    document.removeEventListener('click', this.ev_clickOut);
}

/**
 *
 * @returns {null|{prefix: string, value, tokenElt: HTMLElement, prefixStartElt: HTMLElement}}
 */
EIAutoCompleteController.prototype.getCurrentSearch = function () {
    var engine = this.elt.engine;
    var pos = this.elt.engine.getSelectPosition();
    if (!pos) return null;//all
    var tokenElt = this.elt.engine.tokenAt(pos.start);
    if (!tokenElt) return null;
    if (!engine.isWordToken(tokenElt)) {
        tokenElt = tokenElt.previousSibling;
    }
    if (!tokenElt) return null;
    var temp = tokenElt;
    while (temp) {
        if (engine.isSymbolToken(temp)) {
            if ((engine.stringOf(temp) === '->')) {
                tokenElt = temp;
            }
            else {
                break;
            }
        }
        else if (engine.isSkipToken(temp)) {

        }
        else if (engine.isWordToken(temp)) {
            tokenElt = temp;
        }
        temp = temp.nextSibling;
    }

    if (!engine.isWordToken(tokenElt) && !engine.isMemberSymbolToken(tokenElt)) return null;

    var res = {
        prefix: '',
        value: '',
        tokenElt: null,
        prefixStartElt: null
    };

    temp = tokenElt;
    var prefixStartElt = engine.findPrefixWordTokenOf(tokenElt);

    res.value = engine.stringOf(tokenElt);
    res.tokenElt = tokenElt;

    if (prefixStartElt) {
        res.prefixStartElt = prefixStartElt;
        temp = prefixStartElt;
        while (temp !== tokenElt) {
            if (engine.isSkipToken(temp)) {
                temp = temp.nextSibling;
                continue;
            }

            res.prefix += engine.stringOf(temp);
            temp = temp.nextSibling;
        }
    }

    return res;
};

EIAutoCompleteController.prototype.getCurrentText = function () {
    var pos = this.elt.engine.getSelectPosition();
    if (!pos) return '';

    var res = {
        value: '',
        tokenElt: null
    };
    var tokenElt = this.elt.engine.tokenAt(pos.start);
    if (!tokenElt || !tokenElt.getAttribute || tokenElt.getAttribute('data-type') !== 'word') {
        res.tokenElt = tokenElt;
        res.value = '';
        tokenElt = null;
    }
    if (!tokenElt && pos && pos.start > 0) {
        tokenElt = this.elt.engine.tokenAt(pos.start - 1);
    }

    if (tokenElt && tokenElt.getAttribute && tokenElt.getAttribute('data-type') === 'word') {
        res.value = tokenElt.innerText;
        res.tokenElt = tokenElt;
    }

    console.log(res);

    return res;
};

EIAutoCompleteController.prototype.updateDropDownContent = function () {
    if (!this.isOpen) return;
    this.query = this.getCurrentSearch();
    this.$suggestionList.data = this.getSuggestionTree(this.query);
    this.$suggestionList.selectMaxScoreItem();
    this.updateDropDownPosition();
};

EIAutoCompleteController.prototype.updateDropDownPosition = function () {
    if (!this.isOpen) return;
    var bound;
    var targetELt = this.query && this.query.tokenElt;
    var range = this.elt.engine.getRange();
    var selected = this.elt.engine.getSelectPosition();
    var dropBound = this.$suggestionList.getBoundingClientRect();
    if (targetELt) {
        bound = targetELt.getBoundingClientRect();
    }
    if (!bound) {
        bound = range.getBoundingClientRect();
        if (!bound.width || !bound.height) bound = null;
    }

    if (!bound && selected) {
        targetELt = this.elt.engine.tokenAt(selected.start);
        if (targetELt) {
            bound = targetELt.getBoundingClientRect();
        }
    }

    if (!bound) {
        bound = this.elt.$content.getBoundingClientRect();
    }

    var screenHeight = (0,Dom/* getScreenSize */.tE)().height;
    var aTop = bound.top - 10;
    var aBottom = screenHeight - bound.bottom - 10;
    var contentHeight = this.$suggestionList.scrollHeight;
    if (this.dropIsDown) {
        if (aBottom < contentHeight && aBottom <= aTop) {
            this.dropIsDown = false;
        }
    }
    else {
        if (aTop < contentHeight && aTop <= aBottom) {
            this.dropIsDown = true;
        }
    }

    var screenSize = (0,Dom/* getScreenSize */.tE)();
    this.$suggestionList.addStyle('left', Math.max(0, Math.min(bound.left, screenSize.width - dropBound.width)) + 'px');
    this.$suggestionList.addStyle('max-height', this.dropIsDown ? aBottom + 'px' : aTop + 'px');
    var listBound;
    if (this.dropIsDown) {
        this.$suggestionList.addStyle('top', bound.bottom + 'px');
    }
    else {
        listBound = this.$suggestionList.getBoundingClientRect();
        this.$suggestionList.addStyle('top', (bound.top - listBound.height) + 'px');
    }
};

EIAutoCompleteController.prototype.getRawSuggestion = function () {
    var now = Date.now();
    if (now - this.rawSuggestionCache.time < 3000) {
        return this.rawSuggestionCache.value;
    }
    var variables = [];
    var functions = [];
    var temp;
    if (this.elt.autocomplete) {
        temp = this.elt.autocomplete.variables;
        if (typeof temp === "function") temp = temp();
        if (Array.isArray(temp)) {
            temp = temp.filter(x => typeof x === 'string');
            variables = variables.concat(temp);
        }

        temp = this.elt.autocomplete.functions;
        if (typeof temp === "function") temp = temp();
        if (Array.isArray(temp)) {
            temp = temp.filter(x => typeof x === 'string');
            functions = functions.concat(temp);
        }

        if (this.elt.sampleJS && (typeof this.elt.sampleJS.getFunctions === "function")) {
            temp = this.elt.sampleJS.getFunctions();
            if (Array.isArray(temp)) {
                temp = temp.filter(x => typeof x === 'string');
                functions = functions.concat(temp);
            }
        }
    }

    variables = (0,DataStructure_Array.arrayUnique)(variables);
    functions = (0,DataStructure_Array.arrayUnique)(functions);
    this.rawSuggestionCache.value = {
        variables: variables,
        functions: functions
    }
    this.rawSuggestionCache.time = now;
    return this.rawSuggestionCache.value;
};

EIAutoCompleteController.prototype.hasSuggestions = function () {
    var rawSuggestions = this.getRawSuggestion();
    return rawSuggestions.variables.length > 0 || rawSuggestions.functions.length > 0;
};

/**
 *
 * @param {string} text
 * @param {string} prefix
 */
EIAutoCompleteController.prototype.getSuggestionList = function (text, prefix) {
    var res = [];
    prefix = prefix || '';
    text = text || '';
    text = text.toLowerCase();
    var rawSuggestion = this.getRawSuggestion();
    var variables = rawSuggestion.variables;
    var functions = rawSuggestion.functions;

    var i;
    var itemText, score;
    for (i = 0; i < variables.length; ++i) {
        itemText = variables[i];
        score = (0,stringMatching.phraseMatch)(itemText.toLowerCase(), text);
        res.push({ text: itemText, score: score, type: 'variable' });
    }
    for (i = 0; i < functions.length; ++i) {
        itemText = functions[i];
        score = (0,stringMatching.phraseMatch)(itemText.toLowerCase(), text);
        res.push({ text: itemText, score: score, type: 'function' });
    }
    res.sort(function (a, b) {
        if (a.score === b.score) {
            return a.text > b.text ? 1 : -1;
        }
        return b.score - a.score;
    });
    if (text)
        res = res.filter(x => x.score > 0);
    return res;
};

EIAutoCompleteController.prototype.computeScore = function (queryWords, itemWords) {
    if (queryWords.length === 0) return 1;
    queryWords = queryWords.map(x => x.toLowerCase());
    itemWords = itemWords.map(x => x.toLowerCase());
    var score = 0;
    var wordScore = 1 / queryWords.length;
    var i, j;
    for (i = 0; i < queryWords.length && i < itemWords.length; ++i) {
        if (queryWords[i] === itemWords[i]) {
            score += wordScore;
        }
        else {
            score += wordScore * (0,stringMatching.wordLike)(queryWords[i], itemWords[i]);
        }
    }

    var qDict = queryWords.reduce((ac, cr) => {
        ac[cr] = true;
        return ac;
    }, {});
    var iDict = itemWords.reduce((ac, cr) => {
        ac[cr] = true;
        return ac;
    }, {});

    var bestMatch, bestWord, curWordScore;
    queryWords = Object.keys(qDict);
    itemWords = Object.keys(iDict);
    for (i = 0; i < queryWords.length; ++i) {
        bestMatch = 0;
        bestWord = '';
        for (j = 0; j < itemWords.length; ++j) {
            if (queryWords[i] === itemWords[j]) {
                bestMatch = wordScore;
                bestWord = itemWords[j];
                break;
            }
            else {
                curWordScore = wordScore * (0,stringMatching.wordLike)(queryWords[i], itemWords[j]);
                if (curWordScore > bestMatch) {
                    bestMatch = curWordScore;
                    bestWord = itemWords[j];
                }
            }
        }

        if (bestWord) {
            iDict[bestWord] = false;
            score += bestMatch;
        }
    }

    return score;
};

EIAutoCompleteController.prototype.getSuggestionTree = function (query) {
    var splitWords = (text) => text.split(/[^a-zA-Z0-9_$]+/).filter(x => x.length > 0);
    var queryWords = query ? splitWords(query.prefix + ' ' + query.value) : [];
    var rawSuggestion = this.getRawSuggestion();
    var variables = rawSuggestion.variables;
    var functions = rawSuggestion.functions;

    var items = [];
    var item;
    var i;
    for (i = 0; i < variables.length; ++i) {
        items.push({ text: variables[i], type: 'variable', words: splitWords(variables[i]) });
    }

    for (i = 0; i < functions.length; ++i) {
        items.push({ text: functions[i], type: 'function', words: splitWords(functions[i]) });
    }
    var min = Infinity, max = -Infinity;
    for (i = 0; i < items.length; ++i) {
        item = items[i];
        item.score = this.computeScore(queryWords, item.words);
        if (item.score < min) min = item.score;
        if (item.score > max) max = item.score;
    }

    var idx;
    if (query) {
        for (i = 0; i < items.length; ++i) {
            item = items[i];
            idx = item.text.toLowerCase().indexOf(query.value.toLowerCase());
            if (idx >= 0) item.score = max - (idx / 1000);
        }
    }
    items.sort((a, b) => b.score - a.score);

    var mid = (max + min) / 2;
    items = items.filter(x => x.score >= mid);

    var trees = [];
    var nodeDict = {
        "*": { text: "", children: trees }
    };
    items.forEach(item => {
        var words = item.words;
        var k;
        var key = '';
        var nd;
        var parent = nodeDict['*'];
        for (k = 0; k < words.length; ++k) {
            if (k > 0) key += '->';
            key += words[k];
            nd = nodeDict[key];
            if (!nd) {
                nd = { text: words[k], children: [], key: key, score: 0 };
                nodeDict[key] = nd;
                parent.children.push(nd);
            }

            parent = nd;
        }
        parent.item = item;
        parent.score = item.score;
    });
    return trees;
};


EIAutoCompleteController.prototype.applySuggestion = function (suggestion) {
    var engine = this.elt.engine;
    var query = this.query;
    var key = suggestion.key;
    var words = key.split('->');
    var startToken = query && query.prefixStartElt;
    var endToken = query && query.tokenElt;
    startToken = startToken || endToken;
    var range;

    var rangeStartCtn, rangeStartOffset, rangeEndCtn, rangeEndOffset;
    var i, tokenElt;

    var oldValue, newValue;
    var selected;


    if (startToken && endToken && engine.isWordToken(startToken)
        && (engine.isWordToken(endToken) || engine.stringOf(endToken) === '->')) {
        for (i = 0; i < words.length; ++i) {
            if (i > 0) {
                tokenElt = engine.makeTokenElt({ type: 'symbol', content: '->' });
                this.elt.$content.insertBefore(tokenElt, startToken);
            }
            tokenElt = engine.makeTokenElt({ type: 'word', content: words[i] });
            this.elt.$content.insertBefore(tokenElt, startToken);
            if (i + 1 === words.length) {
                rangeStartCtn = this.elt.$content;
                rangeStartOffset = engine.childIndexOf(tokenElt) + 1;
                rangeEndCtn = rangeStartCtn;
                rangeEndOffset = rangeStartOffset;
            }
        }
        while (startToken !== endToken) {
            tokenElt = startToken.nextSibling;
            startToken.remove();
            startToken = tokenElt;
        }
        endToken.remove();
        range = document.createRange();
        range.setStart(rangeStartCtn, rangeStartOffset);
        range.setEnd(rangeEndCtn, rangeEndOffset);
        engine.setRange(range);
    }
    else {
        oldValue = this.elt.value;
        selected = engine.getSelectPosition();
        newValue = oldValue.substring(0, selected.start) + key + oldValue.substring(selected.end);
        this.elt.engine.value = newValue;
        this.elt.engine.setSelectedPosition(selected.start + key.length);
    }
    engine.updateTokenExType();
};

EIAutoCompleteController.prototype.isSelecting = function () {
    return this.isOpen && this.$suggestionList && this.$suggestionList.$selectedNode && true;
};

EIAutoCompleteController.prototype.applySelectingSuggestion = function () {
    if (this.isSelecting()) {
        this.applySuggestion(this.$suggestionList.$selectedNode.data);
        //todo
        // this.applySuggestion(this.$item[this.selectedIdx].getAttribute('data-suggestion'));
        this.closeDropdown();
    }
};

EIAutoCompleteController.prototype.closeDropdownIfNeed = function () {
    setTimeout(() => {
        var text = this.getCurrentText();
        this.$tokenTarget = text && text.tokenElt;
        if (this.isOpen) {
            if (!this.$tokenTarget || this.$tokenTarget.getAttribute('data-type') !== 'word') {
                this.closeDropdown();
            }
        }
    }, 5);
};

/**
 *
 * @param {"down"|"up"} direction
 * @returns {boolean}
 */
EIAutoCompleteController.prototype.moveSelectingSuggestion = function (direction) {
    if (direction !== 'down' && direction !== 'up') return false;
    if (!this.hasSuggestions()) return false;
    if (this.isSelecting()) {
        if (direction === 'down') {
            return this.$suggestionList.moveToNextSuggestion();
        }
        else {
            return this.$suggestionList.moveToPrevSuggestion();
        }
    }
};


EIAutoCompleteController.prototype.ev_positionChange = function (event) {
    if (!this.elt.isDescendantOf(document.body)) {
        this.elt.stopTrackPosition();
        return;
    }
    //todo
};


EIAutoCompleteController.prototype.ev_clickOut = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(this.$suggestionList, event)) return;
    this.closeDropdown();
};


/**
 *
 * @param {ExpressionInput} elt
 * @constructor
 */
function EICommandTool(elt) {
    this.elt = elt;
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }
    this.isOpen = false;
    this.$ctn = (0,ACore._)({
        tag: Follower/* default */.Z,
        class: 'as-ei-command-tool',
        props: {
            anchor: [6, 1]
        },
        child: [
            // {
            //     tag: 'button',
            //     class: 'as-transparent-button',
            //     child: 'span.mdi.mdi-function-variant',
            //     attr: {
            //         title: 'Insert [Ctrl + I]'
            //     },
            // },
            {
                tag: 'button',
                class: 'as-transparent-button',
                child: 'span.mdi.mdi-magnify',
                attr: {
                    title: 'Hint [Ctrl + Space]'
                },
                on: {
                    click: () => {
                        this.elt.autoCompleteCtrl.openDropdown();
                        this.elt.engine.setSelectedPosition(this.elt.engine.lastSelectedPosition);
                    }
                }
            }
        ]
    });
    this.elt.$content.on('focus', this.ev_focus);
}

EICommandTool.prototype.open = function () {
    if (this.isOpen) return;
    this.elt.emit('focus', { type: 'focus', originalEvent: event, target: this.elt }, this.elt);
    if (this.elt.autoCompleteCtrl.getSuggestionList().length === 0) return;
    this.isOpen = true;
    this.$ctn.addTo(this.elt);
    this.$ctn.followTarget = this.elt;
    var zIndex = (0,utils.findMaxZIndex)(this.elt) + 1;
    this.$ctn.addStyle('z-index', zIndex);
    document.addEventListener('click', this.ev_clickOut);
};

EICommandTool.prototype.close = function () {
    if (!this.isOpen) return;
    this.isOpen = false;
    this.elt.emit('blur', { type: 'blur', originalEvent: event, target: this.elt }, this.elt);
    document.removeEventListener('click', this.ev_clickOut);
    this.$ctn.selfRemove();
};


EICommandTool.prototype.ev_focus = function (event) {
    this.open();
};

EICommandTool.prototype.ev_clickOut = function (ev) {
    if ((0,EventEmitter/* hitElement */.EY)(this.elt, ev)) return;
    this.close();

};


EICommandTool.prototype.revokeResource = function () {
    this.elt.$content.on('focus', this.ev_focus);
    this.close();
};

/**
 * @extends {AElement}
 * @constructor
 */
function EISuggestionList() {
    /**
     *
     * @type {EISuggestionNode}
     */
    this.$selectedNode = null;
    this._data = [];
    this.$children = [];
}

EISuggestionList.prototype.reset = function () {
    //todo: select first suggestion
}

EISuggestionList.prototype.moveToNextSuggestion = function () {
    if (this.$selectedNode) {
        return this.selectElt(this.$selectedNode.nextSibling || this.childNodes[0]);
    }
    else {
        return this.selectElt(this.$children[0]);
    }
};


EISuggestionList.prototype.moveToPrevSuggestion = function () {
    if (this.$selectedNode) {
        return this.selectElt(this.$selectedNode.previousSibling || this.lastChild);
    }
    else {
        return this.selectElt(this.lastChild);
    }
};


EISuggestionList.render = function () {
    return (0,ACore._)({
        extendEvent: ['select'],
        class: ['am-select-tree-leaf-box-list', 'as-bscroller', 'as-dropdown-box-common-style', 'as-ei-suggestion-list'],
    });
};

EISuggestionList.prototype.selectElt = function (elt) {
    elt = elt || null;
    if (elt === this.$selectedNode) return false;
    if (this.$selectedNode) {
        this.$selectedNode.removeClass('as-selected');
    }
    this.$selectedNode = elt;
    if (elt) {
        elt.addClass('as-selected');
    }
    if (this.isDescendantOf(document.body)) {
        (0,utils.vScrollIntoView)(elt);
    }
    return true;
}

EISuggestionList.prototype.selectMaxScoreItem = function () {
    var maxPath = [];
    var maxScore = 0;
    var visit = (nd, path) => {
        if (nd.data.score > maxScore) {
            maxScore = nd.data.score;
            maxPath = path.concat([nd]);
        }
        path.push(nd);
        nd.$children.forEach(child => {
            visit(child, path);
        });

        path.pop();
    }

    this.$children.forEach((node) => {
        visit(node, []);
    });
    maxPath.forEach((node) => {
        node.open()
    });
    if (maxPath.length > 0) {
        this.selectElt(maxPath[maxPath.length - 1]);
    }
};

EISuggestionList.property = {};

EISuggestionList.property.data = {
    set: function (data) {
        data = data || [];
        this._data = data;
        this.clearChild();
        this.$children = data.map((it) => {
            return (0,ACore._)({
                tag: EISuggestionNode,
                props: {
                    data: it
                }
            })
        });

        var viewElements = [];
        this.$children.forEach(function (child) {
            child.getViewElements(viewElements);
        });

        this.addChild(viewElements);
    },
    get: function () {
        return this._data;
    }
};

EISuggestionList.property.selectedSuggestions = {
    get: function () {
        return this.$selectedNode ? this.$selectedNode.data : null;
    }
};


/**
 * @typedef {Object} EISuggestionNodeData
 * @property {string} text
 * @property {string} value
 * @property {string} [desc]
 * @property {string} type
 * @property {boolean} [noSelect]
 * @property {EISuggestionNodeData[]} [children]
 */

/**
 * @extends {AElement}
 * @constructor
 */
function EISuggestionNode() {
    this.$text = (0,ACore.$)('.as-eisli-text', this);
    this.$desc = (0,ACore.$)('.as-eisli-desc', this);
    this.$iconCtn = (0,ACore.$)('.as-eisli-icon-ctn', this);
    this._level = 0;

    this._data = { text: '', desc: '' };
    this.on('click', (event) => {
        this.parentElement.emit('select', {
            type: 'select',
            originalEvent: event,
            target: this,
            data: this.data
        }, this);
    });

    /**
     *
     * @type {EISuggestionNode[]}
     */
    this.$children = [];
    /**
     * @type {"none"|"open"|"close"}
     * @name status
     * @memberOf EISuggestionNode#
     */

    /**
     * @type {EISuggestionNodeData}
     * @name data
     * @memberOf EISuggestionNode#
     */
    /**
     * @type {number}
     * @name level
     * @memberOf EISuggestionNode#
     */
}

EISuggestionNode.render = function () {
    return (0,ACore._)({
        class: ['as-ei-suggestion-list-item'],
        child: [
            {
                class: 'as-eisli-toggler',
                child: 'toggler-ico'
            },
            {
                class: 'as-eisli-icon-ctn'
            },
            {
                class: 'as-eisli-text',
                child: { text: '' }
            },
            {
                class: 'as-eisli-desc',
                child: { text: '' }
            }
        ]
    });
}

EISuggestionNode.prototype.getViewElements = function (ac) {
    ac = ac || [];
    ac.push(this);
    if (this.status === 'open') {
        this.$children.forEach(function (child) {
            child.getViewElements(ac);
        });
    }

    return ac;
};


EISuggestionNode.prototype.close = function () {
    if (!this.hasClass(' as-status-open')) return;
    var viewElements = this.getViewElements();
    this.addClass('as-status-close').removeClass('as-status-open');
    viewElements.shift();
    for (var i = 0; i < viewElements.length; ++i) {
        viewElements[i].remove();
    }
};

EISuggestionNode.prototype.open = function () {
    if (!this.hasClass(' as-status-close')) return;
    this.addClass('as-status-open').removeClass('as-status-close');
    var nextSibling = this.nextSibling;
    var viewElements = this.getViewElements();
    for (var i = 0; i < viewElements.length; ++i) {
        this.insertBefore(viewElements[i], nextSibling);
    }
};


EISuggestionNode.property = {};

EISuggestionNode.property.data = {
    /**
     * @this {EISuggestionNode}
     * @param {EISuggestionNodeData} data
     */
    set: function (data) {
        this._data = data || {};
        this.$text.firstChild.data = data.text || '';
        this.$desc.firstChild.data = data.desc || '';
        if (data.noSelect) {
            this.addClass('as-no-select');
        }

        this.$children = (data.children || []).map((childData) => {
            return (0,ACore._)({
                tag: EISuggestionNode,
                props: {
                    data: childData,
                    level: this.level + 1
                }
            });
        });
        this.$iconCtn.clearChild();

        if (data.item) {
            switch (data.item.type) {
                case 'variable':
                    this.$iconCtn.addChild((0,ACore._)('span.mdi.mdi-variable'));
                    if (data.children && data.children.length > 0) {
                        this.status = 'open';
                    }
                    break;
                case 'function':
                    this.$iconCtn.addChild((0,ACore._)('span.mdi.mdi-function'));
                    break;
            }
        }
        else {
            this.status = 'open';
            this.$iconCtn.addChild((0,ACore._)('span.mdi.mdi-code-json'));
        }
    },
    get: function () {
        return this._data;
    }
};


EISuggestionNode.property.level = {
    set: function (value) {
        this.addStyle('--level', value + '');
        this._level = value;
        this.$children.forEach((child) => {
            child.level = value + 1;
        });
    },
    get: function () {
        return this._level;
    }
}

EISuggestionNode.property.status = {
    set: function (value) {
        if (value === 'open') {
            this.addClass('as-status-open').removeClass('as-status-close');
        }
        else if (value === 'close') {
            this.addClass('as-status-close').removeClass('as-status-open');
        }
    },
    get: function () {
        if (this.hasClass('as-status-open')) return 'open';
        if (this.hasClass('as-status-close')) return 'close';
        return 'none';
    }
}


/*********************************
 * EXPRESSION
 */


var rules = [];


var operatorOrder = {
    'NOT': 4,
    '!': 4,
    '*': 5,
    '/': 5,
    'MOD': 5,
    '%': 5,
    '+': 6,
    '-': 6,
    '<': 9,
    '>': 9,
    '<=': 9,
    '>=': 9,
    '==': 9,
    '=': 9,
    '===': 9,
    '!=': 9,
    'AND': 14,
    '&&': 14,
    'OR': 15,
    '||': 15,
    'XOR': 15,
}


rules.push({
    target: 'null',
    elements: ['_null'],
    toAST: function (parsedNode) {
        return {
            type: 'NullLiteral',
        }
    }
});

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 (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    },
    toASTChain: function (parsedNode) {
        return [(0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode)];
    }
});


rules.push({
    target: 'args_list',
    elements: ['args_list', '_,', 'exp'],
    longestOnly: true,
    ident: 'args_list_rec',
    toASTChain: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToASTChain */.xI)(parsedNode.children[0]).concat((0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2]));
    }
});


rules.push({
    target: 'function_callee',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'function_callee',
    elements: ['mem_exp'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(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: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0])
        }
    }
});


rules.push({
    target: 'function_call',
    elements: ['function_callee', '_(', '_)'],
    toAST: function (parsedNode) {
        return {
            type: 'CallExpression',
            arguments: [],
            callee: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0])
        };
    }
});


rules.push({
    target: 'new_expression',
    elements: ['_new', 'function_call'],
    toAST: function (parsedNode) {
        var callAst = (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[1])
        return {
            type: 'NewExpression',
            arguments: callAst.arguments,
            callee: callAst.callee
        }
    }
});


rules.push({
    target: 'exp',
    elements: ['new_expression'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['null'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'number',
    elements: ['.number'],
    toAST: function (parsedNode) {
        return {
            type: 'NumericLiteral',
            value: parseFloat(parsedNode.children[0].content)
        }
    }
});


rules.push({
    target: 'string',
    elements: ['.string'],
    toAST: function (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 (parsedNode) {
        return {
            type: 'BooleanLiteral',
            value: true
        };
    }
});


rules.push({
    target: 'boolean',
    elements: ['_false'],
    toAST: function (parsedNode) {
        return {
            type: 'BooleanLiteral',
            value: false
        };
    }
});

rules.push({
    target: 'exp',
    elements: ['number'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['string'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'exp',
    elements: ['boolean'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

['+', '-', '*', '/', '%', '&&', '||', 'XOR', "=", '==', '===', '!=', '<', '>', '>=', '<='].forEach(function (op) {
    rules.push({
        target: 'bin_op',
        elements: ['_' + op],
        toAST: function (parsedNode) {
            return {
                type: "BinaryOperator",
                content: op
            }
        }
    });
});

var x = Math.m

rules.push({
    target: 'exp',
    elements: ['exp', 'bin_op', 'exp'],
    // longestOnly: true,//* error when parse return (...)...
    ident: 'bin_op_rec',
    toASTChain: function (parseNode) {
        var res = [];
        if (parseNode.children[0].rule === this) {
            res = res.concat(this.toASTChain(parseNode.children[0]));
        }
        else {
            res.push((0,DPParseInstance/* parsedNodeToAST */.Hg)(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((0,DPParseInstance/* parsedNodeToAST */.Hg)(parseNode.children[2]));
        }
        return res;
    },
    toAST: function (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 (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'bracket_group',
    elements: ['_(', 'exp', '_)'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[1]);
    }
});

rules.push({
    target: 'exp',
    elements: ['bracket_group'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(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 (parsedNode) {
                return {
                    type: 'UnaryExpression',
                    argument: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[1]),
                    operator: {
                        type: 'UnaryOperator',
                        content: op
                    }
                }
            }
        });
    });
});

rules.push({
    target: 'exp',
    elements: ['unary_exp'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['ident', '_->', 'ident'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['ident', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['new_expression', '_->', 'ident'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['new_expression', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['mem_exp', '_->', 'ident'],
    longestOnly: true,
    ident: 'mem_exp_ident_rev',
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['mem_exp', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['bracket_group', '_->', 'ident'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['bracket_group', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            property: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'exp',
    elements: ['mem_exp'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});


/**********************************************************************************************************************/


rules.push({
    target: 'object_exp',
    elements: ['_{', '_}'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectExpression',
            properties: []
        }
    }
});

rules.push({
    target: 'object_exp',
    elements: ['_{', 'object_property_list', '_}'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectExpression',
            properties: (0,DPParseInstance/* parsedNodeToASTChain */.xI)(parsedNode.children[1])
        }
    }
});


rules.push({
    target: 'exp',
    elements: ['object_exp'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'object_property',
    elements: ['ident', '_:', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectProperty',
            key: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            value: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        };
    }
});

rules.push({
    target: 'object_property',
    elements: ['string', '_:', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectProperty',
            key: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]),
            value: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])
        };
    }
});


rules.push({
    target: 'object_property_list',
    elements: ['object_property'],
    toASTChain: function (parsedNode) {
        return [(0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0])];
    }
});

rules.push({
    target: 'object_property_list',
    elements: ['object_property_list', '_,', 'object_property'],
    longestOnly: true,
    ident: 'object_property_list_rec',
    toASTChain: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToASTChain */.xI)(parsedNode.children[0]).concat([(0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])]);
    }
});


/**********************************************************************************************************************/


rules.push({
    target: 'exp',
    elements: ['array_exp'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'array_exp',
    elements: ['_[', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "ArrayExpression",
            elements: []
        };
    }
});

rules.push({
    target: 'array_exp',
    elements: ['_[', 'array_item_list', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "ArrayExpression",
            elements: (0,DPParseInstance/* parsedNodeToASTChain */.xI)(parsedNode.children[1])
        };
    }
});

rules.push({
    target: 'array_item_list',
    elements: ['exp'],
    toASTChain: function (parsedNode) {
        return [(0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0])];
    }
});

rules.push({
    target: 'array_item_list',
    elements: ['array_item_list', '_,', 'exp'],
    longestOnly: true,
    ident: 'array_item_list_rec',
    toASTChain: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToASTChain */.xI)(parsedNode.children[0]).concat([(0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2])]);
    }
});


/**********************************************************************************************************************/


var elementRegexes = [
    ['string', /("(?:[^"\\\n]|\\.)*?")|('(?:[^'\\\n]|\\.)*?')/],
    ['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 EIGrammar = {
    elementRegexes: elementRegexes,
    operatorOrder: SCGrammar/* default.operatorOrder */.Z.operatorOrder,
    rules: rules
};

var EIParser = new DPParser/* default */.Z(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 (0,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;
        (0,Text.setCaretPosition)(this, caretPos);
    }
};

IdentTextInput.property = {};

IdentTextInput.property.lowerCaseOnly = {
    set: function (value) {
        if (value) {
            this.addClass('as-lower-case-only');
            this.value = this.value.toLowerCase();
        }
        else {
            this.removeClass('as-lower-case-only');
        }
    },
    get: function () {
        return this.addClass('as-lower-case-only');
    }
};


ACore/* default.install */.Z.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) {
    this.elt = elt;
    Object.keys(this.constructor.prototype).forEach(key => {
        if (key.startsWith('ev_')) this[key] = this[key].bind(this);
    });
    this.elt.on('keydown', this.ev_keydown);
}

ITITextController.prototype.keyboardRegex = /[a-zA-Z$_0-9]/;

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 (nonAccentVietnamese(key).match(this.keyboardRegex)) {
        //     selectedPositionStart = this.getSelectionStart();
        //     if (selectedPositionStart === 0 && key.match(/[0-9]/)) {
        //         event.preventDefault();
        //     }
        // }
        // else {
        //     event.preventDefault();
        // }
    }
};

// EXTERNAL MODULE: ./node_modules/absol/src/Code/safeThrow.js
var safeThrow = __webpack_require__(5650);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EfficientTable.js















var execAsync = (commands, whileFunc) => {
    return commands.reduce((ac, act) => {
        if (whileFunc && !whileFunc()) return;
        if (ac && ac.then) {
            if (typeof act === "function") {
                return ac.then(act);
            }
            else {
                return ac.then(() => act);
            }
        }
        if (typeof act === 'function')
            return act(ac);
        else return act;
    }, null);
}

var getMaxRowCount = () => {
    var screenSize = (0,Dom/* getScreenSize */.tE)();
    return Math.ceil(Math.max(2048, screenSize.height) / 40.0) * 3;
}

var waitAll = (variables, thenCb) => {
    var hasPromise = variables.findIndex(v => v && (typeof v.then === "function"));
    if (hasPromise >= 0) return Promise.all(variables).then(thenCb);
    else return thenCb(variables);
}

var 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.fixHeaderCtrl = new ETFixHeaderController(this);
    this._adapter = null;
    this.table = null;
    this.extendStyle = this.extendStyle || {};
    this.$attachhook = (0,ACore._)('attachhook').addTo(this);
    this.$attachhook.requestUpdateSize = this.layoutCtrl.requestUpdateSize.bind(this);
    this.colWidth = new ETColWidthDeclaration(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-' + (0,stringGenerate.randomIdent)(10);
    return (0,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 {
        AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
    }
    return this;
};

EfficientTable.prototype.getColWidth = function () {
    var table = this.table;
    if (!table) return null;
    if (arguments.length === 0) return this.colWidth.export();
    else return this.colWidth.getProperty(...arguments);
};

EfficientTable.prototype.setColWidth = function () {
    var table = this.table;
    if (!table) return null;
    if (arguments.length === 0) Object.assign(this.colWidth);
    else this.colWidth.setProperty(...arguments);
};


/**
 *
 * @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 () {
    this.fixHeaderCtrl.revokeResource();
    //todo: revoke all resource
};


EfficientTable.property = {};

EfficientTable.property.adapter = {
    set: function (value) {
        this.colWidth.revokeResource();
        this.fixHeaderCtrl.reset();
        this._adapter = new ETAdapter(this, value);
        this.table = new ETTable(this, this._adapter.data);
        this.addChild(this.table.elt);
        this._adapter.notifyDataSheetChange();
        this.colWidth = new ETColWidthDeclaration(this);
    },
    get: function () {
        return this._adapter;
    }
};

/* harmony default export */ const js_EfficientTable = (EfficientTable);

ACore/* default.install */.Z.install(EfficientTable);


// ETAdapter.prototype.

/**
 *
 * @param {EfficientTable} elt
 * @constructor
 */
function ETFixHeaderController(elt) {
    this.elt = elt;
    this.$cloneTable = null;
    this.$cloneHead = null;
}

ETFixHeaderController.prototype.updateSize = function () {

};

ETFixHeaderController.prototype.reset = function () {
    if (this.isWrapped) {

    }
};

ETFixHeaderController.prototype.revokeResource = function () {
    this.revokeResource = noop/* default */.Z;
    this.elt = null;

}


/**
 *
 * @param {EfficientTable} elt
 * @constructor
 */
function ETLayoutController(elt) {
    this.elt = elt;
    /***
     *
     * @type {SearchTextInput|null}
     */
    this.$searchInput = null;
    /***
     *
     * @type {AElement}
     */
    this.$table = (0,ACore.$)('.as-dynamic-table', elt);
    /***
     *
     * @type {AElement}
     */
    this.$thead = (0,ACore.$)('.as-dynamic-table>thead', this.$table);
    /***
     *
     * @type {AElement}
     */
    this.$tbody = (0,ACore.$)('.as-dynamic-table>tbody', this.$table);

    this.$filterInputs = [];

    this.$attachhook = (0,ACore._)('attachhook').addTo(elt);
    this.domSignal = new DomSignal/* default */.ZP((0,ACore._)('attachhook').addTo(elt));
    //controller
    this.$fixedYCtn = (0,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', () => {
        ResizeSystem/* default.add */.Z.add(this.$attachhook);
        this.onAttached();
        this.onAttached();
        // manager.add(this);
        setTimeout(() => {
            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) {
        ResizeSystem/* default.updateUp */.Z.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 + 1) + '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 () {
    if (!this.elt.table) return;
    if (this.elt.table.size.trueValue) return;
    var bound = this.elt.getBoundingClientRect();
    var outbound = (0,Dom/* traceOutBoundingClientRect */.DI)(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(() => {
        if (currentOffset !== body.rowOffset) return;
        this.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 - hs;//hs for border 1px
        this.elt.table.elt.addStyle('top', dy + 'px');
    });
}


ETLayoutController.prototype.ev_scroll = function () {
    this.viewByScroll();
    clearTimeout(this.stopScrollTO);
    this.stopScrollTO = setTimeout(() => {
        this.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 asyncSession = Math.random();
    this.asyncSession = asyncSession;
    var cmdArr = [
        () => this.getLength(),
        () => {
            var body = this.elt.table.body;
            var head = this.elt.table.head;
            body.clear();
            body.drawFrom(0);
            var makeSize = () => {
                body.waitLoaded(() => {
                    body.updateYOffset(true);
                    this.elt.layoutCtrl.requestUpdateSize();

                });
            }
            if (this.elt.isDescendantOf(document.body)) {
                makeSize();
            }
            else {
                this.elt.$attachhook.once('attached', makeSize);
            }
        }
    ];
    execAsync(cmdArr, () => this.asyncSession === asyncSession);
};

ETAdapter.prototype.notifyRowModifiedAt = function (idx) {
    this.sync = execAsync([
        this.sync,
        () => {
            this.elt.table.body.modifiedRowAt(idx);
            if (this.elt.isDescendantOf(document.body)) {
                this.elt.table.body.waitLoaded(() => {
                    this.elt.layoutCtrl.requestUpdateSize();
                });
            }
        }
    ]);
};

ETAdapter.prototype.notifyRowRemoveAt = function (idx) {
    this.sync = execAsync([
        this.sync,
        () => this.getLength(),
        () => {
            this.elt.table.body.removeRowAt(idx);
            if (this.elt.isDescendantOf(document.body)) {
                this.elt.table.body.waitLoaded(() => {
                    this.elt.layoutCtrl.requestUpdateSize();
                });
            }
        }
    ]);
};

ETAdapter.prototype.notifyAddRowAt = function (idx) {
    this.sync = execAsync([
        this.sync,
        () => this.getLength(),
        () => {
            this.elt.table.body.addRowAt(idx);
            if (this.elt.isDescendantOf(document.body)) {
                this.elt.table.body.waitLoaded(() => {
                    this.elt.layoutCtrl.viewSize();
                });
            }
        }
    ]);
};


ETAdapter.prototype.getLength = function () {
    return execAsync([() => {
        var body = this.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 = this.raw.data.body.getLength(this);

            } catch (e) {
                (0,safeThrow/* default */.Z)(e);
            }
        }
        else if (body.rows) length = body.rows.length;
        return length;
    },
        l => {
            this.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) {
            (0,safeThrow/* default */.Z)(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 (0,ACore._)(it);
            }));
        }
        else {
            elt.addChild((0,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 (0,ACore._)(it);
            }));
        }
        else {
            elt.addChild((0,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 = (0,ACore._)({
        tag: 'table',
        class: 'as-dynamic-table',
        child: [
            this.head.elt,
            this.body.elt
        ]
    });
    this.handleStyle();
    this.size = new Rectangle/* default */.Z(0, 0, 0, 0);
    this.size.trueValue = false;
}


ETTable.prototype.handleStyle = function () {
    var style = this.wrapper.extendStyle;
    var value;
    if (style.width) {
        value = (0,attribute.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) {
    this.table = table;
    this.data = data || {};
    if (!this.data.rows) this.data.rows = [];
    this.rows = this.data.rows.map(rowData => new ETHeadRow(this, rowData));
    this.elt = (0,ACore._)({
        tag: 'thead',
        class: 'as-dt-header',
        child: this.rows.map(it => it.elt)
    });
    this.size = new Rectangle/* default */.Z(0, 0, 0, 0);
}

ETHead.prototype.calcSize = function () {
    var bound = this.elt.getBoundingClientRect();
    this.size = Rectangle/* default.fromClientRect */.Z.fromClientRect(bound);
};

/**
 *
 * @param {ETHead} head
 * @param data
 * @constructor
 */
function ETHeadRow(head, data) {
    this.head = head;
    this.data = data || {};
    if (!this.data.cells) this.data.cells = [];
    this.cells = this.data.cells.map(cellData => new ETHeadCell(this, cellData))
    this.elt = (0,ACore._)({
        tag: 'tr',
        class: 'as-dt-header-row',
        child: this.cells.map(it => it.elt)
    });
}

// (ETHeadRow)


function ETHeadCell(row, data) {
    this.row = row;
    this.data = data || {};
    this.elt = (0,ACore._)({
        tag: 'th',
        class: 'as-dt-header-cell'
    });
    if (data.attr && (0,utils.isNaturalNumber)(data.attr.colspan)) {
        this.elt.attr('colspan', data.attr.colspan);
    }
    if (data.attr && (0,utils.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 = (0,ACore._)({
        tag: 'tbody',
        class: 'as-dt-body'
    });

    this.rowOffset = 0;
    this.rows = [];
    /**
     *
     * @type {Rectangle|{trueValue:boolean}}
     */
    this.size = new Rectangle/* default */.Z(0, 0, 0, 0);
    this.size.trueValue = false;

    this.needUpdateYOffset = false;
    this.sync = null;
}


ETBody.prototype.clear = function () {
    this.rowOffset = 0;
    var row;
    while (this.rows.length) {
        row = this.rows.shift();
        this.rowOffset++;
        row.elt.remove();
        row.revokeResource();
    }
    this.needUpdateYOffset = true;
};


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.max(0, 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((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 = Rectangle/* default.fromClientRect */.Z.fromClientRect(bound);
        this.size.trueValue = true;
    }
    else {
        this.size = Rectangle/* default.fromClientRect */.Z.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(row => row.data), cb);
};

function ETBodyRow(body, data) {
    this.elt = (0,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, data => {
        this.data = data;
        var adapter = body.table.wrapper.adapter;
        var length = adapter.getRowLength();
        this.cells = Array(length).fill(null).map((u, i) => new ETBodyCell(this, i));
        this.elt.addChild(this.cells.map(cell => cell.elt));
        this.$idx = (0,ACore.$)('.as-dt-row-index', this.elt) || null;
        if (this.$idx)
            this.$idx.attr('data-idx', this.idx + 1);
        if (data.on && (data.on.click)) {
            this.elt.on('click', (event) => {
                data.on.click.call(this.elt, event, this);
            });
        }
        if (adapter.data.body.rowTemplate.on && (typeof adapter.data.body.rowTemplate.on.click === "function")) {
            this.elt.on('click', (event) => {
                adapter.data.body.rowTemplate.on.click.call(this.elt, event, this);
            });
        }
    });
    this.size = new Rectangle/* default */.Z(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 = (0,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 = Rectangle/* default.fromClientRect */.Z.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/* default */.Z;
    (0,utils.revokeResource)(this.elt);
    delete this.elt;
    this.body = null;
    this.notifyRemove = noop/* default */.Z;
};


Object.defineProperty(ETBodyRow.prototype, 'adapter', {
    /**
     *
     * @returns {ETAdapter}
     */
    get: function () {
        return this.body && this.body.table.wrapper && this.body.table.wrapper.adapter;
    }
})

function ETBodyCell(row, idx) {
    this.elt = (0,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);

}


/**
 * @extends Attributes
 * @param {EfficientTable} elt
 * @constructor
 */
function ETColWidthDeclaration(elt) {
    AppPattern_Attributes.call(this, this);

    if (!elt.table) return;
    var temp = elt.table.head.rows.reduce((ac, row) => {
        var l = row.cells.reduce((ac1, cell) => {
            var colspan = cell.data.attr && (cell.data.attrs.colspan || cell.data.attrs.colSpan);
            colspan = parseInt(colspan + '', 10);
            if (!(0,utils.isNaturalNumber)(colspan) || !colspan) colspan = 1;
            var id = cell.data.id;
            if (id && (typeof id === "string")) {
                ac.id2idx[id] = ac1;
            }
            if (colspan === 1) {
                if (!ac.idx2cells[ac1]) ac.idx2cells[ac1] = [];
                ac.idx2cells[ac1].push(cell);
            }


            return ac1 + colspan;
        }, 0);

        ac.length = (Math.max(ac.length, l));
        return ac;
    }, { length: 0, id2idx: {}, idx2cells: {} });


    Array(temp.length).fill(0).forEach((u, i) => {
        this.defineProperty('' + i, {
            set: function (value, ...args) {
                var unit;
                if (args.length > 1) unit = args[0];
                var headWith;
                var originValue = this.getProperty('' + i);
                var pOValue = (0,attribute.parseMeasureValue)(originValue);
                if (!(0,utils.isRealNumber)(value) || value < 0) {
                    value = 'auto';
                }
                else if (unit === 'px') {
                    if (pOValue.unit === '%') {
                        headWith = elt.table.head.elt.getBoundingClientRect().width;
                        value = value / headWith * 100 + '%';
                    }
                    else {
                        value = value + 'px';
                    }
                }
                else if (unit === '%') {
                    headWith = elt.table.head.elt.getBoundingClientRect().width;
                    if (pOValue.unit === 'px') {
                        value = value / 188 * headWith;
                    }
                    else {
                        value = value + '%';
                    }
                }

                if (typeof value === "number") value = value + 'px';
                var cells = temp.idx2cells[i] || [];
                cells.forEach(cell => {
                    if (value === 'auto') {
                        if (cell.data.style) {
                            delete cell.data.style.width;
                            cell.elt.removeStyle('width');
                        }
                    }
                    else {
                        if (!cell.data.style) cell.data.style = {};
                        cell.data.style.width = value;
                        cell.elt.addStyle('width', value);
                    }

                });

            },
            get: function (...args) {
                var unit;
                if (args.length > 1) unit = args[0];
                var ref = args[args.length - 1];
                var value = ref.get();
                var cells = temp.idx2cells[i] || [];
                if (cells.length === 0) return 0;
                if (unit === 'px') {
                    value = cells[0].elt.getBoundingClientRect().width;
                }
                else if (unit === '%') {
                    value = cells[0].elt.getBoundingClientRect().width / elt.table.head.elt.getBoundingClientRect().width * 100;
                }
                else {
                    value = cells.reduce((ac, cell) => {
                        var pValue;
                        if (cell.data.style && cell.data.style.width) {
                            pValue = (0,attribute.parseMeasureValue)(cell.data.style.width);
                            if (!pValue || pValue.unit !== 'px') return ac;
                            return pValue.value;
                        }
                        return ac;
                    }, 'auto');
                }
                return value;
            }
        })
    });

    Object.keys(temp.id2idx).forEach(id => {
        var idx = temp.id2idx[id];
        this.defineProperty(id, {
            set: function (...args) {
                return this.setProperty(idx, ...args.slice(1));
            },
            get: function (...args) {
                return this.getProperty(idx, ...args.slice(1));
            }
        });
    });
}


OOP/* default.mixClass */.ZP.mixClass(ETColWidthDeclaration, AppPattern_Attributes);

Object.defineProperty(ETColWidthDeclaration.prototype, 'revokeResource', {
    value: function () {
        delete this.$node;
        delete this.revokeResource;
    },
    writable: true,
    enumerable: false,
    configurable: true
})



// EXTERNAL MODULE: ./node_modules/absol-acomp/css/compactdatagrid.css
var compactdatagrid = __webpack_require__(2407);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/assets/icon/table_header_add.tpl
/* harmony default export */ const table_header_add = ("<svg\n   viewBox=\"0 0 24 24\"\n   version=\"1.1\"\n   xmlns=\"http://www.w3.org/2000/svg\"\n   xmlns:svg=\"http://www.w3.org/2000/svg\"\n   class=\"as-toggle-header-ico\">\n  <path\n     class=\"as-icon-table\"\n     d=\"M 1 1 L 1 1.5 L 1 23 L 23 23 L 23 1 L 1 1 z M 2 2 L 22 2 L 22 10 L 2 10 L 2 2 z M 2 11 L 5 11 L 5 14 L 2 14 L 2 11 z M 6 11 L 9 11 L 9 14 L 6 14 L 6 11 z M 10 11 L 14 11 L 14 14 L 10 14 L 10 11 z M 15 11 L 18 11 L 18 14 L 15 14 L 15 11 z M 19 11 L 22 11 L 22 14 L 19 14 L 19 11 z M 2 15 L 5 15 L 5 18 L 2 18 L 2 15 z M 6 15 L 9 15 L 9 18 L 6 18 L 6 15 z M 10 15 L 14 15 L 14 18 L 10 18 L 10 15 z M 15 15 L 18 15 L 18 18 L 15 18 L 15 15 z M 19 15 L 22 15 L 22 18 L 19 18 L 19 15 z M 2 19 L 5 19 L 5 22 L 2 22 L 2 19 z M 6 19 L 9 19 L 9 22 L 6 22 L 6 19 z M 10 19 L 14 19 L 14 22 L 10 22 L 10 19 z M 15 19 L 18 19 L 18 22 L 15 22 L 15 19 z M 19 19 L 22 19 L 22 22 L 19 22 L 19 19 z \" />\n  <path\n     style=\"fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;\"\n     d=\"m 9,6 h 6\"\n      class=\"as-icon-minus\" />\n  <path\n     style=\"fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;\"\n     d=\"M 12,9 V 3\"\n     class=\"as-icon-add\" />\n</svg>\n");
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CompactDataGridEditor.js

















var EV_SELECTED_CELL_CHANGE = 'SELECTED_CELL_CHANGE'.toLowerCase();
var EV_CELL_DATA_CHANGE = 'change';
var EV_UNDO_APPLY = 'EV_UNDO_APPLY'.toLowerCase();

/**
 * loc: [row, col, rowHeight, colHeight]
 * @param {AElement} cell
 * @returns {number[]}
 */
var locOfCell = cell => (cell.getAttribute('data-loc') || 'Nan,NaN').split(',')
    .concat([cell.getAttribute('rowspan') || '1', cell.getAttribute('colspan') || '1'])
    .map(it => parseInt(it, 10));

var locOfCells = cells => {
    return cells.reduce((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 = (loc, ctn) => {
    var mlc = mergeLoc(loc, ctn);
    return locEqual(mlc, ctn);
};

var locEqual = (loc1, loc2) => {
    return loc1[0] === loc2[0] && loc1[1] === loc2[1]
        && loc1[2] === loc2[2] && loc1[3] === loc2[3];
}

var 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 = 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 = 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 = data => {
    if (typeof data === "string") {
        data = data.trim();
        if (data.length === 0) return null;
        return { name: data, title: data };
    }
    else if (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 = data => {
    if (typeof data === "string") {
        data = data.trim();
        if (data.length === 0) return null;
        return { name: data };
    }
    else if (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 = 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;
}

var varEltOfCell = cell => {
    return Array.prototype.filter.call(cell.childNodes, c => !!c.attr('data-default-title'));
}

var isChangeParent = (parentElt, elt, bf) => {
    if (parentElt !== elt.parentElement) return true;
    var children = varEltOfCell(parentElt);
    var idx;
    if (bf === 'end') {
        return children[children.length - 1] !== bf;
    }
    else {
        if (bf === elt) return false;
        idx = children.indexOf(bf);
        return children[idx - 1] !== elt;
    }
};

var hoverXOf = (cell, bf) => {
    var children = varEltOfCell(cell);
    var bound, cBound;
    if (children.length > 0) {
        bound = cell.getBoundingClientRect();
        if (bf === 'end') {
            cBound = children[children.length - 1].getBoundingClientRect();
            return cBound.right + 10 - bound.left;
        }
        else {
            cBound = bf.getBoundingClientRect();
            return cBound.left - bound.left;
        }
    }
    else {
        return 20;
    }
}

var defaultTextAlignOfElt = elt => {
    if (elt.tagName === 'TD') return 'left';
    return 'center';
};

var textAlignOfElt = elt => {
    return elt.style.textAlign || defaultTextAlignOfElt(elt);
}

var defaultFontWeightOfElt = elt => {
    if (elt.tagName === 'TD') return 'normal';
    return 'bold';
};


var fontWeightOfElt = elt => {
    return elt.style.fontWeight || defaultFontWeightOfElt(elt);
};


var fontStyleOfElt = elt => {
    return elt.style.fontStyle || 'normal';
};


/**
 * @extends AElement
 * @constructor
 */
function CompactDataGridEditor() {
    /**
     *
     * @type {CDContext}
     */
    var context = {
        editor: this, table: null, formatTool: null, varMng: null, selectCtrl: null,
        lcEmitter: new EventEmitter/* default */.ZP()
    }
    context.table = new CDTable(context);
    this.$body = (0,ACore.$)('.as-compact-data-grid-editor-body', this);

    this.$body.addChild(context.table.$table);
    context.undoMng = new CDUndoManager(context);
    context.selectCtrl = new CDSelectController(context);
    context.formatTool = new CDGFormatTool(context);
    context.varMng = new CDGVariableManager(context);

    // OOP.drillProperty(this, context.table, 'header', 'data');
    // OOP.drillProperty(this, context.table, 'data', 'data');
    OOP/* default.drillProperty */.ZP.drillProperty(this, context.varMng, 'variables');
    var dataTO = -1;
    Object.defineProperties(this, {
        header: {
            set: function (value) {
                if (value) {
                    context.table.header.data = value;
                    context.table.header.hidden = false;
                }
                else {
                    context.table.header.hidden = true;
                }
                clearTimeout(dataTO);
                dataTO = setTimeout(() => {
                    context.table.autoFixRowsWidth();
                    context.formatTool.updateAvailableCommands();
                    context.undoMng.reset().commit();
                });

            },
            get: function () {
                clearTimeout(dataTO);
                context.table.autoFixRowsWidth();
                if (context.table.header.hidden) return null;
                return context.table.header.data;
            },
            configurable: true
        },
        data: {
            set: function (value) {
                context.varMng.rejectAllVariables();
                context.table.body.data = value;
                clearTimeout(dataTO);
                dataTO = setTimeout(() => {
                    context.table.autoFixRowsWidth();
                    context.formatTool.updateAvailableCommands();
                    context.undoMng.reset().commit();
                });
            },
            get: function () {
                clearTimeout(dataTO);
                context.table.autoFixRowsWidth();
                return context.table.body.data;
            },
            configurable: true
        }
    });

    var count = 0;
    context.lcEmitter.on(EV_CELL_DATA_CHANGE, () => {
        context.undoMng.commit();
        context.formatTool.updateAvailableCommands();
        if (window.ABSOL_DEBUG) Snackbar.show('change ' + (++count));
        this.emit('change', { type: 'change', target: this }, this);
    });

    context.lcEmitter.on(EV_UNDO_APPLY, () => {
        context.formatTool.updateAvailableCommands();
        if (window.ABSOL_DEBUG) Snackbar.show('change ' + (++count));
        this.emit('change', { type: 'change', target: this }, this);
    });

    /**
     * @name data
     * @memberof CompactDataGridEditor#
     */

    /**
     * @name header
     * @memberof CompactDataGridEditor#
     */
}

/**
 * @typedef CDContext
 * @property {CompactDataGridEditor} editor
 * @property {CDTable} table
 * @property {CDGVariableManager} varMng
 * @property {CDUndoManager} undoMng
 * @property {CDGFormatTool} formatTool
 * @property {CDSelectController} selectCtrl
 * @property {EventEmitter} lcEmitter
 *
 */

CompactDataGridEditor.tag = 'CompactDataGridEditor'.toLowerCase();
CompactDataGridEditor.render = function () {
    return (0,ACore._)({
        attr: { tabindex: 1 },
        extendEvent: ['change'],
        class: 'as-compact-data-grid-editor',
        child: ['.as-compact-data-grid-editor-body']
    });
};

CompactDataGridEditor.prototype.revokeResource = function () {
    var data = this.data;
    var header = this.header;
    Object.defineProperties(this, {
        data: {
            value: data,
            configurable: true,
            writable: true
        },
        header: {
            value: header,
            configurable: true,
            writable: true
        }
    });
    (0,utils.revokeResource)(this.grid);
    (0,utils.revokeResource)(this.varMng);
    this.grid = undefined;
    this.varMng = undefined;
    while (this.firstChild) {
        (0,utils.revokeResource)(this.firstChild);
        this.firstChild.remove();
    }
};


CompactDataGridEditor.prototype.init = function (props) {
    props = Object.assign({}, props);
    this.variables = props.variables;
    this.header = props.header;
    this.data = props.data;
    delete props.variables;
    delete props.header;
    delete props.data;
    Object.assign(this, props);
};


ACore/* default.install */.Z.install(CompactDataGridEditor);
/* harmony default export */ const js_CompactDataGridEditor = (CompactDataGridEditor);


/**
 *
 * @param  {CDContext} context
 * @constructor
 */
function CDGrid(context) {
    this.context = context;
    this.$grid = (0,ACore._)(this.gridCt);

    // /**
    //  * @type {CompactDataGridEditor}
    //  */
    // this.elt = this.context.elt;
    // this.$body = $('tbody', this.elt);
}


CDGrid.prototype.gridCt = 'tbody';
CDGrid.prototype.rowCt = 'tr';
CDGrid.prototype.cellCt = 'td';

CDGrid.prototype.makeCell = function (data) {
    var attr = {};
    if ((0,utils.isNaturalNumber)(data.rowSpan) && data.rowSpan > 1) {
        attr.rowspan = data.rowSpan;
    }
    else if ((0,utils.isNaturalNumber)(data.rowspan) && data.rowspan > 1) {
        attr.rowspan = data.rowspan;
    }
    if ((0,utils.isNaturalNumber)(data.colSpan) && data.colSpan > 1) {
        attr.colspan = data.colSpan;
    }
    else if ((0,utils.isNaturalNumber)(data.colspan) && data.colspan > 1) {
        attr.colspan = data.colspan;
    }
    return (0,ACore._)({
        tag: this.cellCt,
        attr: attr,
        class: 'as-ca-cell',
        style: data.style || {}
        // child:
    });
};

CDGrid.prototype.hasCell = function (cell) {
    return cell.isDescendantOf(this.$grid);
};

CDGrid.prototype.styleOfCell = function (cellElt) {
    var res = {};
    ['textAlign', 'color', 'backgroundColor', 'fontWeight', 'whiteSpace'].forEach(key => {
        if (cellElt.style[key]) res[key] = cellElt.style[key];
    });
    if (res.textAlign === defaultTextAlignOfElt(cellElt)) delete res.textAlign;
    if (res.fontWeight === defaultFontWeightOfElt(cellElt)) delete res.fontWeight;
    if (res.whiteSpace !== 'nowrap') delete res.whiteSpace;
    for (var k in res) return res;
    return null;
};


CDGrid.prototype.dataOfCell = function (cellElt) {
    var cellData = {};
    var loc = locOfCell(cellElt);
    if (loc[2] > 1) cellData.rowSpan = loc[2];
    if (loc[3] > 1) cellData.colSpan = loc[3];
    var style = this.styleOfCell(cellElt);
    if (style) cellData.style = style;
    return cellData;
};

CDGrid.prototype.makeRow = function (data) {
    var cells = data.cells || [];
    return (0,ACore._)({
        tag: this.rowCt,
        class: 'as-ca-row',
        child: cells.map(it => this.makeCell(it))
    });
};


CDGrid.prototype.updateCellLoc = function () {
    var row, cell;
    var gridElt = this.$grid;
    var height = Array(100).fill(0);
    var jj, loc;
    for (var i = 0; i < gridElt.childNodes.length; ++i) {
        row = gridElt.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);
    gridElt.attr('data-width', nCol);
    return nCol;
};


CDGrid.prototype.calcWidth = function () {
    var row, cell;
    var gridElt = this.$grid;
    var height = Array(100).fill(0);
    var jj, loc;
    for (var i = 0; i < gridElt.childNodes.length; ++i) {
        row = gridElt.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++;
            for (var k = 0; k < loc[3]; ++k) {
                height[jj + k] = i + loc[2];
            }
            jj += loc[3];
        }
    }
    var nCol = height.indexOf(0);
    gridElt.attr('data-width', nCol);
    return nCol;
};


CDGrid.prototype.getSize = function () {
    return {
        width: parseInt(this.$grid.attr('data-width'), 10),
        height: this.$grid.childNodes.length
    }
};

CDGrid.prototype.fixRowLength = function (rowLength) {
    rowLength = rowLength || 1;
    var row, cell;
    var gridElt = this.$grid;
    var height = Array(100).fill(0);
    var jj, colspan, rowspan;
    for (var i = 0; i < gridElt.childNodes.length; ++i) {
        row = gridElt.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;
        }
    }
};


CDGrid.prototype.getCellsFromLoc = function (loc) {
    var row, cell, cellLoc;
    var res = [];
    var gridElt = this.$grid;
    for (var i = 0; i < gridElt.childNodes.length; ++i) {
        row = gridElt.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 gridElt = this.$grid;

    var loc;
    if (gridElt.firstChild && gridElt.firstChild.lastChild)
        loc = locOfCell(gridElt.firstChild.lastChild);
    else loc = [0, 0, 1, 1];
    var rowLength = loc[1] + loc[3];

    for (var i = 0; i < gridElt.childNodes.length; ++i) {
        if (i === newRowIdx) {
            row = this.makeRow({ cell: [] });
            gridElt.addChildBefore(row, gridElt.childNodes[i]);
            jj = 0;
            while (jj < rowLength) {
                while (height[jj] > newRowIdx) {
                    jj++;
                }
                row.addChild(this.makeCell({}));
                height[jj] = i + 1;
                jj++;
            }
            ++i;
        }
        row = gridElt.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 === gridElt.childNodes.length) {
        row = this.makeRow({ cell: [] })
        gridElt.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 gridElt = this.$grid;
    var colspan, rowspan;
    for (var i = 0; i < gridElt.childNodes.length; ++i) {
        row = gridElt.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 (!(0,utils.isNaturalNumber)(rowHeight)) rowHeight = 1;
    rowHeight = rowHeight || 1;
    var body = this.$grid;
    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 (!(0,utils.isNaturalNumber)(colWidth)) colWidth = 1;
    colWidth = colWidth || 1;
    var gridElt = this.$grid;
    var row, cell;
    var loc;
    var rmLoc = [0, colIdx, 100, colWidth];
    var needSplitLocs = [];
    var needSplitCells = [];
    var childSplitCells = [];
    var i, j;
    for (i = 0; i < gridElt.childNodes.length; ++i) {
        row = gridElt.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(cell => 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((0,ACore.$$)('.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 gridElt = this.$grid;
    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 < gridElt.childNodes.length; ++i) {
        row = gridElt.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]) {
                if (height[jj] <= i) {
                    row.addChildBefore(this.makeCell({}), cell);
                    height[jj] = i + 1;
                    ++j;
                }
                ++jj;
            }
            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 (value) {
        this.$grid.clearChild();
        var rows = (value && value.rows) || [];
        if (rows.length === 0) rows.push({
            cells: [{}]
        });
        this.$grid.addChild(rows.map(it => this.makeRow(it)));
        var nCol = this.updateCellLoc();
        this.fixRowLength(nCol);
    },
    get: function () {
        var res = {};
        res.rows = Array.prototype.map.call(this.$grid.childNodes, (rowElt) => {
            var rowData = {};
            rowData.cells = Array.prototype.map.call(rowElt.childNodes, cellElt => {
                return this.dataOfCell(cellElt);
            });
            return rowData;
        })
        return res;
    },
    configurable: true
});

/**
 * @extends CDGrid
 * @param {CDContext} context
 * @param {CDTable} table
 * @constructor
 */
function CDTableBody(context, table) {
    CDGrid.call(this, context);
    this.table = table;
}

(0,OOP/* mixClass */.Jx)(CDTableBody, CDGrid);

CDTableBody.prototype.gridCt = 'tbody';


CDTableBody.prototype.makeCell = function (data) {
    var variables = data.variables || [];
    var attr = {};
    if ((0,utils.isNaturalNumber)(data.rowSpan) && data.rowSpan > 1) {
        attr.rowspan = data.rowSpan;
    }
    else if ((0,utils.isNaturalNumber)(data.rowspan) && data.rowspan > 1) {
        attr.rowspan = data.rowspan;
    }
    if ((0,utils.isNaturalNumber)(data.colSpan) && data.colSpan > 1) {
        attr.colspan = data.colSpan;
    }
    else if ((0,utils.isNaturalNumber)(data.colspan) && data.colspan > 1) {
        attr.colspan = data.colspan;
    }
    return (0,ACore._)({
        tag: 'td',
        attr: attr,
        class: 'as-ca-cell',
        style: data.style ||{},
        child: variables.map(it => {
            it = normalizeUsedVariable(it);
            var name = it.name;
            return this.context.varMng.pickVariable(name);
        })
    });
};

CDTableBody.prototype.dataOfCell = function (cellElt) {
    var cellData = CDGrid.prototype.dataOfCell.call(this, cellElt);
    var variables = (0,ACore.$$)('.as-cag-var', cellElt).map(varElt => variableDataOfElt(varElt)).filter(x => !!x);
    if (variables.length > 0) cellData.variables = variables;
    return cellData;
};

/**
 *
 * @param {CDContext} context
 * @constructor
 */
function CDTable(context) {
    /**
     *
     * @type {CDContext}
     */
    this.context = context;
    this.header = new CDTableHeader(context, this);
    this.body = new CDTableBody(context, this);
    this.$table = (0,ACore._)({
        tag: 'table',
        class: 'as-cdg-table',
        child: [
            this.header.$grid,
            this.body.$grid
        ]
    });
    this.header.hidden = true;//default
    this.header.data = { rows: [{ cells: [{}] }] }
}

CDTable.prototype.autoFixRowsWidth = function () {
    var hL = this.header.calcWidth();
    var bL = Math.max(1, this.body.calcWidth());
    if (hL < bL) {
        this.header.fixRowLength(bL);
    }
    else if (hL > bL) {
        this.body.fixRowLength(bL);
    }
};


/**
 * @extends CDGrid
 *  @param {CDContext} context
 * @param {CDTable} table
 * @constructor
 */
function CDTableHeader(context, table) {
    CDGrid.call(this, context);
    this.table = table;
}


(0,OOP/* mixClass */.Jx)(CDTableHeader, CDGrid);


CDTableHeader.prototype.gridCt = 'thead';
CDTableHeader.prototype.cellCt = 'th';

CDTableHeader.prototype.makeCell = function (data) {
    var res = CDGrid.prototype.makeCell.call(this, data);
    var beforeValue;
    var input = (0,ACore._)({
        tag: js_PreInput,
        attr: {
            contenteditable: 'true',
            spellcheck: 'false'
        },
        props: {
            value: (data.text || ' ') + ''
        },
        on: {
            focus: function () {
                beforeValue = input.value;
            },
            blur: () => {
                if (input.value !== beforeValue) {
                    this.context.lcEmitter.emit(EV_CELL_DATA_CHANGE);
                }
                beforeValue = undefined;
            }
        }
    });
    res.addChild(input);
    return res;
};

CDTableHeader.prototype.dataOfCell = function (cellElt) {
    var cellData = CDGrid.prototype.dataOfCell.call(this, cellElt);
    cellData.text = cellElt.firstChild.value;
    return cellData;
};


Object.defineProperty(CDTableHeader.prototype, 'hidden', {
    set: function (value) {
        if (value) {
            this.$grid.addClass('as-hidden');
        }
        else {
            this.$grid.removeClass('as-hidden');
        }
    },
    get: function () {
        return this.$grid.hasClass('as-hidden');
    },
    configurable: true
});


/**
 *
 * @param {CDContext} context
 * @constructor
 */
function CDSelectController(context) {
    this.context = context;
    this.editor = context.editor;
    this.lcEmitter = context.lcEmitter;
    Object.keys(this.constructor.prototype).filter(k => k.startsWith('ev_'))
        .forEach(key => this[key] = this[key].bind(this));

    this.selectedGrid = null;
    this.selectedCells = [];

    (0,ACore._)({
        tag: 'hanger',
        elt: this.context.table.$table,
        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.startingGrid.$grid;
    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 = Rectangle/* default.fromClientRect */.Z.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);
    if (this.mouseDownCell) {
        this.startingGrid = this.mouseDownCell.isDescendantOf(this.context.table.header.$grid) ? this.context.table.header : this.context.table.body;
    }
    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(cell => {
        cell.removeClass('as-hovering');
    });
    this.hoveringCells = this.startingGrid.getCellsFromLoc(selectedLoc);
    this.hoveringCells.forEach(cell => {
        cell.addClass('as-hovering');
    });
};


CDSelectController.prototype.ev_dragDeinit = function (event) {
    this.hoveringCells.forEach(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(cell => cell.removeClass('as-selected'));
    this.selectedCells = cells.slice();
    this.selectedCells.forEach(cell => cell.addClass('as-selected'));
    var focsVar = (0,ACore.$)('td.as-selected .as-cag-var.as-focus', this.editor);
    if (!focsVar) {
        focsVar = (0,ACore.$)('td.as-selected .as-cag-var', this.editor);
        this.context.varMng.focus(focsVar || null);

    }
    var sel, range;
    if (!focsVar) {
        focsVar = (0,ACore.$)('th.as-selected preinput', this.editor);
        if (focsVar) {
            sel = document.getSelection();
            if (sel.rangeCount) {
                range = sel.getRangeAt(0);
                if (range.startContainer.nodeType !== Node.TEXT_NODE || range.startContainer.parentElement !== focsVar) {
                    focsVar.focus();
                    focsVar.select(focsVar.value.length);
                }
            }
            else {
                focsVar.focus();
                focsVar.select(focsVar.value.length);
            }
        }
    }

    this.lcEmitter.emit(EV_SELECTED_CELL_CHANGE);
};


/**
 *
 * @param  context
 * @constructor
 */
function CDGVariableManager(context) {
    this.context = context;
    this.editor = context.editor;
    this.lcEmitter = context.lcEmitter;
    /**
     *
     * @type {CDGrid}
     */
    this.body = context.table.body;
    this.createView();
    this._variables = [];
    this.variableDict = {};

    this.pickedVariables = {};
    this.availableVariables = {};
    Object.keys(this.constructor.prototype).filter(k => k.startsWith('ev_'))
        .forEach(key => this[key] = this[key].bind(this));
    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.editor = undefined;
    this.grid = undefined;
};

CDGVariableManager.prototype.createView = function () {
    this.$varMng = (0,ACore._)({
        class: 'as-cag-var-mng',
        child: []
    });
    this.editor.addChildAfter(this.$varMng, this.context.formatTool.$tool);
};


/**
 *
 * @param {string} name
 * @returns {*}
 */
CDGVariableManager.prototype.makeVariable = function (name) {

    var info = this.variableDict[name] || {};

    var elt = (0,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: () => {
                this.focus(elt);
            }
        }
    });

    if (typeof info.title === "string") {
        elt.attr('data-title', info.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 if (!this.pickedVariables[name]) {
        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.rejectAllVariables = function () {
    Object.keys(this.pickedVariables).forEach(name => this.rejectVariable(name));
};

CDGVariableManager.prototype.variableElementOf = function (o) {
    var name = varNameOf(o);
    if (name === "string") return this.availableVariables[o] || this.pickedVariables[o];
    if ((0,Dom/* isDomNode */.mV)(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 = (0,ACore.$$)('.as-ca-cell', this.body.$grid);
    var best = 0;
    var cellRect;
    var bestCell;
    var square;
    var i;
    for (i = 0; i < cells.length; ++i) {
        cellRect = Rectangle/* default.fromClientRect */.Z.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 = (0,ACore.$$)('.as-cag-var', res.in);
        res.bf = 'end';
        for (i = varEltList.length - 1; i >= 0; --i) {
            varElt = varEltList[i];
            if (!varElt.attr('data-default-title')) continue;
            varBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(varElt.getBoundingClientRect());
            if (varBound.centerPoint().x > rect.centerPoint().x) {
                res.bf = varElt;
            }
            else break;
        }
        return res;
    }
    else {
        return null;
    }

};

/**
 *
 * @param {AElement=} elt
 */
CDGVariableManager.prototype.openEditVariableDialog = function (elt) {
    elt = elt || this.focusVariable;
    if (!elt) return;

    var 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);
            this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
        }
    }
    var finish = () => {
        flushData();
        cancel();
    }

    var cancel = () => {
        document.removeEventListener('click', clickOut);
        elt = null;
        follower.followTarget = null;
        follower.clearChild();
        follower.remove();
        ResizeSystem/* default.removeTrash */.Z.removeTrash();
        finish = undefined;
        cancel = undefined;
        clickOut = undefined;

    }

    var clickOut = event => {
        if ((0,EventEmitter/* hitElement */.EY)(follower, event)) return;
        cancel();

    };
    setTimeout(() => {
        document.addEventListener('click', clickOut);

    }, 100);


    var 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 = (0,ACore._)({
        tag: Follower/* default */.Z,
        class: ['as-dropdown-box-common-style', 'as-cdg-variable-edit-dialog'],
        style: {
            zIndex: (0,utils.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 = (0,ACore.$)('checkboxinput', follower);
    var titleInput = (0,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 Vec2/* default */.Z(eltBound.left, eltBound.top));
    this.draggingElt = varElt;
    this.dragOffset = offset;
    this.clonedElt = (0,ACore.$)(varElt.cloneNode(true)).addClass('as-clone-var').addStyle({
        position: 'fixed',
        zIndex: (0,utils.findMaxZIndex)(varElt) + 2,
        left: eltBound.left + 'px',
        top: eltBound.top + 'px'
    }).addTo(document.body);
    varElt.addStyle('opacity', 0.8);
    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 Rectangle/* default */.Z(event.currentPoint.x - 10, event.currentPoint.y - 10, 20, 20);
    this.newLocation = this.findVariableLocation(pointerRect);
    var newLocation = this.newLocation;
    if (newLocation) {
        if (newLocation.in !== this.hoverCell) {
            if (this.hoverCell)
                this.hoverCell.removeClass('as-drag-over');
            this.hoverCell = newLocation.in;
            this.hoverCell.addClass('as-drag-over');
        }
        if (isChangeParent(newLocation.in, this.draggingElt, newLocation.bf)) {
            this.hoverCell.addClass('as-bf');
            this.hoverCell.addStyle('--hover-x', hoverXOf(newLocation.in, newLocation.bf) + 'px');
        }
        else {
            this.hoverCell.removeClass('as-bf').removeStyle('--hover-x');
        }
    }
    else {
        if (this.hoverCell)
            this.hoverCell.removeClass('as-drag-over')
                .removeClass('as-bf').removeStyle('--hover-x');
    }
};


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) {
        if (isChangeParent(newLocation.in, this.draggingElt, newLocation.bf)) {
            this.draggingElt.selfRemove();
            if (newLocation.bf === 'end') {
                newLocation.in.addChild(this.draggingElt);
            }
            else {
                newLocation.in.addChildBefore(this.draggingElt, newLocation.bf);
            }
            this.pickVariable(name);
            this.context.selectCtrl.selectCells([this.newLocation.in]);
            this.context.varMng.focus(this.draggingElt);
            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 (variables) {
        if (!Array.isArray(variables)) variables = [];
        variables = variables.map(v => normalizeVariableData(v)).filter(x => !!x);
        var t = variables.reduce((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 () {
        return this._variables;
    }
});


/**
 *
 * @param {CDContext} context
 * @constructor
 */
function CDUndoManager(context) {
    this.context = context;
    this.data = [];
    this.idx = -1;
}


CDUndoManager.prototype.revokeResource = function () {
    this.data = [];
    this.idx = -1;
};

CDUndoManager.prototype.reset = function () {
    this.data = [];
    this.idx = -1;
    return this;
}

CDUndoManager.prototype.commit = function () {
    while (this.data.length - 1 > this.idx) this.data.pop();
    var item = {
        header: this.context.table.header.data,
        data: this.context.table.body.data,
        headerHidden: this.context.table.header.hidden
    };
    this.data.push(item);
    this.idx = this.data.length - 1;
    return this;
};

CDUndoManager.prototype._applyTop = function () {
    var item = this.data[this.idx];
    this.context.varMng.rejectAllVariables();
    this.context.table.header.data = item.header;
    this.context.table.header.hidden = item.headerHidden;
    this.context.table.body.data = item.data;
    this.context.lcEmitter.emit(EV_UNDO_APPLY);
}

CDUndoManager.prototype.undo = function () {
    if (!this.canUndo()) return this;
    this.idx--;
    this._applyTop();
    return this;
};


CDUndoManager.prototype.redo = function () {
    if (!this.canRedo()) return this;
    this.idx++;
    this._applyTop();
    return this;

};


CDUndoManager.prototype.canRedo = function () {
    return this.idx + 1 < this.data.length;
};


CDUndoManager.prototype.canUndo = function () {
    return this.idx > 0;
};


/**
 *
 * @param {CDContext} context
 * @constructor
 */
function CDGFormatTool(context) {
    this.context = context;
    this.table = context.table;
    this.editor = context.editor;
    this.lcEmitter = context.lcEmitter;
    Object.keys(this.constructor.prototype).filter(k => k.startsWith('ev_')).forEach(k => this[k] = this[k].bind(this));
    this.$tool = (0,ACore._)({
        class: 'as-table-of-text-input-tool',
        child: [
            {
                class: 'as-table-of-text-input-tool-group',
                child: [
                    {
                        tag: RibbonButton/* default */.Z,
                        attr: { "data-command": 'toggle_header' },
                        props: {
                            items: [
                                {
                                    text: 'Show Header',
                                    arg: true,
                                    icon: (0,ACore._)(table_header_add).addClass('as-show-header')
                                },
                                { text: 'Hide Header', arg: false, icon: table_header_add }
                            ],
                            icon: (0,ACore._)(table_header_add).addClass('as-show-header')
                        }
                    }
                ]
            },
            {
                class: 'as-table-of-text-input-tool-group',
                child: [
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],
                        child: 'span.mdi.mdi-undo',
                        attr: { 'data-command': 'undo', title: 'Undo' }
                    },
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],
                        child: 'span.mdi.mdi-redo',
                        attr: { 'data-command': 'redo', title: 'Redo' }
                    },
                ]
            },
            {
                class: 'as-table-of-text-input-tool-group',
                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', title: 'Insert 1 column 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', title: 'Insert 1 column 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', title: 'Insert 1 row 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', title: 'Insert 1 row bellow' }
                    },
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command', 'as-variant-danger'],
                        attr: { 'data-command': 'removeCol', title: 'Delete column' },
                        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', title: 'Delete row' },
                        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', title: 'Merge Cells' },
                        child: {
                            tag: 'span',
                            class: ['mdi', 'mdi-table-merge-cells'],
                        },
                    }]
            },
            {
                class: 'as-table-of-text-input-tool-group',
                child: [
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],//can checked
                        attr: { 'data-command': 'textAlignLeft', title: 'Format text align left' },
                        child: {
                            tag: 'span',
                            class: ['mdi', 'mdi-format-align-left'],
                        }
                    },
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],//can checked
                        attr: { 'data-command': 'textAlignCenter', title: 'Format text align center' },
                        child: {
                            tag: 'span',
                            class: ['mdi', 'mdi-format-align-center'],
                        }
                    },
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],//can checked
                        attr: { 'data-command': 'textAlignRight', title: 'Format text align right' },
                        child: {
                            tag: 'span',
                            class: ['mdi', 'mdi-format-align-right'],
                        }
                    },
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],//can checked
                        attr: { 'data-command': 'textFormatBold', title: 'Bold' },
                        child: {
                            tag: 'span',
                            class: ['mdi', 'mdi-format-bold'],
                        }
                    },
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],//can checked
                        attr: { 'data-command': 'textFormatItalic', title: 'Italic' },
                        child: {
                            tag: 'span',
                            class: ['mdi', 'mdi-format-italic'],
                        }
                    },
                    {
                        tag: 'button',
                        class: ['as-transparent-button', 'as-table-of-text-input-tool-command'],//can checked
                        attr: { 'data-command': 'wrap', title: 'Allow text wrap', },
                        child: {
                            tag: 'span',
                            class: ['mdi', 'mdi-wrap'],
                        }
                    }
                ]
            },
            {
                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.editor.addChildAfter(this.$tool, null);
    this.$commandBtns = (0,ACore.$$)('.as-table-of-text-input-tool >button', this.$tool).concat((0,ACore.$$)('.as-table-of-text-input-tool-group >button', this.$tool))
        .reduce((ac, btn) => {
            var value = btn.attr('data-command');
            if (!value) return ac;
            if (btn.isSupportedEvent('select')) {
                btn.on('select', (event) => {
                    this.commands[value].exec.call(this, event.item.arg);
                });
            }
            else
                btn.on('click', ev => {
                    if (this.commands[value].checked) {
                        this.commands[value].exec.call(this, !btn.hasClass('as-checked'));
                    }
                    else {
                        this.commands[value].exec.call(this);
                    }
                });
            ac[value] = btn;
            return ac;
        }, {});
    this.updateAvailableCommands();
    this.lcEmitter.on(EV_SELECTED_CELL_CHANGE, this.updateAvailableCommands.bind(this));
}

CDGFormatTool.prototype.updateAvailableCommands = function () {
    Object.values(this.$commandBtns).forEach(btn => {
        var name = btn.attr('data-command');
        if (this.commands[name] && this.commands[name].available) {
            btn.disabled = !this.commands[name].available.call(this);
        }
        if (this.commands[name] && this.commands[name].checked) {
            if (this.commands[name].checked.call(this)) {
                btn.addClass('as-checked');
            }
            else {
                btn.removeClass('as-checked');
            }
        }
        else if (this.commands[name] && this.commands[name].getIcon) {
            btn.icon = this.commands[name].getIcon.call(this);
        }
    });
};

CDGFormatTool.prototype.addColAt = function (newColIdx) {
    this.table.header.addColAt(newColIdx);
    this.table.body.addColAt(newColIdx);
    this.lcEmitter.emit(EV_CELL_DATA_CHANGE);

};


CDGFormatTool.prototype.addRowAt = function (grid, newRowIdx) {//todo: wrong
    grid.addRowAt(newRowIdx);
    this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};


CDGFormatTool.prototype.removeRowAt = function (grid, rowIdx, rowHeight) {
    grid.removeRowAt(rowIdx, rowHeight);
    this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};


CDGFormatTool.prototype.removeColAt = function (rowIdx, colWidth) {
    this.table.header.removeColAt(rowIdx, colWidth);
    this.table.body.removeColAt(rowIdx, colWidth);
    this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};

CDGFormatTool.prototype.mergeCells = function (grid, cells) {
    grid.mergeCells(cells);
    this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};

CDGFormatTool.prototype.splitCell = function (grid, originalCell) {
    grid.splitCell(originalCell);
    this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
};


/**
 * @this CDGFormatTool
 */
function hasSelectedCell() {
    var selectedCells = this.context.selectCtrl.selectedCells;
    return selectedCells.length > 0;
}


var checkTextAlign = alignVal => function () {
    var selectedCells = this.context.selectCtrl.selectedCells;
    if (!selectedCells.length) return false;
    for (var i = 0; i < selectedCells.length; ++i) {
        if (textAlignOfElt(selectedCells[i]) !== alignVal) return false;
    }
    return true;
};

CDGFormatTool.prototype.commands = {
    undo: {
        /**
         * @this CDGFormatTool
         */
        available: function () {
            return this.context.undoMng.canUndo();
        },
        exec: function () {
            this.context.undoMng.undo();
        }
    },
    redo: {
        available: function () {
            return this.context.undoMng.canRedo();
        },
        exec: function () {
            this.context.undoMng.redo();

        }
    },
    toggle_header: {
        /**
         * @this CDGFormatTool
         */
        getIcon: function () {
            if (this.context && this.context.table.header.hidden) {
                return (0,ACore._)(table_header_add);
            }
            else {
                return (0,ACore._)(table_header_add).addClass('as-show-header')
            }
        },
        /**
         * @this CDGFormatTool
         */
        exec: function (arg) {
            if (!this.context.table.header.hidden === !!arg) return;
            this.context.table.header.hidden = !arg;
            this.lcEmitter.emit(EV_SELECTED_CELL_CHANGE);
            this.lcEmitter.emit(EV_CELL_DATA_CHANGE);

        }
    },
    left: {
        available: hasSelectedCell,
        /**
         * @this CDGFormatTool
         */
        exec: function () {
            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 () {
            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 () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return;
            var loc = locOfCells(selectedCells);
            var newRowIdx = loc[0];
            var grid = this.context.table.body;
            if (this.context.table.header.hasCell(selectedCells[0]))
                grid = this.context.table.header;
            this.addRowAt(grid, newRowIdx);
        }
    },
    bellow: {
        available: hasSelectedCell,
        /**
         * @this CDGFormatTool
         */
        exec: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return;
            var loc = locOfCells(selectedCells);
            var newRowIdx = loc[0] + loc[2];
            var grid = this.context.table.body;
            if (this.context.table.header.hasCell(selectedCells[0]))
                grid = this.context.table.header;
            this.addRowAt(grid, newRowIdx);

        }
    },
    removeRow: {
        available: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var loc = locOfCells(selectedCells);
            var grid = this.context.table.body;
            if (this.context.table.header.hasCell(selectedCells[0]))
                grid = this.context.table.header;
            var size = grid.getSize();
            return loc[2] < size.height;

        },
        exec: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return;
            var loc = locOfCells(selectedCells);
            var grid = this.context.table.body;
            if (this.context.table.header.hasCell(selectedCells[0]))
                grid = this.context.table.header;
            this.removeRowAt(grid, loc[0], loc[2]);
            this.context.selectCtrl.selectCells([]);
        }
    },
    removeCol: {
        available: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var loc = locOfCells(selectedCells);
            var grid = this.context.table.body;
            if (this.context.table.header.hasCell(selectedCells[0]))
                grid = this.context.table.header;
            var size = grid.getSize();

            return loc[3] < size.width;
        },
        exec: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return;
            var loc = locOfCells(selectedCells);
            // var grid = this.context.table.body;
            // if (this.context.table.header.hasCell(selectedCells[0]))
            //     grid = this.context.table.header;
            this.removeColAt(loc[1], loc[3]);
            this.context.selectCtrl.selectCells([]);
        }
    },
    merge: {
        checked: function () {
            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 () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var loc = locOfCells(selectedCells);
            return loc[2] > 1 || loc[3] > 1;
        },
        exec: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var loc = locOfCells(selectedCells);
            var grid = this.context.table.body;
            if (this.context.table.header.hasCell(selectedCells[0]))
                grid = this.context.table.header;
            var isMerged = selectedCells.length === 1 && (loc[2] > 1 || loc[3] > 1);
            if (isMerged) this.splitCell(grid, selectedCells[0])
            else this.mergeCells(grid, selectedCells);
            selectedCells = grid.getCellsFromLoc(loc);
            this.context.selectCtrl.selectCells(selectedCells);
        }
    },
    edit_variable: {
        /**
         * @this CDGFormatTool
         */
        available: function () {
            var fv = this.context.varMng && this.context.varMng.focusVariable;
            return !!(fv && fv.isDescendantOf(this.context.editor));
        },
        /**
         * @this CDGFormatTool
         */
        exec: function () {
            this.context.varMng.openEditVariableDialog();
        }
    },

    textAlignCenter: {
        checked: checkTextAlign('center'),
        available: hasSelectedCell,
        exec: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var changed = false;
            var cell;
            for (var i = 0; i < selectedCells.length; ++i) {
                cell = selectedCells[i];
                if ((cell.style.textAlign || defaultTextAlignOfElt(cell)) !== 'center') {
                    cell.style.textAlign = 'center';
                    changed = true;
                }
            }
            if (changed)
                this.lcEmitter.emit(EV_CELL_DATA_CHANGE);

        }
    },
    textAlignRight: {
        checked: checkTextAlign('right'),
        available: hasSelectedCell,
        exec: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var changed = false;
            var cell;
            for (var i = 0; i < selectedCells.length; ++i) {
                cell = selectedCells[i];
                if ((cell.style.textAlign || defaultTextAlignOfElt(cell)) !== 'right') {
                    cell.style.textAlign = 'right';
                    changed = true;
                }
            }
            if (changed)
                this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
        }
    },
    textAlignLeft: {
        checked: checkTextAlign('left'),
        available: hasSelectedCell,
        exec: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var changed = false;
            var cell;
            for (var i = 0; i < selectedCells.length; ++i) {
                cell = selectedCells[i];
                if ((cell.style.textAlign || defaultTextAlignOfElt(cell)) !== 'left') {
                    cell.style.textAlign = 'left';
                    changed = true;
                }
            }
            if (changed)
                this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
        }
    },
    wrap: {
        checked: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            for (var i = 0; i < selectedCells.length; ++i) {
                if (selectedCells[i].style.whiteSpace === 'nowrap') return false;
            }
            return true;
        }, available: hasSelectedCell,
        exec: function (flag) {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var changed = false;
            var cell;
            for (var i = 0; i < selectedCells.length; ++i) {
                cell = selectedCells[i];
                if (cell.style.whiteSpace === 'nowrap') {
                    if (flag) {
                        cell.style.whiteSpace = null;
                        changed = true;
                    }
                }
                else {
                    if (!flag) {
                        cell.style.whiteSpace = 'nowrap';
                        changed = true;
                    }
                }
            }

            if (changed)
                this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
        }
    },
    textFormatBold: {
        checked: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            for (var i = 0; i < selectedCells.length; ++i) {
                if (fontWeightOfElt(selectedCells[i]) !== 'bold') return false;
            }
            return true;
        },
        available: hasSelectedCell,
        exec: function (flag) {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var changed = false;
            var cell;
            for (var i = 0; i < selectedCells.length; ++i) {
                cell = selectedCells[i];
                if (fontWeightOfElt(cell) === 'bold') {
                    if (!flag) {
                        cell.style.fontWeight = 'normal';
                        changed = true;
                    }
                }
                else {
                    if (flag) {
                        cell.style.fontWeight = 'bold';
                        changed = true;
                    }
                }
            }
            if (changed)
                this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
        }
    },
    textFormatItalic: {
        checked: function () {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            for (var i = 0; i < selectedCells.length; ++i) {
                if (fontStyleOfElt(selectedCells[i]) !== 'italic') return false;
            }
            return true;
        },
        available: hasSelectedCell,
        exec: function (flag) {
            var selectedCells = this.context.selectCtrl.selectedCells;
            if (!selectedCells.length) return false;
            var changed = false;
            var cell;
            for (var i = 0; i < selectedCells.length; ++i) {
                cell = selectedCells[i];
                if (fontStyleOfElt(cell) === 'italic') {
                    if (!flag) {
                        cell.style.fontStyle = 'normal';
                        changed = true;
                    }
                }
                else {
                    if (flag) {
                        cell.style.fontStyle = 'italic';
                        changed = true;
                    }
                }
            }
            if (changed)
                this.lcEmitter.emit(EV_CELL_DATA_CHANGE);
        }
    }

};


;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectRibbonMenu.js



var addSelectedClass = item => {
    if (!item) return;
    if (Array.isArray(item.extendClasses)) {
        item.extendClasses.push('as-ribbon-selected');
    }
    else {
        item.extendClasses = [item.extendClasses, 'as-ribbon-selected'].filter(x => !!x);
    }
}


var removeSelectedClass = item => {
    if (!item) return;
    if (Array.isArray(item.extendClasses)) {
        item.extendClasses = item.extendClasses.filter(it => it !== 'as-ribbon-selected');
    }
}

/**
 * @extends {RibbonButton}
 * @constructor
 */
function SelectRibbonMenu() {
    RibbonButton/* default.apply */.Z.apply(this, arguments);
    this.addClass('as-select-ribbon-menu');
    this._itemDict = {};
    this._value = null;
    this.defineEvent('change');
    this.on('select', (ev) => {
        var value = ev.item.value;
        if (this.value !== value) {
            this.value = value;
            this.emit('change', { target: this, type: 'change' }, this);
        }
    });
}


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

SelectRibbonMenu.render = RibbonButton/* default.render */.Z.render;

SelectRibbonMenu.property = Object.assign({}, RibbonButton/* default.property */.Z.property);

SelectRibbonMenu.property.items = {
    set: function (items) {
        removeSelectedClass(this.selectedItem);
        items = items || [];
        RibbonButton/* default.property.items.set.call */.Z.property.items.set.call(this, items);

        this._itemDict = {};
        var visit = (it) => {
            var key = (0,utils.keyStringOf)(it.value);
            this._itemDict[key] = it;
        }

        items.forEach(it => visit(it));

        var selectedItem = this.selectedItem;
        addSelectedClass(selectedItem);
        selectedItem = Object.assign({ text: '', icon: null }, selectedItem);
        this.text = selectedItem.text;
        this.icon = selectedItem.icon;

    },
    get: RibbonButton/* default.property.items.get */.Z.property.items.get
}

SelectRibbonMenu.property.value = {
    set: function (value) {
        var selectedItem = this.selectedItem;
        console.log('clear', selectedItem)
        removeSelectedClass(selectedItem);

        this._value = value;
        selectedItem = this.selectedItem;
        addSelectedClass(selectedItem);
        selectedItem = Object.assign({ text: '', icon: null }, selectedItem);
        this.text = selectedItem.text;
        this.icon = selectedItem.icon;
    },
    get: function () {
        if (!this._items || !this._items.length || this._itemDict[(0,utils.keyStringOf)(this._value)]) return this._value;
        return this._items[0].value;
    }
};

SelectRibbonMenu.property.selectedItem = {
    get: function () {
        if (this._itemDict[(0,utils.keyStringOf)(this._value)]) return this._itemDict[(0,utils.keyStringOf)(this._value)];
        if (this._items && this._items.length) return this._items[0];
        return null;
    }
};

/* harmony default export */ const js_SelectRibbonMenu = (SelectRibbonMenu);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PathView.js



/***
 * @extends AElement
 * @constructor
 */
function PathView() {
    this._items = [];
    this.$items = [];
}

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

PathView.render = function () {
    return (0,ACore._)({
        extendEvent: ['press'],
        class: 'as-path-view'
    });
};


PathView.property = {};

PathView.property.items = {
    set: function (value) {
        this.clearChild();
        this._items = value || [];
        this.$items = this._items.map((item, i, array) => {
            item = item || {};

            var $item = (0,ACore._)({
                tag: 'button',
                class: ['as-path-view-item'],
                child: []
            });
            if (item.icon) {
                $item.addChild((0,ACore._)(item.icon).addClass('as-path-view-item-icon'));
            }
            if (item.text || item.name) {
                $item.addChild((0,ACore._)({
                    class: 'as-path-view-item-text',
                    child: { text: item.text || item.name || '' }
                }));
            }

            if (i < array.length - 1) {
                $item.addChild((0,ACore._)({
                    class: 'as-path-view-item-arrow',
                    child: 'span.mdi.mdi-chevron-right'
                }));
            }

            $item.on('click', (event) => {
                this.emit('press', {
                    item: item,
                    index: i,
                    items: array,
                    type: 'click',
                    value: item.value,
                    originalEvent: event
                });
            });
            this.$items.push($item);
            return $item;
        });
        this.addChild(this.$items);
    },
    get: function () {
        return this._items;
    }
};


ACore/* default.install */.Z.install(PathView);


/* harmony default export */ const js_PathView = (PathView);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/fontinput.css
var fontinput = __webpack_require__(8965);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/FontInput.js











const fonts = [
    'Arial', 'Verdana', 'Times New Roman', 'Courier New', 'Georgia', 'Palatino', 'Garamond', 'Bookman', 'Comic Sans MS', 'Trebuchet MS', 'Arial Black', 'Impact',
    "'Open Sans', sans-serif",
    "'Roboto', sans-serif",
    "'Big Shoulders Text', cursive",
    "'Montserrat', sans-serif",
    "'Oswald', sans-serif",
    "'Source Sans Pro', sans-serif",
    "'Roboto Condensed', sans-serif",
    "'Literata', serif",
    "'Roboto Mono', monospace",
    "'Roboto Slab', serif",
    "'Merriweather', serif",
    "'Noto Sans', sans-serif",
    "'Lora', serif",
    "'Muli', sans-serif",
    "'Open Sans Condensed', sans-serif",
    "'Playfair Display', serif",
    "'Nunito', sans-serif",
    "'Noto Serif', serif",
    "'Fira Sans', sans-serif",
    "'Inconsolata', monospace",
    "'Dosis', sans-serif",
    "'Nunito Sans', sans-serif",
    "'Arimo', sans-serif",
    "'Quicksand', sans-serif",
    "'Cabin', sans-serif",
    "'Josefin Sans', sans-serif",
    "'Varela Round', sans-serif",
    "'Anton', sans-serif",
    "'Lobster', cursive",
    "'Yanone Kaffeesatz', sans-serif",
    "'Source Code Pro', monospace",
    "'Baloo Bhai', cursive",
    "'Barlow', sans-serif",
    "'Dancing Script', cursive",
    "'Pacifico', cursive",
    "'Exo 2', sans-serif",
    "'Barlow Semi Condensed', sans-serif",
    "'EB Garamond', serif",
    "'Archivo Narrow', sans-serif",
    "'Asap', sans-serif",
    "'Comfortaa', cursive",
    "'Barlow Condensed', sans-serif",
    "'IBM Plex Sans', sans-serif",
    "'Maven Pro', sans-serif",
    "'Play', sans-serif",
    "'Exo', sans-serif",
    "'Amatic SC', cursive",
    "'Kanit', sans-serif",
    "'Fira Sans Condensed', sans-serif",
    "'Noto Sans SC', sans-serif",
    "'Vollkorn', serif",
    "'Prompt', sans-serif",
    "'Rokkitt', serif",
    "'Cuprum', sans-serif",
    "'Alegreya Sans', sans-serif",
    "'Francois One', sans-serif",
    "'Cormorant Garamond', serif",
    "'Alegreya', serif",
    "'Alfa Slab One', cursive",
    "'Noticia Text', serif",
    "'Saira Extra Condensed', sans-serif",
    "'Old Standard TT', serif",
    "'Tinos', serif",
    "'Fira Sans Extra Condensed', sans-serif",
    "'IBM Plex Serif', serif",
    "'Patrick Hand', cursive",
    "'M PLUS 1p', sans-serif",
    "'Prata', serif",
    "'Philosopher', sans-serif",
    "'Saira Semi Condensed', sans-serif",
    "'Archivo', sans-serif",
    "'Big Shoulders Display', cursive",
    "'Bangers', cursive",
    "'Playfair Display SC', serif",
    "'Cabin Condensed', sans-serif",
    "'Paytone One', sans-serif",
    "'Montserrat Alternates', sans-serif",
    "'Taviraj', serif",
    "'Spectral', serif",
    "'Lalezar', cursive",
    "'Asap Condensed', sans-serif",
    "'M PLUS Rounded 1c', sans-serif",
    "'Sigmar One', cursive",
    "'Saira', sans-serif",
    "'Pridi', serif",
    "'Mitr', sans-serif",
    "'Baloo', cursive",
    "'Cormorant', serif",
    "'Sarabun', sans-serif",
    "'Saira Condensed', sans-serif",
    "'Be Vietnam', sans-serif",
    "'Yeseva One', cursive",
    "'Lexend Peta', sans-serif",
    "'Alegreya Sans SC', sans-serif",
    "'IBM Plex Mono', monospace",
    "'Jura', sans-serif",
    "'Bevan', cursive",
    "'Lexend Exa', sans-serif",
    "'Sawarabi Gothic', sans-serif",
    "'Cousine', monospace",
    "'Markazi Text', serif",
    "'VT323', monospace",
    "'Baloo Bhaina', cursive",
    "'Space Mono', monospace",
    "'Encode Sans', sans-serif",
    "'Encode Sans Semi Expanded', sans-serif",
    "'Arima Madurai', cursive",
    "'Lexend Deca', sans-serif",
    "'Lexend Tera', sans-serif",
    "'Lexend Giga', sans-serif",
    "'Lexend Zetta', sans-serif",
    "'Lexend Mega', sans-serif",
    "'Arsenal', sans-serif",
    "'Itim', cursive",
    "'Noto Serif SC', serif",
    "'Pangolin', cursive",
    "'Lemonada', cursive",
    "'Encode Sans Condensed', sans-serif",
    "'Bai Jamjuree', sans-serif",
    "'Alegreya SC', serif",
    "'Noto Serif TC', serif",
    "'Judson', serif",
    "'Livvic', sans-serif",
    "'Krub', sans-serif",
    "'Trirong', serif",
    "'Niramit', sans-serif",
    "'Bungee Inline', cursive",
    "'Mali', cursive",
    "'Pattaya', sans-serif",
    "'Rosario', sans-serif",
    "'Bungee', cursive",
    "'Sriracha', cursive",
    "'Metrophobic', sans-serif",
    "'Faustina', serif",
    "'Darker Grotesque', sans-serif",
    "'Encode Sans Expanded', sans-serif",
    "'Chakra Petch', sans-serif",
    "'IBM Plex Sans Condensed', sans-serif",
    "'Maitree', serif",
    "'Baloo Bhaijaan', cursive",
    "'Cormorant Infant', serif",
    "'Saira Stencil One', cursive",
    "'Chonburi', cursive",
    "'Barriecito', cursive",
    "'Bahianita', cursive",
    "'Athiti', sans-serif",
    "'Sedgwick Ave', cursive",
    "'Patrick Hand SC', cursive",
    "'Srisakdi', cursive",
    "'Cormorant SC', serif",
    "'Andika', sans-serif",
    "'Podkova', serif",
    "'Bungee Shade', cursive",
    "'Baloo Da', cursive",
    "'Spectral SC', serif",
    "'Baloo Thambi', cursive",
    "'Baloo Chettan', cursive",
    "'Cormorant Upright', serif",
    "'Encode Sans Semi Condensed', sans-serif",
    "'Charm', cursive",
    "'Baloo Paaji', cursive",
    "'K2D', sans-serif",
    "'Farsan', cursive",
    "'David Libre', serif",
    "'Coiny', cursive",
    "'Baloo Tamma', cursive",
    "'Manuale', serif",
    "'Thasadith', sans-serif",
    "'Vollkorn SC', serif",
    "'Bungee Hairline', cursive",
    "'Kodchasan', sans-serif",
    "'Hepta Slab', serif",
    "'Cormorant Unicase', serif",
    "'Crimson Pro', serif",
    "'Grenze', serif",
    "'Charmonman', cursive",
    "'Baloo Tammudu', cursive",
    "'KoHo', sans-serif",
    "'Major Mono Display', monospace",
    "'Fahkwang', sans-serif",
    "'Bungee Outline', cursive",
    "'Sedgwick Ave Display', cursive"
];//only for test

/**
 * @extends Follower
 * @constructor
 */
function FontFamilySelectList() {
    this.on('preupdateposition', this.eventHandler.ffPreUpdatePosition);
    this.$content = (0,ACore.$)('.as-font-family-select-list-content', this);
    this.$items = [];
    this.$selectedItem = null;
    this.$itemByValue = {};
    this.$searchInput = (0,ACore.$)(Searcher/* default.tag */.Z.tag, this);
    this.$searchInput.on('stoptyping', this.eventHandler.searchChange);
    /**
     *
     * @type {string[]}
     * @memberOf FontFamilySelectList#
     */
    this.items = fonts;
    this._searchingHolders = null;//not prepared
}

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

FontFamilySelectList.render = function () {
    return (0,ACore._)({
        tag: Follower/* default */.Z,
        class: ['as-font-family-select-list', 'as-dropdown-box-common-style'],
        child: [
            {
                class: 'as-font-family-select-list-header',
                child: { tag: Searcher/* default */.Z }
            },

            {
                class: ['as-bscroller', 'as-font-family-select-list-content'],
            }
        ]
    }, true);
};

FontFamilySelectList.property = {};

FontFamilySelectList.property.items = {
    set: function (items) {
        if (!Array.isArray(items)) items = [];
        this._items = items;
        this.$content.clearChild();
        this.$itemByValue = {};
        this._searchingHolders = null;
        this.$items = items.map(item => {
            var text = item.replace(/'/g, '');
            text = text.replace(/,.+/, '');
            var itemElt = (0,ACore._)({
                class: 'as-font-family-select-item',
                style: { fontFamily: item },
                attr: { 'data-value': item },
                child: { text: text },
                on: {
                    click: () => {
                        this.value = item;
                        this.emit('select', { value: item });
                    }

                }
            });
            this.$itemByValue[item] = itemElt;
            return itemElt;
        });
        this.$content.addChild(this.$items);
    },
    get: function () {
        return this._items;
    }
};


FontFamilySelectList.property.value = {
    set: function (value) {
        if (this.$selectedItem) this.$selectedItem.removeClass('as-selected');
        this._value = value;
        this.$selectedItem = this.$itemByValue[value];
        if (this.$selectedItem) this.$selectedItem.addClass('as-selected');
    },
    get: function () {
        if (this.$itemByValue[this._value]) return this._value;
        return null;
    }
};

FontFamilySelectList.prototype._makeHolder = function (item, value) {
    var res = {
        value: value,
        text: item
    };
    res.text = res.text.trim().toLowerCase();
    res.words = res.text.split(/\s+/).filter(w => !!w);
    res.text = res.words.join(' ');
    res.nacWords = res.words.map(w => (0,stringFormat.nonAccentVietnamese)(w));
    res.nacText = res.nacWords.join(' ');
    res.nacWordDict =
        res.nacWords.reduce(function (ac, word) {
            ac[word] = true;
            return ac;
        }, {});
    return res;
};

FontFamilySelectList.prototype._prepareSearchingHolders = function () {
    if (this._searchingHolders) return;
    this._searchingHolders = this.items.map((item, idx) => this._makeHolder(item, idx));
};

FontFamilySelectList.prototype._calcMatching = function (queryHolder, itemHolder) {
    var res = {};
    var score = 0;
    if (itemHolder.text.indexOf(queryHolder.text) >= 0 || itemHolder.nacText.indexOf(queryHolder.nacText) >= 0) {
        res.mustIncluded = true;
    }

    score += (0,stringMatching.wordsMatch)(queryHolder.words, itemHolder.words) / (0,Math_int.harmonicMean)(queryHolder.words.length, itemHolder.words.length);
    score += (0,stringMatching.wordsMatch)(queryHolder.nacWords, itemHolder.nacWords) / (0,Math_int.harmonicMean)(queryHolder.nacWords.length, itemHolder.nacWords.length);
    var dict = Object.keys(itemHolder.nacWordDict);
    Object.keys(queryHolder.nacWordDict).forEach(function (qWord) {
        var bestWordScore = 0;
        var bestWord = '';
        var word;
        for (word in dict) {
            if ((0,stringMatching.wordLike)(qWord, word) > bestWordScore) {
                bestWordScore = (0,stringMatching.wordLike)(qWord, word);
                bestWord = word;
            }
        }
        if (bestWordScore > 0) {
            score += bestWordScore / (0,Math_int.harmonicMean)(qWord.length, bestWord.length);
            delete dict[bestWord];
        }
    });


    res.score = score;
    return res;
};

FontFamilySelectList.eventHandler = {};

FontFamilySelectList.eventHandler.ffPreUpdatePosition = function () {
    if (!this.followTarget) return;
    var bound = this.followTarget.getBoundingClientRect();
    var screenSizes = (0,Dom/* getScreenSize */.tE)();
    var availableHeight = screenSizes.height - bound.bottom;
    availableHeight = Math.max(availableHeight, bound.top);
    availableHeight -= 50;
    this.$content.addStyle('max-height', availableHeight + 'px');

};

/**
 * @this FontFamilySelectList
 */
FontFamilySelectList.eventHandler.searchChange = function () {
    var query = this.$searchInput.value.trim();
    var queryHolder = this._makeHolder(query, -1);
    var resultHolders, midScore, viewItemElements;
    if (query.length > 0) {
        this._prepareSearchingHolders();
        this._searchingHolders.forEach((itemHolder) => {
            var match = this._calcMatching(queryHolder, itemHolder);
            Object.assign(itemHolder, match);
        });
        resultHolders = this._searchingHolders.slice();
        resultHolders.sort(function (a, b) {
            return b.score - a.score;
        });
        midScore = resultHolders[0].score * 0.7;
        resultHolders = resultHolders.filter(function (holder) {
            return holder.score >= midScore || holder.mustIncluded;
        });

        viewItemElements = resultHolders.map(holder => this.$items[holder.value]);
        this.$content.clearChild().addChild(viewItemElements);

    }
    else {
        this.$content.clearChild().addChild(this.$items);
    }
    this.updatePosition();

    console.log(query)

};


ACore/* default.install */.Z.install(FontFamilySelectList);

/**
 * @extends AElement
 * @constructor
 */
function FontInput() {
    /**
     * @type {FontFamilySelectList}
     */
    this.$selectList = (0,ACore._)('fontfamilyselectlist');
    this.$selectList.cancelWaiting();
    this.$selectList.sponsorElement = this;

    setTimeout(() => {
        this.$selectList.addTo(document.body);
        this.$selectList.followTarget = this;
    }, 100)

}

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

FontInput.render = function () {
    return (0,ACore._)({
        class: 'as-font-input',
    });
};


FontInput.property = {};

/* harmony default export */ const js_FontInput = (FontInput);

ACore/* default.install */.Z.install(FontInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/collapsibletreenavigator.css
var collapsibletreenavigator = __webpack_require__(3478);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CollapsibleTreeNavigator.js









/**
 * note
 * CTCollapsibleNode can only be selected when it has no children and noSelect = false.
 * CTNNode can be selected and can have children.
 */

var NODE_CONTENT_HEIGHT = BrowserDetector/* default.isMobile */.Z.isMobile? 45: 30;
var css = new DynamicCSS/* default */.Z();
css.setRule('div.as-collapsible-tree-navigator', {
    '--node-content-height': NODE_CONTENT_HEIGHT + 'px'
}).commit();

/**
 * @typedef {Object} CTNItemData
 * @property {string} text
 * @property {any} string
 * @property  [icon]
 * @property [noSelect] - default = false
 */

/**
 * @extends AElement
 * @constructor
 */
function CollapsibleTreeNavigator() {
    /**
     *
     * @type {CTRoot}
     */
    this.root = new CTRoot(this);

    /**
     * @type {{text:string, id:any, actiions:{}[]}[]}
     * @name items
     * @memberOf CollapsibleTreeNavigator#
     */

    /**
     * @type {any}
     * @name value
     * @memberOf CollapsibleTreeNavigator#
     */
}

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

CollapsibleTreeNavigator.render = function () {
    return (0,ACore._)({
        class: 'as-collapsible-tree-navigator',
        extendEvent: ['change', 'action', 'clickitem']
    });
};

CollapsibleTreeNavigator.prototype.nodeOf = function (nodeValue) {
    return this.root.nodeOf(nodeValue);
};

CollapsibleTreeNavigator.prototype.updateNode = function (nodeValue, fieldName, value) {
    var nd = this.nodeOf(nodeValue);
    if (!nd) return;
    nd.rawData[fieldName] = value;
    if (['items', 'text', 'icon', 'value', 'count', 'color'].indexOf(fieldName) >= 0) {
        nd[fieldName] = value;
        this.root.updateSize();
    }
};


/**
 *
 * @param {any=}data
 */
CollapsibleTreeNavigator.prototype.notifyChange = function (data) {
    var nd;
    if (!data) {//fallback
        nd = this.root.nodeByValue[(0,utils.keyStringOf)(this.value)];
        data = nd && nd.data;
    }
    data = data || null;
    var value = this.value;
    if (data) value = data.value;
    this.emit('change', { type: 'change', value: value, data: data }, this);
};

/**
 *
 * @param {any=}data
 */
CollapsibleTreeNavigator.prototype.notifyClick = function (data) {
    this.emit('clickitem', { type: 'clickitem', data: data }, this);
};


CollapsibleTreeNavigator.property = {};

CollapsibleTreeNavigator.property.value = {
    set: function (value) {
        this.root.value = value;
    },
    get: function () {
        return this.root.value;
    }
};

CollapsibleTreeNavigator.property.items = {
    set: function (items) {
        this.root.items = items;
    },
    get: function () {
        return this.root.items;
    }
};


ACore/* default.install */.Z.install(CollapsibleTreeNavigator);

/* harmony default export */ const js_CollapsibleTreeNavigator = (CollapsibleTreeNavigator);

/**
 *
 * @param {CollapsibleTreeNavigator} elt
 * @constructor
 */
function CTRoot(elt) {
    this.elt = elt;
    /**
     *
     * @type {CTCollapsibleNode[]}
     */
    this.children = [];
    this.nodeByValue = {};
    this.iconCount = 0;
    this.level = 0;
    this.looked = 0;
}

CTRoot.prototype.nodeOf = function (nodeValue) {
    return this.nodeByValue[(0,utils.keyStringOf)(nodeValue)];
}

CTRoot.prototype.updateSelectedLine = function () {
    if (this.looked) return;
    var selectedNode = this.nodeOf(this.value);
    if (!selectedNode) return;
    var path = [];
    var c = selectedNode;
    while (c && c !== this) {
        path.unshift(c);
        c = c.parent;
    }
    var viewingNode = null;
    while (path.length) {
        c = path.shift();
        viewingNode = c;
        if (c.status !== 'open') {
            break;
        }
    }

    if (!viewingNode) return;
    this.elt.addStyle('--selected-y', viewingNode.offsetY + 'px');
};

CTRoot.prototype.updateSize = function () {
    if (this.looked) return;
    this.elt.addStyle('min-width', Math.ceil(this.minWidth) + 'px');
    if (this.elt.isDescendantOf(document.body)) {
        window.dispatchEvent(new Event('resize'));
    }
};


CTRoot.prototype.clear = function () {
    while (this.children.length > 0) {
        this.children[0].remove();
    }
};


CTRoot.prototype.select = function (value) {
    this.children.forEach(c => c.select(value));
};


Object.defineProperty(CTRoot.prototype, 'offsetHeight', {
    get: function () {
        return this.children.reduce((ac, cr) => ac + cr.offsetHeight, 0)
    }
});


Object.defineProperty(CTRoot.prototype, 'offsetY', {
    get: function () {
        return 0;
    }
});


Object.defineProperty(CTRoot.prototype, 'contentHeight', {
    get: function () {
        return 0;
    }
});


Object.defineProperty(CTRoot.prototype, 'items', {
    set: function (items) {
        this.looked++;
        var prevState = Object.keys(this.nodeByValue).reduce((ac, key) => {
            ac[key] = this.nodeByValue[key].status;
            return ac;
        }, {});

        this.clear();
        this.children = items.map(function (item) {
            return new CTCollapsibleNode(this, item);
        }, this);
        this.elt.addChild(this.children.map(nd => nd.domElt));
        this.select(this.value);
        Object.keys(this.nodeByValue).forEach(key => {
            var nd = this.nodeByValue[key];
            if (prevState[key] === 'open' && nd.status === 'close') {
                nd.status = 'open';
            }
            else if (prevState === 'close' && nd.status === 'open') {
                nd.status = 'close';
            }
        });
        this.looked--;
        this.updateSize();
        this.updateSelectedLine();
    },
    get: function () {
        return this.children.map((chd) => {
            return chd.data;
        });
    }
});


Object.defineProperty(CTRoot.prototype, 'value', {
    set: function (value) {
        this._value = value;
        this.looked++;
        this.select(value);
        this.looked--;
        this.updateSelectedLine();
    },
    get: function () {
        return this._value;
    }
});


Object.defineProperty(CTRoot.prototype, 'data', {
    set: function (data) {
        data = Object.assign({ items: [], value: 0 }, data);
        this.items = data.items;
        this.value = data.value;
    },
    get: function () {
        return {
            items: this.items,
            value: this.value
        };
    }
});

Object.defineProperty(CTRoot.prototype, 'minWidth', {
    get: function () {
        return this.children.reduce((ac, cr) => Math.max(ac, cr.minWidth), 0) + 4;
    }
})


/**
 *
 * @param {CTRoot} parent
 * @param data
 * @constructor
 */
function CTCollapsibleNode(parent, data) {
    this.parent = parent;
    this.nodeByValue = parent.nodeByValue;
    this.root = parent;
    this.level = parent.level + 1;
    this.children = [];
    this.domElt = (0,ACore._)({
        class: 'as-ctn-collapse-node',
        style: { '--level': this.level + '' },
        child: [
            {
                class: 'as-ctn-collapse-node-content',
                child: [
                    'toggler-ico',
                    {
                        class: 'as-ctn-icon-ctn'
                    },
                    {
                        tag: 'span',
                        class: 'as-ctn-text',
                        child: {
                            text: ''
                        }
                    },
                    {
                        tag: 'span',
                        class: 'as-ctn-count',
                        style: {
                            display: 'none'
                        },
                        child: {
                            text: ''
                        }
                    },
                    {
                        class: 'as-ctn-right',
                    }
                ],

            },
            {
                class: 'as-ctn-collapse-node-children-ctn'
            }
        ]
    });
    this.$toggler = (0,ACore.$)('toggler-ico', this.domElt);
    this.$content = (0,ACore.$)('.as-ctn-collapse-node-content', this.domElt);
    this.$childrenCtn = (0,ACore.$)('.as-ctn-collapse-node-children-ctn', this.domElt);
    this.$iconCtn = (0,ACore.$)('.as-ctn-icon-ctn', this.domElt);
    this.$text = (0,ACore.$)('.as-ctn-text', this.domElt);
    this.$count = (0,ACore.$)('.as-ctn-count', this.domElt);
    this.$right = (0,ACore.$)('.as-ctn-right', this.domElt);
    this.data = data;
    this.$content.on('click', this.ev_click.bind(this));
}

CTCollapsibleNode.prototype.remove = function () {
    this.children.slice().forEach(child => child.remove());
    var idx = this.parent.children.indexOf(this);
    var value = this.value;
    if (idx >= 0) {
        delete this.nodeByValue[(0,utils.keyStringOf)(value)];
        this.parent.children.splice(idx, 1);
        this.domElt.remove();
    }
};

CTCollapsibleNode.prototype.select = function (value) {
    var res = false;
    if (this.data.value === value) {
        this.domElt.addClass('as-selected');
        res = true;
    }
    else {
        this.domElt.removeClass('as-selected');
    }
    var childRes = this.children.reduce((ac, it) => it.select(value) || ac, false);
    if (childRes && this.status === 'close') {
        this.status = 'open';
    }
    res = res || childRes;
    return res;
};

CTCollapsibleNode.prototype.ev_click = function (event) {
    if (this.$right && (0,EventEmitter/* hitElement */.EY)(this.$right, event)) return;
    var rootElt;
    if (this.domElt.hasClass('as-closing')) return;
    var isClickItem = false;
    var noSelect = this.rawData && this.rawData.noSelect;
    var tgBound;
    if (this.status === 'none') {
        isClickItem = !noSelect;
    }
    else {
        tgBound = this.$toggler.getBoundingClientRect();
        if (noSelect || event.clientX < tgBound.right) {
            if (this.status === 'open') {
                this.status = 'close';
            }
            else if (this.status === 'close') {
                this.status = 'open';
            }
        }
        else {
            isClickItem = true;
        }

    }
    if (isClickItem) {
        rootElt = this.root.elt;
        if (rootElt && rootElt.value !== this.value) {
            rootElt.value = this.value;
            rootElt.notifyChange(this.data);
        }
        rootElt.notifyClick(this.data);
    }

};


Object.defineProperty(CTCollapsibleNode.prototype, 'status', {
    set: function (value) {
        var prev = this.status;
        if (this.children.length > 0) {
            if (value !== 'open') value = 'close';
        }
        else {
            value = 'none';
        }
        if (prev === value) return;


        this._status = value;
        switch (value) {
            case 'open':
                // this.domElt.addStyle('--children-height', this.childrenHeight + 'px');
                this.domElt.addClass('as-open').removeClass('as-close');
                break;
            case 'close':
                // this.domElt.addStyle('--children-height', this.childrenHeight + 'px');
                this.domElt.addClass('as-close').removeClass('as-open');
                break;
            default:
                this.domElt.removeClass('as-open').removeClass('as-close');
                break;
        }
        this.root.updateSelectedLine();
    },
    get: function () {
        return this._status || 'none';
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'icon', {
    get: function () {
        return this._icon || null;
    },
    set: function (value) {
        this.$iconCtn.clearChild();
        value = value || null;
        this._icon = value;
        if (value) {
            this.$iconCtn.addChild((0,ACore._)(value));
        }
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'text', {
    get: function () {
        return this._text;
    },
    set: function (value) {
        if (typeof value === 'number') value = value + '';
        value = value || '';
        this._text = value;
        this.$text.firstChild.data = value;
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'count', {
    get: function () {
        return this._count;
    },
    set: function (value) {
        if (typeof value !== 'number') value = parseInt(value);
        value = Math.round(value);
        if (!(0,utils.isNaturalNumber)(value)) value = 0;
        this._count = value;
        if (value) {
            this.$count.removeStyle('display');
            this.$count.firstChild.data = value;
        }
        else {
            this.$count.addStyle('display', 'none');
            this.$count.firstChild.data = '';
        }
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'countDesc', {
    get: function () {
        return this._countDesc;
    },
    set: function (value) {
       value = value || null;
       this._countDesc = value;
         if (value) {
              this.$count.attr('title', value);
         }
         else {
              this.$count.removeAttribute('title');
         }
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'value', {
    get: function () {
        return this._value;
    },
    set: function (value) {
        var prevValue = this._value;
        var key = (0,utils.keyStringOf)(prevValue);
        if (this.nodeByValue[key] === this) {
            delete this.nodeByValue[key];
        }
        key = (0,utils.keyStringOf)(value);
        if (this.nodeByValue[key]) {
            value = value + '_' + (0,stringGenerate.randomIdent)(5);
        }
        this._value = value;
        key = (0,utils.keyStringOf)(value);
        this.nodeByValue[key] = this;
        this.domElt.attr('data-value', value + '');
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'color', {
    get: function () {
        return this._color;
    },
    set: function (value) {
        if (typeof value === 'string') {
            try {
                value = Color_Color/* default.parse */.Z.parse(value)
            } catch (e) {
                value = null;
            }
        }
        else if (!value || !value.getContrastYIQ) {
            value = null;
        }
        var textColor;
        if (value) {
            textColor = value.getContrastYIQ();
            this.$content.addStyle('color', textColor + '');
            this.$content.addStyle('background-color', value + '');
        }
        else {
            this.$content.removeStyle('color');
            this.$content.removeStyle('background-color');

        }
        this._color = value + '';
    }
});

Object.defineProperty(CTCollapsibleNode.prototype, 'items', {
    set: function (items) {
        while (this.children.length > 0) {
            this.children[0].remove();
        }
        if (!Array.isArray(items)) items = [];
        this.children = items.map(it => new CTNNode(this, it));
        this.$childrenCtn.addChild(this.children.map(c => c.domElt));
        if (this.children.length) {
            if (this.rawData && this.rawData.initOpened) {
                this.status = 'open';
            }
            else {
                this.status = 'close';
            }
        }
        else {
            this.status = 'none';
        }
        this.root.updateSelectedLine();
    },
    get: function () {
        return this.children.map(ch => ch.data);
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'actions', {
    set: function (actions) {
        if (!Array.isArray(actions)) actions = [];
        this._actions = actions;
        this.$right.clearChild();
        actions.forEach(action => {
            var btn = (0,ACore._)({
                tag: 'button',
                class: ['as-transparent-button'],
                child: action.icon,
                on: {
                    click: (event) => {
                        this.root.elt.emit('action', {
                            action: action,
                            data: this.rawData,
                            type: 'action'
                        }, this.root.elt);
                    }
                }
            });
            if (action.text) btn.attr('title', action.text);

            this.$right.addChild(btn);
        });
    },
    get: function () {
        return this._actions;
    }
})

Object.defineProperty(CTCollapsibleNode.prototype, 'data', {
    set: function (data) {
        this.rawData = data || {};
        data = Object.assign({ text: '', value: 0, icon: null, count: 0 }, data || {});
        this.value = data.value;
        this.text = data.text;
        this.icon = data.icon;
        this.count = data.count;
        this.items = data.items;
        this.color = data.color;
        this.actions = data.actions;
        this.countDesc = data.countDesc || null;
    },
    get: function () {
        var res = Object.assign({}, this.rawData, {
            text: this.text,
            value: this.value
        });
        if (this.actions && this.actions.length) {
            res.actions = this.actions;
        }
        if (this.icon) res.icon = this.icon;
        if (this.count) res.count = this.count;
        if (this.color) res.color = this.color;
        return res;
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'contentHeight', {
    get: function () {
        return NODE_CONTENT_HEIGHT + 1;//+1 for border
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'childrenHeight', {
    get: function () {
        return this.children.reduce((ac, cr) => ac + cr.offsetHeight, 0);
    }
});

Object.defineProperty(CTCollapsibleNode.prototype, 'offsetHeight', {
    get: function () {
        var res = this.contentHeight;
        if (this.status === 'open')
            res += this.childrenHeight;
        return res;
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'offsetY', {
    get: function () {
        var offsetY = this.parent.offsetY + this.parent.contentHeight;
        var sbs = this.parent.children;
        var sb;
        for (var i = 0; i < sbs.length; i++) {
            sb = sbs[i];
            if (sb === this) break;
            offsetY += sb.offsetHeight;
        }
        return offsetY;
    }
});


Object.defineProperty(CTCollapsibleNode.prototype, 'minWidth', {
    get: function () {
        var res = 50 + 8;//padding
        res += 14;//tg icon
        res += 7;//text margin
        res += Math.ceil((0,utils.measureText)(this.text, '14px arial').width);

        var countWidth = 0;
        if (this.count) {
            countWidth = (0,utils.measureText)(this.count + '', '14px arial').width + 10;//padding 5
            countWidth = Math.ceil(countWidth);
            countWidth = Math.max(countWidth, 20);//min-width
            countWidth += 5; //margin
        }
        if (this.icon) res += 21;
        res += countWidth;
        res = this.children.reduce((ac, cr) => Math.max(ac, cr.minWidth), res);
        this.domElt.attr('data-min-width', res + '');
        return res;
    }
});

/**
 *
 * @param {CTNNode|CTCollapsibleNode} parent
 * @param data
 * @constructor
 */
function CTNNode(parent, data) {
    this.parent = parent;
    this.nodeByValue = parent.nodeByValue;
    this.root = parent.root;
    this.level = parent.level + 1;

    this.children = [];
    this.domElt = (0,ACore._)({
        class: 'as-ctn-node',
        style: { '--level': this.level + '' },
        child: [
            {
                class: 'as-ctn-node-content',
                child: [
                    'toggler-ico',
                    {
                        class: 'as-ctn-icon-ctn'
                    },
                    {
                        tag: 'span',
                        class: 'as-ctn-text',
                        child: {
                            text: ''
                        }
                    },
                    {
                        tag: 'span',
                        class: 'as-ctn-count',
                        style: {
                            display: 'none'
                        },
                        child: { text: '' }
                    },
                    '.as-ctn-right'
                ]
            },
            {
                class: 'as-ctn-node-children-ctn'
            }
        ]
    });
    this.$content = (0,ACore.$)('.as-ctn-node-content', this.domElt);
    this.$toggler = (0,ACore.$)('toggler-ico', this.domElt);
    this.$content.on('click', this.ev_click.bind(this));
    this.$childrenCtn = (0,ACore.$)('.as-ctn-node-children-ctn', this.domElt);
    this.$iconCtn = (0,ACore.$)('.as-ctn-icon-ctn', this.domElt);
    this.$text = (0,ACore.$)('.as-ctn-text', this.domElt);
    this.$count = (0,ACore.$)('.as-ctn-count', this.domElt);
    this.$right = (0,ACore.$)('.as-ctn-right', this.domElt);
    this.data = data;
}

//copy
['status', 'offsetHeight', 'childrenHeight', 'offsetY', 'select',
    'text', 'count', 'countDesc','icon', 'value', 'data', 'items', 'actions', 'remove', 'ev_click', 'color'].forEach(method => {
    Object.defineProperty(CTNNode.prototype, method, Object.getOwnPropertyDescriptor(CTCollapsibleNode.prototype, method));
});


Object.defineProperty(CTNNode.prototype, 'minWidth', {
    get: function () {
        var res = this.level * 25 - 20 + 10;//padding
        res += 14;//tg icon
        res += 7;//text margin
        res += Math.ceil((0,utils.measureText)(this.text, '14px arial').width);
        this.domElt.attr('data-text-width', Math.ceil((0,utils.measureText)(this.text, '14px arial').width))
        var countWidth = 0;
        if (this.count) {
            countWidth = (0,utils.measureText)(this.count + '', '14px arial').width + 10;//padding 5
            countWidth = Math.ceil(countWidth);
            countWidth = Math.max(countWidth, 20);//min-width
            countWidth += 5; //margin-left
        }
        res += countWidth;
        this.domElt.attr('data-local-min-width', res + '');

        res = this.children.reduce((ac, cr) => Math.max(ac, cr.minWidth), res);
        this.domElt.attr('data-min-width', res + '');

        return res;
    }
});


Object.defineProperty(CTNNode.prototype, 'contentHeight', {
    get: function () {
        return NODE_CONTENT_HEIGHT;
    }
});

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/NotificationPanel.js
var NotificationPanel = __webpack_require__(7570);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/pickinglist.css
var pickinglist = __webpack_require__(3316);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PickingList.js





/**
 * @extends AElement
 * @constructor
 */
function PickingList() {
    this._items = [];
    this._values = [];

    /**
     * @type {PLItem[]}
     */
    this.$items = [];

    /**
     * @type {any[]}
     * @name values
     * @memberOf PickingList#
     */

    /**
     * @type {{text:string, value}[]}
     * @name items
     * @memberOf PickingList#
     */
}

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

PickingList.render = function () {
    return (0,ACore._)({
        class: 'as-picking-list',
        extendEvent: 'change',
        child: []
    })
};


PickingList.property = {};


PickingList.property.items = {
    set: function (items) {
        items = items || [];
        this._items = items;
        this.$items.forEach(function (item) {
            item.remove();
        });

        var valuedDict = this._values.reduce((ac, cr) => {
            ac[(0,utils.keyStringOf)(cr)] = true;
            return ac;
        }, {})

        this.$items = items.map(it => {
            var elt = (0,ACore._)({
                tag: PLItem,
                props: {
                    text: it.text + '',
                    value: it.value,
                    checked: valuedDict[(0,utils.keyStringOf)(it.value)]
                },
                on: {
                    click: () => {
                        elt.checked = !elt.checked;
                        this.emit('change', { target: this, type: 'change' }, this);
                    }
                }
            });

            return elt;
        });
        this.addChild(this.$items);
    },
    get: function () {
        return this._items;
    }
};

PickingList.property.values = {
    set: function (values) {
        this._values = values || [];
        var valuedDict = this._values.reduce((ac, cr) => {
            ac[(0,utils.keyStringOf)(cr)] = true;
            return ac;
        }, {});
        this.$items.forEach(function (item) {
            item.checked = !!valuedDict[(0,utils.keyStringOf)(item.value)];
        })
    },
    get: function () {
        return this.$items.reduce(function (ac, itemElt) {
            if (itemElt.checked) {
                ac.push(itemElt.value);
            }
            return ac;
        }, []);
    }
};

PickingList.property.selectedItems = {
    get: function () {
        var valuedDict = this._values.reduce((ac, cr) => {
            ac[(0,utils.keyStringOf)(cr)] = true;
            return ac;
        }, {});

        return (this._items || []).filter(it => valuedDict[(0,utils.keyStringOf)(it.value)]);
    }
};

/* harmony default export */ const js_PickingList = (PickingList);

ACore/* default.install */.Z.install(PickingList);

/**
 * @extends AElement
 * @constructor
 */
function PLItem() {
    this.$text = (0,ACore.$)('.as-picking-list-item-text', this);

}

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

PLItem.render = function () {
    return (0,ACore._)({
        class: 'as-picking-list-item',
        child: [
            {
                class: 'as-picking-list-item-text',
                child: { text: '' }
            },
            {
                class: 'as-picking-list-item-checked',
                child: 'span.mdi.mdi-check'
            }
        ]
    });
};

PLItem.property = {};

PLItem.property.text = {
    set: function (value) {
        this.$text.firstChild.data = value + '';
    },
    get: function () {
        return this.$text.firstChild.data;
    }
};

PLItem.property.value = {
    set: function (value) {
        this._value = value;
        this.attr('data-value', (0,utils.keyStringOf)(value));
    },
    get: function () {
        return this._value;
    }
};


PLItem.property.checked = {
    set: function (value) {
        if (value) {
            this.addClass('as-checked');
        }
        else {
            this.removeClass('as-checked');
        }
    },
    get: function () {
        return this.hasClass('as-checked');
    }
}

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/listcomparetool.css
var listcomparetool = __webpack_require__(3);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/cmdtool.css
var cmdtool = __webpack_require__(9144);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CMDTool.js













/**
 * @typedef {Object} CMDTabListNodeDeclaration
 * @property {"tab_list"} type
 * @property {CMDTabNodeDeclaration[]} children
 */

/**
 * @typedef {Object} CMDTabNodeDeclaration
 * @property {"tab"} type
 * @property {string} name
 * @property {CMDGrupX2NodeDeclaration[]|CMDgroup_x1NodeDeclaration[]} children
 */


/**
 * @typedef {Object} CMDGrupX2NodeDeclaration
 * @property {"group_x2"} type
 * @property {CMDGrupX2NodeDeclaration[]|CMDgroup_x1NodeDeclaration[]} children
 */


/**
 * @typedef {Object} CMDgroup_x1NodeDeclaration
 * @property {"group_x1"} type
 * @property {CMDGrupX2NodeDeclaration[]|CMDgroup_x1NodeDeclaration[]} children
 */

/**
 * @typedef {Object} CMDCommandNodeDeclaration
 * @property {"trigger"|"font"|"color"} type
 */


/**
 * @extends Fragment
 * @constructor
 */
function CMDTool() {
    Fragment/* default.call */.Z.call(this);
    this.$nodes = {};
    OOP/* default.drillProperty */.ZP.drillProperty(this, this, '$buttons', '$nodes');//adapt old version
    this.updateVisibility = this.updateVisibility.bind(this);
}

OOP/* default.mixClass */.ZP.mixClass(CMDTool, Fragment/* default */.Z);


CMDTool.prototype.onStart = function () {
    this.getView();
};

/**
 *
 * if param is empty, update all buttons
 */
CMDTool.prototype.updateVisibility = function (...args) {
    var delegate = this.delegate;
    if (!delegate) return;
    var keys = [];
    if (args.length === 0) {
        keys = Object.keys(this.$nodes).filter(k=>k !== 'undefined');//remove apt nodes
    }
    else {
        keys = args.reduce((ac, cr) => {
            if (Array.isArray(cr)) ac = ac.concat(cr);
            else if (typeof cr === "string") ac.push(cr);
            return ac;
        }, []);
    }

    keys.forEach((name) => {
        if (!this.$nodes[name]) return;
        var descriptor = delegate.getCmdDescriptor(name);
        if (!descriptor) return;
        this.updateNode(this.$nodes[name], descriptor);

    });
};

CMDTool.prototype.onResume = function () {
    this.updateVisibility();
};


CMDTool.prototype.getView = function () {
    if (this.$view) return this.$view;
    this.$view = (0,ACore._)({
        tag: 'bscroller',
        class: "as-form-cmd-tool",
    });

    this.refresh();
    return this.$view;
};

CMDTool.prototype.createNode = function (nd, par) {
    var handler;
    if (Array.isArray(nd)) {
        nd = { type: 'group_x2', children: nd };
        handler = this.cmdNodeHandlers[nd.type];
    }
    else if (typeof nd === "string") {
        nd = Object.assign({ name: nd, type: 'trigger' }, this.delegate.getCmdDescriptor(nd));
        if (typeof nd.desc === "function") {
            nd.desc = nd.desc.call(this.delegate);
        }
        handler = this.cmdNodeHandlers[nd.type];
    }
    else
        handler = this.cmdNodeHandlers[nd.type];


    var nodeElt = null;
    if (handler) {
        nodeElt = handler.create.call(this, nd, par);
        nodeElt.descriptor = nd;
        nodeElt.parentDescriptor = par;
        this.$nodes[nd.name] = nodeElt;
    }
    else {
        console.error("Not support node type: ", nd.type, nd);
    }

    return nodeElt;
};

CMDTool.prototype.updateNode = function (nodeElt, nd) {
    if (!nodeElt) return;
    nd = Object.assign({}, nodeElt.descriptor,{disabled: false}, nd);//default disabled = false
    if (typeof nd.desc === "function") {
        nd.desc = nd.desc.call(this.delegate);
    }
    nodeElt.descriptor = nd;
    var par = nodeElt.parentDescriptor;
    var handler = this.cmdNodeHandlers[nd.type];
    if (handler) {
        if (handler.update)
            handler.update.call(this, nd, par, nodeElt);
    }
    else {
        console.error("Not support node type: ", nd.type, nd);
    }
};


CMDTool.prototype.refresh = function () {
    var delegate = this.delegate;
    if (!delegate) return;
    this.getView();
    this.$view.clearChild();
    this.$nodes = {};
    var groupTree = delegate.getCmdGroupTree();

    var visit = (node) => {
        return this.createNode(node, null);
    }
    this.$view.addChild(visit(groupTree));
};


CMDTool.prototype.cmdNodeHandlers = {
    tab_list: {
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        create: function (nd, par) {
            var items = nd.children.map((ch, idx) => {
                return {
                    text: ch.name,
                    value: idx + ''
                };
            });
            if (!this.$tabBar) {
                this.$tabBar = (0,ACore._)({
                    tag: js_StaticTabbar,
                    style: {
                        display: 'inline-block',
                        fontSize: 12 / 0.7 + 'px',
                        marginBottom: '5px'
                    },
                    props: {
                        value: '0'
                    },
                    on: {
                        change: () => {
                            var idx = parseInt(this.$tabBar.value);
                            this.$frames.forEach((frame, i) => {
                                frame.addStyle('display', i === idx ? '' : 'none');
                            });
                            ResizeSystem/* default.updateUp */.Z.updateUp(this.$tabBar);
                        }
                    }
                });
                this.$tabBarCtn = (0,ACore._)({
                    style: {
                        textAlign: 'center',
                        backgroundColor: 'rgba(169, 169, 169, 0.15)'

                    },
                    child: [this.$tabBar]
                });
            }

            this.$tabBar.items = items;
            if (!items[this.$tabBar.value]) this.$tabBar.value = '0';
            if (!this.$tabList) {
                this.$tabList = (0,ACore._)({});
            }
            this.$tabList.clearChild();
            this.$tabList.addChild(this.$tabBarCtn);

            this.$frames = nd.children.map((ch, idx) => {
                return this.createNode(ch, nd).addStyle('display', idx + '' === this.$tabBar.value ? '' : 'none').addStyle('textAlign', 'left');
            });
            this.$tabList.addChild(this.$frames);
            return this.$tabList;
        },
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        update: function (nd, par) {

        }
    },
    tab: {
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        create: function (nd, par) {
            return (0,ACore._)({
                class: 'as-cmd-tool-tab',
                attr: {
                    'data-name': nd.name
                },
                child: (nd.children || []).map((ch) => {
                    return this.createNode(ch, nd);
                })
            });
        },
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        update: function (nd, par) {

        }
    },
    group_x2: {
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        create: function (nd, par) {
            return (0,ACore._)({
                class: 'as-cmd-tool-group-x2',
                child: (nd.children || []).map((ch) => {
                    return this.createNode(ch, nd);
                })
            });
        },
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        update: function (nd, par) {

        }
    },
    group_x1: {
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        create: function (nd, par) {
            return (0,ACore._)({});

        },
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        update: function (nd, par) {

        }
    },
    trigger: {
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         */
        create: function (nd, par) {
            var extClasses = (!par || ['array', 'group_x2'].indexOf(par.type) >= 0) ? ['as-big'] : [];
            var title = nd.desc;
            var btn = (0,ACore._)({
                tag: RibbonButton/* default */.Z,
                class: extClasses,
                attr: { title: title, 'data-cmd-name': nd.name },
                props: {
                    disabled: !!nd.disabled,
                    descriptor: nd,
                    text: nd.desc,
                    icon: nd.icon,
                },
                on: {
                    click: () => {
                        this.execCmd.apply(this, [nd.name].concat(btn.descriptor.args || []));
                    }
                }
            });
            this.$nodes[nd.name] = btn;

            return btn;
        },
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         * @param nodeElt
         */
        update: function (nd, par, nodeElt) {
            nodeElt.disabled = !!nd.disabled;
            nodeElt.text = nd.desc;
            nodeElt.icon = nd.icon;
        }
    },
    toggle_switch: {
        /**
         * @this {CMDTool}
         */
        create: function (nd, par) {
            var name = nd.name;
            var self = this;
            var title = nd.desc;
            var btn = (0,ACore._)({
                tag: RibbonButton/* default */.Z,
                class: ['as-type-toggle-switch', 'as-big'],
                attr: {
                    title: title,
                    'data-group': nd.group,
                    "data-name": name,
                    'data-cmd-name': name
                },
                props: {
                    text: nd.desc,
                    icon: nd.icon,
                    disabled: !!nd.disabled,
                    descriptor: nd
                },
                on: {
                    click: function () {
                        var newChecked = !this.hasClass('as-checked');
                        if (newChecked && nd.group)
                            Object.keys(self.$nodes).forEach(function (otherName) {
                                var otherBtn = self.$nodes[otherName];
                                if (otherName === name) return;
                                if (otherBtn.hasClass('as-type-toggle-switch')
                                    && otherBtn.descriptor.group === nd.group
                                    && otherBtn.hasClass('as-checked')) {
                                    otherBtn.removeClass('as-checked');
                                    self.execCmd.apply(self, [otherBtn.attr('data-name'), false].concat(otherBtn.descriptor.args || []));
                                }
                            });
                        if (newChecked) {
                            this.addClass('as-checked');
                        }
                        else {
                            this.removeClass('as-checked');
                        }
                        self.execCmd.apply(self, [name, newChecked].concat(nd.args || []));
                    }
                }
            });
            if (nd.checked)
                btn.addClass('as-checked');
            return btn;
        },
        /**
         * @this {CMDTool}
         * @param nd
         * @param par
         * @param nodeElt
         */
        update: function (nd, par, nodeElt) {
            if (nd.checked)
                nodeElt.addClass('as-checked');
            else {
                nodeElt.removeClass('as-checked');
            }
            nodeElt.disabled = !!nd.disabled;
            nodeElt.text = nd.desc;
            nodeElt.icon = nd.icon;
        }
    },
    ribbon: {
        create: function (nd, par) {
            var name = nd.name;
            var self = this;
            var btn = (0,ACore._)({
                tag: RibbonButton/* default.tag */.Z.tag,
                class: 'as-big',
                attr: {
                    'data-cmd-name': name
                },
                props: {
                    icon: nd.icon || nd.items[0].icon,
                    items: nd.items,
                    descriptor: nd,
                    disabled: !!nd.disabled,
                    text: nd.desc
                },
                on: {
                    select: function (event) {
                        //select a item in menu
                        var item = event.item;
                        this.icon = item.icon;
                        self.execCmd.apply(self, [name].concat(item.args || []).concat(this.descriptor.args || []));
                    },

                }
            });
            return btn;
        },
        update: function (nd, par, nodeElt) {
            nodeElt.items = nd.items;
        }
    },
    color: {
        create: function (nd, par) {
            var name = nd.name;
            var btn = (0,ACore._)({
                tag: RibbonButton/* default */.Z,
                class: ['as-big', 'as-type-color'],
                style: {
                    '--value': nd.value || 'black'
                },
                props: {
                    icon: nd.icon,
                    descriptor: nd,
                    text: nd.desc,
                }
            });


            btn.on('click', () => {
                if (btn.hasClass('as-checked')) return;
                btn.addClass('as-checked');
                var onClickOut = (event) => {
                    if ((0,EventEmitter/* hitElement */.EY)(picker, event)) return;
                    finish();
                }
                var finish = () => {
                    btn.removeClass('as-checked');
                    picker.remove();
                    document.removeEventListener('click', onClickOut);
                };

                setTimeout(() => {
                    document.addEventListener('click', onClickOut);
                }, 100)

                var applyValue = value => {
                    btn.addStyle('--value', value.toString('hex6'));
                    //todo: call cmd
                    this.execCmd(name, value);
                }

                var picker = (0,ACore._)({
                    tag: colorpicker_SolidColorPicker,
                    style: {
                        position: 'fixed',
                        left: '0px',
                        top: '0px',
                        zIndex: (0,utils.findMaxZIndex)(btn) + 1 + '',
                        visibility: 'hidden'
                    },
                    props: {
                        value: nd.value || 'black'
                    }
                }).addTo(document.body);

                var pickerBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(picker.getBoundingClientRect());
                var btnBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(btn.getBoundingClientRect());
                var screenSize = (0,Dom/* getScreenSize */.tE)();
                var screenBound = new Rectangle/* default */.Z(0, 0, screenSize.width, screenSize.height);
                var aBounds = [
                    new Rectangle/* default */.Z(btnBound.x, btnBound.y + btnBound.height,
                        pickerBound.width, pickerBound.height),
                    new Rectangle/* default */.Z(btnBound.x + btnBound.width - pickerBound.width, btnBound.y + btnBound.height, pickerBound.width, pickerBound.height),
                    new Rectangle/* default */.Z(btnBound.x, btnBound.y - pickerBound.height, pickerBound.width, pickerBound.height),
                    new Rectangle/* default */.Z(btnBound.x + btnBound.width - pickerBound.width, btnBound.y - pickerBound.height, pickerBound.width, pickerBound.height)
                ];

                var bestSquare = 0;
                var bestBound;
                var square;
                for (var i = 0; i < aBounds.length; ++i) {
                    square = aBounds[i].collapsedSquare(screenBound);
                    if (square > bestSquare) {
                        bestSquare = square;
                        bestBound = aBounds[i];
                    }
                }

                picker.addStyle({
                    left: bestBound.x + 'px',
                    top: bestBound.y + 'px',
                    visibility: 'visible'
                });

                picker.on('change', (event) => {
                    applyValue(picker.value);
                });
                picker.on('submit', (event) => {
                    finish();
                });
            });
            return btn;
        },
        update: function (nd, par, nodeElt) {
            nodeElt.addStyle('--value', nd.value || 'black');
        }
    },
    font: {
        create: function (nd, par) {
            var btn = (0,ACore._)({
                tag: RibbonButton/* default */.Z,
                props: {
                    icon: nd.icon,
                    text: nd.desc,
                }
            });

            return btn;
        },
        update: function (nd, par, nodeElt) {

        }
    }
};


CMDTool.prototype.execCmd = function () {
    if (this._delegate)
        this._delegate.execCmd.apply(this._delegate, arguments);
};




Object.defineProperty(CMDTool.prototype, 'delegate', {
    /**
     *
     * @param {CMDToolDelegate} value
     */
    set: function (value) {
        if (this._delegate) {
            this._delegate.cmdToolPartner = null;
        }
        this._delegate = value;
        if (this._delegate) {
            this._delegate.cmdToolPartner = this;
        }

    },
    get: function () {
        return this._delegate;
    }
});


/* harmony default export */ const js_CMDTool = (CMDTool);


function CMDToolDelegate() {
    /**
     *
     * @type {null|CMDTool}
     */
    this.cmdToolPartner = null;
    /**
     * @type {null|CMDRunner}
     * @name cmdRunner
     * @memberOf CMDToolDelegate#
     */
}

/**
 *
 * @returns {*[]}
 */
CMDToolDelegate.prototype.getCmdGroupTree = function () {
    return [];
};

/**
 *
 * @param name
 * @returns {{type: string, icon: string, desc}} - return default descriptor
 */
CMDToolDelegate.prototype.getCmdDescriptor = function (name) {
    return {
        type: 'trigger',
        icon: 'span.mdi.mdi-command',
        desc: name
    };
};

CMDToolDelegate.prototype.execCmd = function (name, ...args) {
    if (this.cmdRunner)
        return this.cmdRunner.invoke(name, ...args);
};

CMDToolDelegate.prototype.refresh = function () {
    if (this.cmdToolPartner)
        this.cmdToolPartner.refresh();
};

CMDToolDelegate.prototype.updateVisibility = function (...args) {
    if (this.cmdToolPartner)
        this.cmdToolPartner.updateVisibility(...args);
};


;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ListCompareTool.js













var ListCompareTool_g = Svg/* default.ShareInstance._ */.ZP.ShareInstance._;

/**
 * @typedef ListCompareToolItem
 * @property {string} text
 * @property {string} value
 * @property {string} [icon] - mdi icon or map from tag in form
 */

/**
 * @extends {AElement}
 * @constructor
 */
function ListCompareTool() {
    this.$header = (0,ACore.$)('.as-list-compare-tool-header', this);

    this.$before = (0,ACore.$)('.as-list-compare-tool-before', this);
    this.$after = (0,ACore.$)('.as-list-compare-tool-after', this);
    this.beforeCtrl = new LCTListController(this, this.$before);
    this.afterCtrl = new LCTListController(this, this.$after);
    this.$attachhook = (0,ACore._)('attachhook').addTo(this);
    this.$body = (0,ACore.$)('.as-list-compare-tool-body', this);
    this.$attachhook.on('attached', () => {
        ResizeSystem/* default.add */.Z.add(this.$attachhook);
        this.$attachhook.requestUpdateSize();
    });

    this.$attachhook.requestUpdateSize = this.requestUpdateSize.bind(this);

    this.$operators = (0,ACore.$)('.as-list-compare-tool-operators', this);
    this.mapOperatorCtr = new LCTMapOperatorController(this);
    this.headerCtr = new LCTHeaderController(this);
    this.newLineTool = new LCTNewLineTool(this);
    this.removeLineTool = new LCTRemoveLineTool(this);
    this.cmdTool = new js_CMDTool();
    this.cmdDelegate = new LCTCommandDelegate(this);
    this.cmdTool.delegate = this.cmdDelegate;
    this.$header.addChildAfter(this.cmdTool.getView(), null);
    this.layoutCtr = new LCTLayoutController(this);
    (0,OOP/* drillProperty */.pj)(this, this.mapOperatorCtr, 'mapOperators');
    (0,OOP/* drillProperty */.pj)(this, this.beforeCtrl, 'beforeItems', 'items');
    (0,OOP/* drillProperty */.pj)(this, this.afterCtrl, 'afterItems', 'items');

    /**
     * @type {ListCompareToolItem[]}
     * @memberOf ListCompareTool#
     * @name beforeItems
     */

    /**
     * @type {ListCompareToolItem[]}
     * @memberOf ListCompareTool#
     * @name afterItems
     */

    /**
     * @type {mapOperators[]}
     * @memberOf ListCompareTool#
     * @name afterItems
     */
}

ListCompareTool.tag = 'ListCompareTool';

ListCompareTool.render = function () {
    return (0,ACore._)({
        extendEvent: 'change',
        attr: {
            tabindex: 1
        },
        class: ['as-list-compare-tool', 'as-width-auto', 'as-height-auto', 'as-max-height-auto'],
        child: [
            {
                class: 'as-list-compare-tool-header',
                child: [
                    {
                        class: 'as-list-compare-tool-check-ctn',
                        child: [

                            {
                                tag: js_CheckBox,
                                class: 'as-list-compare-tool-changed-only-checkbox',
                                props: {
                                    text: 'Chỉ hiện phần thay đổi',
                                    checked: false
                                }
                            }
                        ]
                    },
                ]
            },
            {
                class: 'as-list-compare-tool-body',
                child: [
                    '.as-list-compare-tool-before-title',
                    '.as-list-compare-tool-after-title',
                    {
                        class: ['as-list-compare-tool-before', 'as-bscroller'],
                    },
                    {
                        class: 'as-list-compare-tool-spacing',
                    },
                    {
                        class: ['as-list-compare-tool-after', 'as-bscroller'],
                    },
                    {
                        class: 'as-list-compare-tool-operators',
                        child: ListCompareTool_g({
                            tag: 'svg',
                            child: [
                                {
                                    tag: 'defs',
                                    child: [
                                        {
                                            tag: 'marker',
                                            class: 'as-lct-arrow',
                                            attr: {
                                                id: 'arrow',
                                                markerWidth: '3',
                                                markerHeight: '8',
                                                orient: 'auto',
                                                refX: '4.1',
                                                refY: '4'
                                            },
                                            child: {
                                                tag: 'path',
                                                attr: { d: 'M0,0 V8 L4,4 Z' },
                                                style: { fill: 'var(--line-color)' }
                                            }
                                        },
                                        {
                                            tag: 'marker',
                                            class: 'as-lct-same-value-arrow',
                                            attr: {
                                                id: 'same-value-arrow',
                                                markerWidth: '3',
                                                markerHeight: '8',
                                                orient: 'auto',
                                                refX: '4.1',
                                                refY: '4'
                                            },
                                            child: {
                                                tag: 'path',
                                                attr: { d: 'M0,0 V8 L4,4 Z' },
                                                style: { fill: 'var(--line-color)' }
                                            }
                                        },
                                        {
                                            tag: 'marker',
                                            class: 'as-lct-new-line-arrow',
                                            attr: {
                                                id: 'new-line-arrow',
                                                markerWidth: '3',
                                                markerHeight: '8',
                                                orient: 'auto',
                                                refX: '4.1',
                                                refY: '4'
                                            },
                                            child: {
                                                tag: 'path',
                                                attr: { d: 'M0,0 V8 L4,4 Z' },
                                                style: { fill: 'var(--line-color)' }
                                            }
                                        }
                                    ]
                                }
                            ]
                        })
                    },
                ]
            }
        ]
    });
};


ListCompareTool.property = {};


ListCompareTool.property.unchangeText = {
    set: function (text) {

    },
    get: function () {

    }
};


ListCompareTool.property.changeText = {
    set: function (text) {

    },
    get: function () {

    }
};


ListCompareTool.prototype.commands = {
    newLineTool: {
        /**
         * @this {ListCompareTool}
         */
        exec: function () {
            setTimeout(() => {
                this.removeLineTool.disable(true);
                this.newLineTool.disable(false);
                this.cmdDelegate.updateVisibility();
            });
        },
        descriptor: {
            type: 'toggle_switch',
            icon: 'span.mdi.mdi-pencil-plus',
            desc: () => 'Vẽ đường nối'
        }
    },
    removeLineTool: {
        exec: function () {
            setTimeout(() => {
                this.newLineTool.disable(true);
                this.removeLineTool.disable(false);
                this.cmdDelegate.updateVisibility();
            });
        },
        descriptor: {
            type: 'toggle_switch',
            icon: 'span.mdi.mdi-eraser',
            desc: () => 'Xóa đường nối'
        }
    }
};

ListCompareTool.prototype.requestUpdateSize = function () {
    this.layoutCtr.onSizeChange();
    this.mapOperatorCtr.updateStyleValues();
    this.mapOperatorCtr.updatePosition();
};

ListCompareTool.prototype.notifyChange = function () {
    this.emit('change', {type: 'change', target: this}, this);
};

/* harmony default export */ const js_ListCompareTool = (ListCompareTool);
ACore/* default.install */.Z.install(ListCompareTool);

/**
 * @extends CMDToolDelegate
 * @param {ListCompareTool} elt
 * @constructor
 */
function LCTCommandDelegate(elt) {
    CMDToolDelegate.call(this);
    this.elt = elt;
}

(0,OOP/* mixClass */.Jx)(LCTCommandDelegate, CMDToolDelegate);

LCTCommandDelegate.prototype.getCmdGroupTree = function () {
    return ['newLineTool', 'removeLineTool'];
};

LCTCommandDelegate.prototype.getCmdDescriptor = function (name) {
    if (name === 'undefined') console.trace(1)
    var res = Object.assign(this.elt.commands[name].descriptor);
    if (name === 'newLineTool') {
        res.checked = this.elt.newLineTool.state !== this.elt.newLineTool.ST_DISABLED;
    }
    else if (name === 'removeLineTool') {
        res.checked = this.elt.removeLineTool.state !== this.elt.newLineTool.ST_DISABLED;
    }
    return res;
}

LCTCommandDelegate.prototype.execCmd = function (name, ...args) {
    var cmd = this.elt.commands[name];
    if (!cmd) return;
    cmd.exec.call(this.elt, args);
}

function LCTMapOperatorController(elt) {
    this.elt = elt;
    this.$ctn = (0,ACore.$)('.as-list-compare-tool-operators', this.elt);
    this.$canvas = (0,ACore.$)('svg', this.$ctn);
    this._mapOperators = [];
    /**
     *
     * @type {LCTMapLine[]}
     */
    this.mapLines = [];
}

LCTMapOperatorController.prototype.updateStyleValues = function () {
    var bound = this.$ctn.getBoundingClientRect();
    this.$canvas.attr('viewBox', '-0.5 -0.5 ' + bound.width + ' ' + bound.height)
        .attr('width', bound.width)
        .attr('height', bound.height);
};

LCTMapOperatorController.prototype.updatePosition = function () {
    this.mapLines.forEach(line => {
        line.updatePosition();
    })
};

LCTMapOperatorController.prototype.updateModifiedItems = function () {
    var mappedValues = this.mapLines.reduce((ac, cr) => {
        if (cr.beforeValue === cr.afterValue) return ac;
        ac[(0,utils.keyStringOf)(cr.beforeValue)] = true;
        ac[(0,utils.keyStringOf)(cr.afterValue)] = true;
        return ac;
    }, {});

    this.elt.beforeCtrl.$items.forEach(it => {
        if (mappedValues[(0,utils.keyStringOf)(it.value)]) {
            it.addClass('as-mapped');
        }
        else {
            it.removeClass('as-mapped');
        }
        if (this.elt.afterCtrl.hasValue(it.value)) {
            it.removeClass('as-removed');
        }
        else {
            it.addClass('as-removed');
        }
    });

    this.elt.afterCtrl.$items.forEach(it => {
        if (mappedValues[(0,utils.keyStringOf)(it.value)]) {
            it.addClass('as-mapped');
        }
        else {
            it.removeClass('as-mapped');
        }
        if (this.elt.beforeCtrl.hasValue(it.value)) {
            it.removeClass('as-added');
        }
        else {
            it.addClass('as-added');
        }
    });
};

LCTMapOperatorController.prototype.addNewMapOp = function (beforeValue, afterValue) {
    if (!this.elt.beforeCtrl.hasValue(beforeValue) || !this.elt.afterCtrl.hasValue(afterValue)) return;
    this.mapLines = this.mapLines.filter(it => {
        if (it.beforeValue === beforeValue || it.afterValue === afterValue) {
            it.remove();
            return false;
        }
        return true;
    });
    var line = new LCTMapLine(this.elt, beforeValue, afterValue);
    this.mapLines.push(line);
    this._mapOperators = this.mapLines.filter(it => it.beforeValue !== it.afterValue).map(it => it.exportData());//save
    this.updateModifiedItems();
    this.updateStyleValues();
    this.updatePosition();
};

LCTMapOperatorController.prototype.removeLine = function (line) {
    if (line.beforeValue === line.afterValue) return;//view only line
    var idx = this.mapLines.indexOf(line);
    if (idx < 0) return;
    this.mapLines.splice(idx, 1);
    line.remove();
    var changedDict = this.mapLines.reduce((ac, it) => {
        ac[(0,utils.keyStringOf)(it.beforeValue)] = true;
        ac[(0,utils.keyStringOf)(it.afterValue)] = true;
        return ac;
    }, {});

    var u = line.beforeValue;
    var v = line.afterValue;
    if (this.elt.beforeCtrl.hasValue(u) && this.elt.afterCtrl.hasValue(u) && !changedDict[(0,utils.keyStringOf)(u)]) {
        line = new LCTMapLine(this.elt, u, u);
        this.mapLines.push(line);
    }

    if (this.elt.beforeCtrl.hasValue(v) && this.elt.afterCtrl.hasValue(v) && !changedDict[(0,utils.keyStringOf)(v)]) {
        line = new LCTMapLine(this.elt, v, v);
        this.mapLines.push(line);
    }

    this._mapOperators = this.mapLines.filter(it => it.beforeValue !== it.afterValue).map(it => it.exportData());//save
    this.updateModifiedItems();
    this.updateStyleValues();
    this.updatePosition();
};

LCTMapOperatorController.prototype.redrawMapLines = function () {
    this.mapLines.forEach(it => {
        it.remove();
    });
    this.mapLines = [];

    var beforeItems = this.elt.beforeCtrl.items;
    var changedDict = this._mapOperators.reduce((ac, it) => {
        ac[(0,utils.keyStringOf)(it.u)] = true;
        ac[(0,utils.keyStringOf)(it.v)] = true;
        return ac;
    }, {});

    beforeItems.forEach(it => {
        if (changedDict[(0,utils.keyStringOf)(it.value)]) return;
        if (this.elt.afterCtrl.hasValue(it.value)) {
            var line = new LCTMapLine(this.elt, it.value, it.value);
            this.mapLines.push(line);
        }
    });

    var addedOpts = {};
    this._mapOperators.forEach(it => {
        var key = (0,utils.keyStringOf)(it.u) + '|' + (0,utils.keyStringOf)(it.v);
        if (addedOpts[key]) return;
        addedOpts[key] = true;
        var line = new LCTMapLine(this.elt, it.u, it.v);
        this.mapLines.push(line);
    });
};

Object.defineProperty(LCTMapOperatorController.prototype, 'mapOperators', {
    set: function (operators) {
        if (!Array.isArray(operators)) operators = [];
        this._mapOperators = operators;
        this.redrawMapLines();
        this.updateModifiedItems();
    },
    get: function () {
        return this.mapLines.filter(it => it.beforeValue !== it.afterValue).map(it => it.exportData());

    }
});

/**
 *
 * @param {ListCompareTool} elt
 * @constructor
 */
function LCTHeaderController(elt) {
    this.elt = elt;
    this.ev_viewChange = this.ev_viewChange.bind(this);
    this.$changedOnly = (0,ACore.$)('.as-list-compare-tool-changed-only-checkbox', elt);
    this.$changedOnly.on('change', this.ev_viewChange);
}

LCTHeaderController.prototype.ev_viewChange = function () {
    if (this.$changedOnly.checked)
        this.elt.addClass('as-view-changed-only');
    else {
        this.elt.removeClass('as-view-changed-only');
    }
    this.elt.requestUpdateSize();
}

/**
 *
 * @param {ListCompareTool} elt
 * @param {AElement} ctnElt
 * @constructor
 */
function LCTListController(elt, ctnElt) {
    this.elt = elt;
    /**
     *
     * @type {AElement}
     */
    this.$ctn = ctnElt;
    this.$ctn.on('scroll', this.ev_scroll.bind(this));
    /**
     *
     * @type {LCTItem[]}
     */
    this.$items = [];
    this._items = [];
    this.$itemByValue = {};
}

LCTListController.prototype.updateStyleValues = function () {
    var minWidth = this.elt.beforeCtrl.$items.reduce((ac, it) => {
        return Math.max(ac, it.minWidth);
    }, 0);
    minWidth = this.elt.afterCtrl.$items.reduce((ac, it) => {
        return Math.max(ac, it.minWidth);
    }, minWidth);
    this.elt.addStyle('--item-min-width', minWidth + 'px');
};

LCTListController.prototype.itemEltOfValue = function (value) {
    return this.$itemByValue[(0,utils.keyStringOf)(value)] || null;
};

LCTListController.prototype.hasValue = function (value) {
    return !!this.$itemByValue[(0,utils.keyStringOf)(value)];
};

LCTListController.prototype.ev_scroll = function () {
    this.elt.mapOperatorCtr.updatePosition();
};

Object.defineProperty(LCTListController.prototype, 'items', {
    set: function (items) {
        items = items || [];
        this._items = items;
        this.$ctn.clearChild();
        this.$items = items.map(it => (0,ACore._)({
            tag: LCTItem,
            props: {
                text: it.text,
                value: it.value,
                icon: it.icon
            }
        }));
        this.$ctn.addChild(this.$items);
        this.$itemByValue = this.$items.reduce((ac, it) => {
            ac[(0,utils.keyStringOf)(it.value)] = it;
            return ac;
        }, {});
        this.updateStyleValues();
        this.elt.mapOperatorCtr.updateStyleValues();
        this.elt.mapOperatorCtr.updateModifiedItems();
        this.elt.mapOperatorCtr.redrawMapLines();
    },
    get: function () {
        return this._items;
    }
});

/**
 *
 * @param {ListCompareTool} elt
 * @constructor
 */
function LCTLayoutController(elt) {
    this.elt = elt;
    this._height = 'auto';
    this._maxHeight = 'auto';
}

LCTLayoutController.prototype.setHeight = function (height) {
    this._height = this.normalizeSizeValue(height);
    this.updateHeightStyle();
};

LCTLayoutController.prototype.setMaxHeight = function (maxHeight) {
    this._maxHeight = this.normalizeSizeValue(maxHeight);
    this.updateHeightStyle();
};

LCTLayoutController.prototype.normalizeSizeValue = function (value) {
    var parsed = (0,attribute.parseMeasureValue)(value);
    if (parsed) {
        value = parsed.value + parsed.unit;
    }
    else if (typeof value === "string") {
        if (value.indexOf('calc') < 0 && value.indexOf('var') < 0) {
            value = 'auto'
        }
    }
    else value = 'auto';
    return value;
};

LCTLayoutController.prototype.updateHeightStyle = function () {
    var height = this._height;
    var maxHeight = this._maxHeight;
    if (height === 'auto') {
        this.elt.style.removeProperty('--height');
        this.elt.addClass('as-height-auto');
    }
    else {
        this.elt.style.setProperty('--height', height);
        this.elt.removeClass('as-height-auto');
    }

    if (maxHeight === 'auto') {
        this.elt.style.removeProperty('--max-height');
        this.elt.addClass('as-max-height-auto');
    }
    else {
        this.elt.style.setProperty('--max-height', maxHeight);
        this.elt.removeClass('as-max-height-auto');
    }
};

LCTLayoutController.prototype.onSizeChange = function () {
    var style = getComputedStyle(this.elt);
    var maxHeight = style.getPropertyValue('max-height');
    if (maxHeight && maxHeight.indexOf('px') >= 0) {
        maxHeight = parseFloat(maxHeight.replace('px', ''));
        this.elt.addStyle('--list-max-height', maxHeight - 66 - 22 - 20 + 'px');
    }
    else {
        this.elt.removeStyle('--list-max-height');
    }
};

/**
 * @param {ListCompareTool} elt
 * @param beforeValue
 * @param afterValue
 * @constructor
 */
function LCTMapLine(elt, beforeValue, afterValue) {
    this.beforeValue = beforeValue;
    this.afterValue = afterValue;
    this.elt = elt;
    this.$line = ListCompareTool_g({
        tag: 'path',
        class: 'as-lct-line',
        attr: {
            'marker-end': "url(#arrow)"
        },
    });
    this.$hitBox = ListCompareTool_g({
        tag: 'path',
        class: 'as-lct-line-hit-box',

    });

    this.$group = ListCompareTool_g({
        tag: 'g',
        class: 'as-lct-line-group',
        child: [
            this.$line,
            this.$hitBox
        ]
    });
    this.$group.lctMapLine = this;

    this.elt.mapOperatorCtr.$canvas.addChild(this.$group);
    if (this.beforeValue === this.afterValue) {
        this.$group.addClass('as-same-value');
        this.$line.attr('marker-end', "url(#same-value-arrow)");
    }
}

LCTMapLine.prototype.exportData = function () {
    return {
        u: this.beforeValue,
        v: this.afterValue,
    }
};

LCTMapLine.prototype.updatePosition = function () {
    var beforeItemElt = this.elt.beforeCtrl.itemEltOfValue(this.beforeValue);
    var afterItemElt = this.elt.afterCtrl.itemEltOfValue(this.afterValue);
    if (!beforeItemElt || !afterItemElt) {
        this.$line.attr('d', null);
        return;
    }
    var beforeBound = beforeItemElt.getBoundingClientRect();
    if (!beforeBound.width) {
        this.$line.attr('d', null);
        this.$hitBox.attr('d', null);
        return;
    }
    var afterBound = afterItemElt.getBoundingClientRect();
    if (!afterBound.width) {
        this.$hitBox.attr('d', null);
        this.$line.attr('d', null);
        return;
    }

    var canvasBound = this.elt.mapOperatorCtr.$canvas.getBoundingClientRect();
    // if (canvasBound.top > beforeBound.bottom || canvasBound.bottom < beforeBound.top) {
    //     if (canvasBound.top > afterBound.bottom || canvasBound.bottom < afterBound.top) {
    //         this.$hitBox.attr('d', null);
    //         this.$line.attr('d', null);
    //         return;
    //     }
    // }
    var x, y;
    var canvasOffsetPoint = new Vec2/* default */.Z(canvasBound.left, canvasBound.top);
    x = beforeBound.right - 5;
    y = beforeBound.top + beforeBound.height / 2 - 1;//1 is border
    var startPoint = new Vec2/* default */.Z(x, y).sub(canvasOffsetPoint);
    x = afterBound.left + 5;
    y = afterBound.top + afterBound.height / 2 - 1;
    var endPoint = new Vec2/* default */.Z(x, y).sub(canvasOffsetPoint);
    var d = 'M' + startPoint.x + ' ' + startPoint.y + ' L' + endPoint.x + ' ' + endPoint.y;
    this.$line.attr('d', d);
    this.$hitBox.attr('d', d);
};

LCTMapLine.prototype.remove = function () {
    this.$group.remove();
};

/**
 *
 * @param {ListCompareTool} elt
 * @constructor
 */
function LCTNewLineTool(elt) {
    this.elt = elt;
    this.state = this.ST_NONE;
    for (var key in this) {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    }
    this.elt.on('click', this.ev_click);

    this.$beforeItem = null;
    this.$afterItem = null;

    this.$line = ListCompareTool_g({
        tag: 'path',
        class: ['as-lct-line', 'as-new-line'],
        attr: {
            'marker-end': "url(#new-line-arrow)"
        },
    });

    this.elt.mapOperatorCtr.$canvas.addChild(this.$line);
}

LCTNewLineTool.prototype.ST_DISABLED = 'DISABLED';
LCTNewLineTool.prototype.ST_NONE = 'NONE';
LCTNewLineTool.prototype.ST_STARTED = 'STATED';

LCTNewLineTool.prototype.disable = function (flag) {
    if (this.state === this.ST_NONE && flag) {
        this.state = this.ST_DISABLED;
    }
    else if (this.state === this.ST_DISABLED && !flag) {
        this.state = this.ST_NONE;
    }
}

LCTNewLineTool.prototype.findItemElt = function (elt) {
    while (elt) {
        if (elt.hasClass && elt.hasClass('as-lct-item')) {
            return elt;
        }
        elt = elt.parentElement;
    }
    return null;
}

LCTNewLineTool.prototype.isBeforeItemElt = function (elt) {
    return elt && elt.isDescendantOf(this.elt.beforeCtrl.$ctn);
};

LCTNewLineTool.prototype.ev_click = function (event) {
    var itemElt;
    if (this.state === this.ST_NONE) {
        itemElt = this.findItemElt(event.target);
        if (itemElt && (itemElt.hasClass('as-removed') || itemElt.hasClass('as-added'))) {
            if (this.isBeforeItemElt(itemElt)) {
                this.$beforeItem = itemElt;
            }
            else {
                this.$afterItem = itemElt;
            }
            itemElt.addClass('as-active');
            this.state = this.ST_STARTED;
            setTimeout(() => {
                document.addEventListener('click', this.ev_clickOut);
            }, 1);
            document.addEventListener('mousemove', this.ev_mouseMove);
        }
    }
    else if (this.state === this.ST_STARTED) {
        itemElt = this.findItemElt(event.target);
        if (itemElt && (itemElt.hasClass('as-removed') || itemElt.hasClass('as-added'))) {
            if (this.isBeforeItemElt(itemElt)) {
                if (this.$beforeItem) {
                    this.$beforeItem.removeClass('as-active');
                }
                if (this.$beforeItem === itemElt) {
                    this.$beforeItem = null;
                }
                else {
                    this.$beforeItem = itemElt;
                    itemElt.addClass('as-active');
                }
            }
            else {
                if (this.$afterItem) {
                    this.$afterItem.removeClass('as-active');
                }
                if (this.$afterItem === itemElt) {
                    this.$afterItem = null;
                }
                else {
                    this.$afterItem = itemElt;
                    itemElt.addClass('as-active');
                }
            }

            if (this.$beforeItem && this.$afterItem) {
                this.elt.mapOperatorCtr.addNewMapOp(this.$beforeItem.value, this.$afterItem.value);
                this.$beforeItem.removeClass('as-active');
                this.$afterItem.removeClass('as-active');
                this.state = this.ST_NONE;
                this.elt.notifyChange();
            }
            else if (!this.$beforeItem && !this.$afterItem) {
                this.state = this.ST_NONE;
            }
            else {
                this.$line.attr('d', null);
            }
        }
        else {

        }

        if (this.state === this.ST_NONE) {//finish
            this.$beforeItem = null;
            this.$afterItem = null;
            this.$line.attr('d', null);
            document.removeEventListener('click', this.ev_clickOut);
            document.removeEventListener('mousemove', this.ev_mouseMove);
        }
    }
};


LCTNewLineTool.prototype.ev_mouseMove = function (event) {
    if (this.state !== this.ST_STARTED) return;
    var currentPoint = new Vec2/* default */.Z(event.clientX, event.clientY);
    var startPoint;
    var endPoint;
    var canvasBound = this.elt.mapOperatorCtr.$canvas.getBoundingClientRect();
    var canvasOffsetPoint = new Vec2/* default */.Z(canvasBound.left, canvasBound.top);
    var itemBound;
    if (this.$beforeItem) {
        itemBound = this.$beforeItem.getBoundingClientRect();
        startPoint = new Vec2/* default */.Z(itemBound.right - 5, itemBound.top + itemBound.height / 2 - 1).sub(canvasOffsetPoint);
        endPoint = currentPoint.sub(canvasOffsetPoint);
    }
    else if (this.$afterItem) {
        itemBound = this.$afterItem.getBoundingClientRect();
        startPoint = currentPoint.sub(canvasOffsetPoint);
        endPoint = new Vec2/* default */.Z(itemBound.left + 5, itemBound.top + itemBound.height / 2 - 1).sub(canvasOffsetPoint);
    }
    this.$line.attr('d', 'M' + startPoint.x + ' ' + startPoint.y + ' L' + endPoint.x + ' ' + endPoint.y);
};

LCTNewLineTool.prototype.ev_clickOut = function (event) {
    var itemElt = this.findItemElt(event.target);
    if (itemElt && (itemElt.hasClass('as-removed') || itemElt.hasClass('as-added'))) return;
    if (this.$beforeItem) {
        this.$beforeItem.removeClass('as-active');
    }
    if (this.$afterItem) {
        this.$afterItem.removeClass('as-active');
    }
    this.$beforeItem = null;
    this.$afterItem = null;
    this.$line.attr('d', null);
    this.state = this.ST_NONE;
    document.removeEventListener('click', this.ev_clickOut);
    document.removeEventListener('mousemove', this.ev_mouseMove);
}

LCTNewLineTool.prototype.ev_keydown = function (event) {

};

function LCTRemoveLineTool(elt) {
    this.elt = elt;
    this.state = this.ST_DISABLED;
    this.$cursor = null;
    this.ev_mouseMove = this.ev_mouseMove.bind(this);
    this.ev_click = this.ev_click.bind(this);
    this.elt.mapOperatorCtr.$canvas.on('click', this.ev_click);

}

LCTRemoveLineTool.prototype.ST_DISABLED = 'DISABLED';
LCTRemoveLineTool.prototype.ST_NONE = 'NONE';

LCTRemoveLineTool.prototype.disable = function (flag) {
    if (this.state === this.ST_NONE && flag) {
        this.state = this.ST_DISABLED;
        this.elt.removeClass('as-remove-line-tool-active');
        this.$cursor.remove();
    }
    else if (this.state === this.ST_DISABLED && !flag) {
        this.state = this.ST_NONE;
        this.elt.addClass('as-remove-line-tool-active');
        this.$cursor = (0,ACore._)({
            class: 'as-lct-cursor',
            child: 'span.mdi.mdi-eraser'
        }).addTo(this.elt.$body);
        document.addEventListener('mousemove', this.ev_mouseMove);
    }
}


LCTRemoveLineTool.prototype.findMapLine = function (elt) {
    while (elt) {
        if (elt.lctMapLine) {
            return elt.lctMapLine;
        }
        elt = elt.parentElement;
    }
    return null;
}

LCTRemoveLineTool.prototype.ev_click = function (event) {
    if (this.state === this.ST_DISABLED) return;
    var line = this.findMapLine(event.target);
    if (line) {
        this.elt.mapOperatorCtr.removeLine(line);
        this.elt.notifyChange();
    }
};

LCTRemoveLineTool.prototype.ev_mouseMove = function (event) {
    var point = new Vec2/* default */.Z(event.clientX, event.clientY);
    var bodyBound = this.elt.$body.getBoundingClientRect();
    if (bodyBound.width === 0) {
        document.removeEventListener('mousemove', this.ev_mouseMove);//element is removed
    }
    point = point.sub(new Vec2/* default */.Z(bodyBound.left, bodyBound.top));
    this.$cursor.addStyle({
        left: point.x - 9 + 'px',
        top: point.y - 24 + 'px'
    });
};

LCTRemoveLineTool.prototype.ev_mouseDown = function (event) {

};


LCTRemoveLineTool.prototype.ev_mouseUp = function (event) {

};


/**
 * @extends {AElement}
 * @constructor
 */
function LCTItem() {
    this.$text = (0,ACore.$)('.as-lct-item-text', this);
    this.$iconCtn = (0,ACore.$)('.as-lct-item-icon-ctn', this);
    this._icon = null;

    /**
     * @name icon
     * @memberOf LCTItem#
     */
    /**
     * @type string
     * @name text
     * @memberOf LCTItem#
     */

    /**
     * @type any
     * @name value
     * @memberOf LCTItem#
     */

    /**
     * @type number
     * @name minWidth
     * @memberOf LCTItem#
     */
}

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

LCTItem.render = function () {
    return (0,ACore._)({
        class: 'as-lct-item',
        child: [
            {
                class: 'as-lct-item-icon-ctn',
            },
            {
                class: 'as-lct-item-text'
            }
        ]
    });
};


LCTItem.property = {};

LCTItem.property.text = {
    set: function (value) {
        value = value || '';
        value = value + '';
        this.$text.attr('data-text', value);
    },
    get: function () {
        return this.$text.attr('data-text');
    }
};

LCTItem.property.value = {
    set: function (value) {
        this._value = value;
        this.attr('data-value', value + '');
    },
    get: function () {
        return this._value;
    }
};

LCTItem.property.icon = {
    set: function (value) {
        value = value || '';
        this._icon = value;
        this.$iconCtn.clearChild();
        this.$icon = null;
        if (value) {
            if ((0,Dom/* isDomNode */.mV)(value)) {
                if (value.parentElement) value = value.cloneNode(true);
            }
            else value = (0,ACore._)(value);
            this.$icon = (0,ACore.$)(value).addClass('as-lct-icon');
            this.$iconCtn.addChild(this.$icon);
        }
    },
    get: function () {
        return this._icon;
    }
};

LCTItem.property.minWidth = {
    get: function () {
        var res = 25 + 10;
        res += TextMeasure/* default.measureWidth */.Z.measureWidth(this.text, TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14) + 20;
        return Math.ceil(res)
    }
};
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/dom/install.js




















































































































































































var publicCreators = [
    Icons/* MdiStoreMarkerOutline */.CY,
    js_AutoCompleteInput,
    BoardTable/* default */.ZP,
    Board/* default */.Z,
    js_BScroller,
    js_ButtonArray,
    js_ButtonRange,
    js_CalendarInput,
    OldCalendarInput,
    CheckBoxInput/* default */.Z,
    js_CheckBox,
    CheckboxButton/* default */.Z,
    js_CheckListItem,
    CheckListBox,
    js_CheckTreeLeafOnlyBox,
    ChromeCalendar/* default */.Z,
    js_ChromeTimePicker,
    js_ChromeTime24Picker,
    js_CircleSectionLabel,
    js_CountdownClock,
    js_CountdownText,
    js_CollapsibleTreeNavigator,
    js_DateInYearPicker,
    js_DateInYearInput,
    js_DateTimeInput,
    DropZone/* default */.Z,

    js_ExpressionInput,
    js_IdentTextInput,

    js_EmojiPickerTooltip,
    js_FileInputBox,
    js_FileListItem,
    js_FileListInput,
    Finder/* default */.ZP,
    FontFamilySelectList,
    js_FontInput,
    Scroller/* Scrollbar */.LW,
    Scroller/* VScrollbar */.eP,
    Scroller/* HScrollbar */.MP,
    Scroller/* VScroller */.k$,
    Scroller/* HScroller */.bJ,
    ContextMenu/* default */.Z,
    Menu/* HMenu */.ch,
    Menu/* VMenuItem */.zV,
    Menu/* VMenu */.T$,
    Menu/* Dropright */.KZ,
    Menu/* VMenuLine */.ee,
    Menu/* Dropdown */.Lt,
    Menu/* HMenuItem */.E,
    Menu/* VMenu */.T$,
    Menu/* VRootMenu */.p,
    Menu/* MenuButton */.j2,
    js_DateInput2,
    js_DateNLevelInput,
    Hanger/* default */.Z,
    js_DraggableHStack,
    js_DraggableVStack,
    js_DropPanel,
    js_DropPanelStack,
    js_EditableText,
    EmojiPicker/* default */.Z,
    js_EmojiCounter,
    js_EmojiCounterList,
    Sprite/* default */.ZP,
    ExpTree/* ExpNode */.$P,
    ExpTree/* default */.ZP,
    ExpTree/* ExpGroup */.uz,
    js_DVExpTree,
    FlexiconButton/* default */.Z,
    js_FlexiconInput,
    Follower/* default */.Z,
    js_FollowerToggler,
    js_Frame,
    js_FrameView,
    js_TabFrame,
    TabView/* default */.Z,
    js_SinglePage,
    js_HexaSectionLabel,
    js_VRuler,
    js_HRuler,
    js_IconSprite,
    js_LinearColorBar,
    js_LinearColorTinyBar,
    js_MediaInput,
    MessageInput/* default */.ZP,
    MessageInput/* MessageQuote */.RD,
    Modal/* default */.Z,
    js_LoadingCubeModal,
    numberinput_NumberInput,
    js_NumberSpanInput,
    OnsScreenWindow,
    OnScreenWidget/* default */.Z,
    js_PageIndicator,
    js_PageSelector,
    js_PreInput,
    ProgressBar/* default */.Z,
    js_ProgressCircle,
    js_QuickListButton,
    QuickMenu/* default */.Z,
    js_QuickPath,
    js_PathMenu,
    js_PathView,
    Radio/* default */.Z,
    RadioButton/* default */.Z,
    js_RadioInput,
    RibbonSplitButton/* default */.Z,
    RibbonButton/* default */.Z,
    js_SelectRibbonMenu,
    js_RotatedText,
    SelectList/* default */.ZP,
    js_RemoteSvg,
    ResizeBox/* default */.Z,
    Searcher/* default */.Z,
    js_SelectListBox,
    js_SelectTreeBox,
    SelectMenu2,
    js_SelectBox,
    js_MultiSelectMenu,
    js_MultiCheckTreeLeafBox,
    BrowserDetector/* default.isMobile */.Z.isMobile ? multichecktreeleafmenu_MultiCheckTreeLeafMenu : js_MultiCheckTreeLeafMenu,
    js_SelectBoxItem,

    js_DualSelectBox,
    BrowserDetector/* default.isMobile */.Z.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,
    TextArea2/* default */.Z,
    js_TextClipboard,
    js_TimeInput,
    js_Time24Input,
    js_TimeRange24Input,
    js_TimeSelectInput,
    js_TimePicker,
    js_DateTimeInput,
    Tooltip/* default */.Z,
    js_CopyableIconTooltip,
    Toast/* default */.Z,
    js_TreeList,
    js_TreeListItem,
    js_TokenField,
    WidthHeightSizer,
    js_TrackBar,
    js_TrackBarInput,
    Icons/* SpinnerIco */.i_,
    Icons/* ProcessOutlineIcon */.Vt,
    Icons/* ProcedureOutlineIcon */.V4,
    Icons/* ImportantOutlineIcon */.Bm,
    Icons/* EmojiMutedIcon */.Ty,
    VerticalTreeDiagramNode,
    js_VerticalTreeDiagram,
    js_MultiCheckMenu,
    js_CheckTreeItem,
    js_CheckTreeBox,
    js_MultiCheckTreeMenu,
    MessageDialog/* default */.Z,
    YesNoQuestionDialog/* default */.Z,
    js_TOCItem,
    js_TOCList,
    ckeditor_CKPlaceholder,
    ckeditor_CKInlineShortText,
    js_VerticalTimeline,
    WindowBox/* default */.Z,

    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_PickingList,

    js_TreeChart,
    js_TableOfTextInput,
    js_CompactDataGridEditor,

    MHeaderBar/* default */.Z,
    MExploreSectionBreak,
    MExploreItemBlock,
    MExploreGroup,
    MSpringboardMenu,

    colorpicker_SolidColorPicker,
    colorpicker_ColorPickerButton,
    ColorCell,
    SelectColorSchemeMenu/* default */.ZP,

    NotificationPanel/* MNPNotificationVirtualDropdown */.FW,
    NotificationPanel/* NPDropdownButton */.sP,
    NotificationPanel/* default */.ZP,
    NotificationPanel/* NPSection */.PL,
    NotificationPanel/* NPItem */.Ee,
    NotificationPanel/* NPList */.Bd,
    js_ListCompareTool
];

/***
 *
 * @param {Dom} core
 */
function install(core) {
    core.install(publicCreators);
    core.install('checkboxbutton', CheckBoxInput/* default */.Z);
    core.install('selectbox', js_MultiSelectMenu);
    if (BrowserDetector/* default.isMobile */.Z.isMobile) {
        core.install('selectmenu', selectmenu_MSelectMenu);
        core.install('mselectmenu', selectmenu_MSelectMenu);
        // core.install('selecttreemenu', MSelectTreeMenu)
    }
    // core.install('mselectmenu', SelectMenu2);
    core.install('mselecttreemenu', js_SelectTreeMenu)

    core.install('MSelectTreeLeafMenu'.toLowerCase(), js_SelectTreeLeafMenu);
    core.install('MMultiCheckTreeMenu'.toLowerCase(), js_MultiCheckTreeMenu);
    core.install('MMultiCheckTreeLeafMenu'.toLowerCase(), js_MultiCheckTreeLeafMenu);
    core.install('mknav', js_MKNavigator);

}

/* harmony default export */ const dom_install = (install);

/***/ }),

/***/ 8556:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Vm": () => (/* binding */ FinderFileSystem),
  "ZP": () => (/* binding */ finder_Finder)
});

// UNUSED EXPORTS: FinderCommands

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/finder.css
var finder = __webpack_require__(5277);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mobileapp.css
var mobileapp = __webpack_require__(8789);
// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(3855);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js
var ResizeSystem = __webpack_require__(6700);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/FlexiconButton.js
var FlexiconButton = __webpack_require__(3929);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ExpTree.js
var ExpTree = __webpack_require__(2917);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/messageinput/MessageInput.js + 2 modules
var MessageInput = __webpack_require__(4877);
// EXTERNAL MODULE: ./node_modules/absol/src/Converter/ext2MineType.js
var ext2MineType = __webpack_require__(9691);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/utils.js
var utils = __webpack_require__(1477);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/random.js
var random = __webpack_require__(7848);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate = __webpack_require__(1334);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js
var EventEmitter = __webpack_require__(863);
;// 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 = (0,stringGenerate.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(error => 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) {
    EventEmitter/* default.call */.ZP.call(this);
    opt = opt || {};
    this.limit = ((typeof opt.limit === "number") && opt.limit >= 1) ? opt.limit : Infinity;

    this.pendingTasks = [];
    this.runningTasks = [];
}

OOP/* default.mixClass */.ZP.mixClass(TaskManager, EventEmitter/* default */.ZP);

/***
 *
 * @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 }, 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 }, 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 }, 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 }, this);
    task.begin();
    return task;
};


/* harmony default export */ const AppPattern_TaskManager = (TaskManager);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Modal.js
var Modal = __webpack_require__(9826);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/MessageDialog.js
var MessageDialog = __webpack_require__(3488);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Hanger.js
var Hanger = __webpack_require__(655);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Vec2.js
var Vec2 = __webpack_require__(557);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Rectangle.js
var Rectangle = __webpack_require__(2759);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/WindowBox.js
var WindowBox = __webpack_require__(774);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/FileSaver.js
var FileSaver = __webpack_require__(5447);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/DropZone.js
var DropZone = __webpack_require__(1577);
// EXTERNAL MODULE: ./node_modules/absol/src/Detector/BrowserDetector.js
var BrowserDetector = __webpack_require__(9399);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ContextMenu.js
var ContextMenu = __webpack_require__(7054);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TextArea2.js
var TextArea2 = __webpack_require__(5789);
// EXTERNAL MODULE: ./node_modules/absol-acomp/assets/exticons/catalog.json
var catalog = __webpack_require__(2398);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/finder/FileThumbnail.js





var thumbnailCache = {};

var dbSync;
var getDb = () => {
    dbSync = dbSync || new Promise((resolve) => {
        var request = window.indexedDB.open('FileThumbnailDB', 1);
        request.onupgradeneeded = (event) => {
            var db = event.target.result
            db.createObjectStore("files", {});
        };
        request.onsuccess = (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 = () => {
                    resolve(db);
                }
                request1.onerror = () => {
                    resolve(null);
                }
            }
            else
                resolve(db);
        }
        request.onerror = () => {
            resolve(null);
        }
    });
    return dbSync;
}

var dbGetItem = (key) => {
    return getDb().then(db => {
        if (!db) return null;
        var request = db.transaction('files').objectStore('files').get(key);
        return new Promise(resolve => {
            request.onsuccess = (event) => {
                var data = event.target.result;
                resolve(data);
            };
            request.onerror = () => {
                resolve(null);
            }
        })
    });
};

var dbSetItem = (key, value) => {
    return getDb().then(db => {
        if (!db) return null;
        var objectStore = db.transaction('files', 'readwrite').objectStore('files');
        var request = objectStore.put(value, key);
        return new Promise(resolve => {
            request.onsuccess = (event) => {
                var data = event.target.result;
                resolve(data);
            };
            request.onerror = () => {
                resolve(null);
            }
        });
    });
};

document.addEventListener('keydown', (event) => {
    if (event.ctrlKey && event.key === 'F5') {
        localStorage.setItem('FileThumbnail_clear_cache', '1');
    }
});


var url2small = url => {
    return new Promise(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 = url => {
    if (!thumbnailCache[url]) {
        thumbnailCache[url] = dbGetItem(url).then(result => {
            if (!result) {
                result = url2small(url).then(canvasResult => {
                    if (canvasResult) dbSetItem(url, canvasResult);
                    return canvasResult;
                });
            }
            return result;
        });
    }
    return thumbnailCache[url];
};


function FileThumbnail() {
    this._value = null;
    this.$fileName = (0,ACore.$)('.as-file-thumbnail-file-name', this);
    this.$bg = (0,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 (0,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(txt => {
        return (0,ACore._)({ tag: 'span', child: { text: txt } });
    });
    this.$fileName.clearChild().addChild(parts);
};

FileThumbnail.prototype._updateThumbnail = function () {
    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(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.indexOf(fileType) >= 0) {
        previewUrl = MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/' + fileType + '.svg';
    }
    else {
        previewUrl = MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/' + 'blank' + '.svg';
    }

    if (previewUrl) {
        this.$bg.addStyle('backgroundImage', 'url("' + encodeURI(previewUrl) + '")');
    }
    else {
        this.$bg.removeStyle('backgroundImage');
    }
}


FileThumbnail.property = {};

FileThumbnail.property.value = {
    set: function (value) {
        value = value || null;
        this._value = value;
        this._valueInfo = (0,utils.fileInfoOf)(value);
        this._updateFileName();
        this._updateThumbnail();
    },
    get: function () {
        return this._value;
    }
};


FileThumbnail.property.fileName = {
    set: function (value) {
        this._fileName = value;
        this._updateFileName();
    },
    get: function () {
        return this._fileName || (this._valueInfo && this._valueInfo.name) || null;
    }
};


FileThumbnail.property.fileType = {
    set: function (value) {
        this._fileType = value;
        this._updateThumbnail();
    },
    /***
     * @this FileInputBox
     * @return {*}
     */
    get: function () {
        if (this.isDirectory) return null;
        return this._fileType || (this._valueInfo && this._valueInfo.type) || null;
    }
};

FileThumbnail.property.checked = {
    set: function (value) {
        if (value) {
            this.addClass('as-checked');
        }
        else {
            this.removeClass('as-checked');

        }
    },
    get: function () {
        return this.hasClass('as-checked');
    }
};


FileThumbnail.property.thumbnail = {
    set: function (value) {
        this._thumbnail = value || null;
        this._updateThumbnail();
    },
    get: function () {
        return this._thumbnail;
    }
};

FileThumbnail.property.isDirectory = {
    set: function (value) {
        if (value) {
            this.addClass('as-is-directory');
        }
        else {
            this.removeClass('as-is-directory');
        }
    },
    get: function () {
        return this.hasClass('as-is-directory');
    }
}

ACore/* default.install */.Z.install(FileThumbnail);

/* harmony default export */ const finder_FileThumbnail = (FileThumbnail);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Searcher.js
var Searcher = __webpack_require__(9024);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/Context.js
var Context = __webpack_require__(5721);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringFormat.js
var stringFormat = __webpack_require__(6382);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DomSignal.js
var DomSignal = __webpack_require__(5150);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/RibbonButton.js
var RibbonButton = __webpack_require__(9664);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var Dom = __webpack_require__(6628);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/finder/Finder.js


































var isMobile = BrowserDetector/* default.isMobile */.Z.isMobile;

/***
 * @extends AElement
 * @constructor
 */
function Finder() {
    if (isMobile) this.addClass('as-mobile');
    // if (BrowserDetector.isMobile) alert("Chưa hỗ trợ điện thoại!");

    this.$attachhook = (0,ACore._)('attachhook').addTo(this);
    this.$attachhook.requestUpdateSize = () => {
        this.layoutCtn.update();
        this.navCtrl.notifyVisibleContentItems();
    };
    this.$attachhook.once('attached', () => {
        ResizeSystem/* default.add */.Z.add(this.$attachhook);
        this.layoutCtn.update();
        this.navCtrl.onStart();
        this.navCtrl.notifyVisibleContentItems();
        ContextMenu/* default.auto */.Z.auto();
    });

    this.domSignal = new DomSignal/* default */.ZP((0,ACore._)('attachhook').addTo(this));
    this.$header = (0,ACore.$)('.as-finder-header', this);
    this.$nomalActionCtn = (0,ACore.$)('.as-finder-normal-action-button-ctn', this);
    this.$tinyActionCtn = (0,ACore.$)('.as-finder-tiny-action-button-ctn', this);
    this.$contentHeader = (0,ACore.$)('.as-finder-content-header', this);

    this.$navCtn = (0,ACore.$)('.as-finder-nav-ctn', this);
    this.$nav = (0,ACore.$)(ExpTree/* ExpGroup.tag */.uz.tag, this.$navCtn);

    this.$searchCtn = (0,ACore.$)('.as-finder-search-ctn', this);


    this.$contentCtn = (0,ACore.$)('.as-finder-content-ctn', this);
    this.$content = (0,ACore.$)('.as-finder-content', this);
    this.$body = (0,ACore.$)('.as-finder-body', this);
    this.$commandButtons = (0,ACore.$$)('.as-finder-nav-header button', this)
        .concat((0,ACore.$$)('.as-finder-content-header button', this))
        .concat((0,ACore.$$)('.as-finder-search-footer button', this))
        .concat((0,ACore.$$)('.as-finder-search-header button', this))
        .reduce((ac, cr) => {
            var name = cr.attr('name');
            ac[name] = cr;
            if (cr.items) {//ribbon button
                cr.on('select', (event) => {
                    this.execCommand(name, event.item.value, event.item);
                });
            }
            else {
                cr.on('click', () => {
                    this.execCommand(name);
                });
            }
            return ac;
        }, {});

    this.$searchTypeSelect = (0,ACore.$)('.as-finder-search-type-select', this);
    this.$searchText = (0,ACore.$)('.as-finder-search-text', this);

    this.fileSystem = new AbsolFileSystem();
    this.layoutCtn = new LayoutController(this);
    this.navCtrl = new NavigatorController(this);
    this.selectCtrl = 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 (0,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: ExpTree/* ExpGroup.tag */.uz.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/* default.tag */.Z.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: FlexiconButton/* default.tag */.Z.tag,
                                        attr: { name: 'start_search' },
                                        props: {
                                            text: 'OK'
                                        }
                                    },
                                    {
                                        tag: FlexiconButton/* default.tag */.Z.tag,
                                        attr: { name: 'cancel_search' },
                                        props: {
                                            text: 'Hủy'
                                        }
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                tag: DropZone/* default.tag */.Z.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: RibbonButton/* default */.Z,
                                        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: Hanger/* default.tag */.Z.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 (fs) {
        this._fileSystem = fs;
    },
    get: function () {
        return this._fileSystem;
    }
};

Finder.property.path = {
    set: function (path) {
        this.navCtrl.path = path;
    },
    get: function () {
        return this.navCtrl.path;
    }
};

Finder.property.displayPath = {
    // set: function (path) {
    //     this.navCtrl.path = path;
    // },
    get: function () {
        return this.navCtrl.displayPath;
    }
};

Finder.property.rootPath = {
    set: function (path) {
        this.navCtrl.rootPath = path;
    },
    get: function () {
        return this.navCtrl.rootPath;
    }
};


Finder.property.selectedFiles = {
    get: function () {
        return this.selectCtrl.$selectedItems.filter(elt => elt.stat && !elt.stat.isDirectory).map(elt => 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;
};

ACore/* default.install */.Z.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 (fileElt) {
        return !fileElt && this.searchCtrl.state !== 'RUNNING' && this.dirStat && this.dirStat.writable;
    },
    /***
     * @this Finder
     */
    exec: function () {
        (0,utils.openFileDialog)({ multiple: true }).then(files => {
            if (files && files.length > 0) {
                this.uploadCtrl.upload(files);
            }
        })
    }
};

FinderCommands.upload_to_folder = {
    text: 'Tải lên',
    icon: 'span.mdi.mdi-upload-outline',
    match: function (treElt) {
        return treElt && treElt.stat && treElt.stat.writable;
    },
    /***
     * @this Finder
     */
    exec: function () {
        //todo: selected folder
        (0,utils.openFileDialog)({ multiple: true }).then(files => {
            if (files && files.length > 0) {
                this.uploadCtrl.upload(files);
            }
        })
    }
};

FinderCommands.delete = {
    icon: 'span.mdi.mdi-delete-outline',
    text: 'Xóa',
    /***
     * @this Finder
     */
    match: function (fileElt) {
        return fileElt && this.selectCtrl.$selectedItems.length > 0 && this.selectCtrl.$selectedItems.every(elt => elt.stat && !elt.stat.isDirectory && elt.stat.writable);
    },
    /***
     * @this Finder
     */
    exec: function () {
        var paths = this.selectCtrl.$selectedItems.map(elt => elt.stat.path);
        var names = this.selectCtrl.$selectedItems.map(elt => elt.fileName);
        if (names.length === 0) return;
        var contentElt = (0,ACore._)({
            style: { maxHeight: '50vh', overflow: 'auto' },
            child: {
                style: { display: 'table' },
                child: names.map(name => ({
                    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 = (0,ACore._)({
            tag: Modal/* default.tag */.Z.tag,
            style: { zIndex: this.findZIndex() + 9000 },
            child: {
                tag: MessageDialog/* default.tag */.Z.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: (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((path, i) => {
                                return this.fileSystem.unlink(path).then(() => {
                                    (0,ACore.$)('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild((0,ACore._)('span.mdi.mdi-check'))
                                }).catch(err => {
                                    errors.push(err);
                                    (0,ACore.$)('.as-finder-task-check', contentElt.firstChild.childNodes[i])
                                        .addChild((0,ACore._)('span.mdi.mdi-alert-decagram-outline'))
                                        .addChild((0,ACore._)({
                                            tag: 'span',
                                            class: '.as-finder-task-error-message',
                                            child: { text: err.message }
                                        }))
                                });
                            });
                            Promise.all(promises).then(() => {
                                var commands = {};
                                if (errors.length > 0) {
                                    errors.forEach(err => {
                                        if (err.command) {
                                            commands[err.command] = true;
                                        }
                                    });
                                    if (commands.reload) this.execCommand('reload');
                                    sender.$actionBtns[1].disabled = false;
                                    sender.$actionBtns[0].text = "Hoàn thành";
                                }
                                else {
                                    this.navCtrl.reload(this.path, true).then(() => modal.remove());
                                }
                            });
                        }
                        else {
                            modal.remove();

                        }
                    }
                }
            }
        }).addTo(document.body);
    }
};


FinderCommands.view = {
    icon: 'span.mdi.mdi-eye-outline',
    text: 'Xem',
    match: function (fileElt) {
        return !!fileElt;
    },
    /***
     * @this Finder
     */
    exec: function () {
        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 = ext2MineType/* default */.Z[type] || 'none';
        var content;
        if (mineType.startsWith('video')) {
            content = (0,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 = (0,ACore._)({
                tag: 'audio',
                style: {
                    margin: '5px'
                },
                attr: {
                    autoplay: 'true',
                    controls: 'true'
                },
                props: {
                    src: url
                }

            });
        }
        else if (mineType.startsWith('image')) {
            content = (0,ACore._)({
                tag: 'img',
                style: {
                    maxWidth: 'calc(90vw - 20px)',
                    maxHeight: 'calc(90vh - 80px)',
                    width: 'auto',
                    height: 'auto'
                },
                attr: {},
                props: {
                    src: url
                }
            });
        }
        else {
            content = (0,ACore._)({
                tag: 'iframe',
                style: {
                    maxWidth: 'calc(90vw - 20px)',
                    maxHeight: 'calc(90vh - 80px)',
                    width: '900px',
                    height: '600px'
                },
                props: {
                    src: url,
                    onload: function () {
                        // console.log(this.contentWindow.document.body.offsetHeight, this.contentWindow.document.body.offsetWidth)
                    }
                }

            });
        }

        var modal = (0,ACore._)({
            tag: Modal/* default.tag */.Z.tag,
            style: { zIndex: this.findZIndex() + 9000 },
            child: {
                tag: WindowBox/* default.tag */.Z.tag,
                child: content,
                props: {
                    windowTitle: elt.stat.displayName || elt.stat.name,
                    windowActions: [
                        { name: 'close', icon: 'span.mdi.mdi-close' }
                    ]
                },
                on: {
                    action: () => {
                        modal.remove();
                    }
                }
            }
        }).addTo(document.body);
    }
};


FinderCommands.download = {
    icon: 'span.mdi.mdi-download-outline',
    text: 'Tải về',
    match: function (elt) {
        return elt && this.selectCtrl.$selectedItems.length > 0
            && this.selectCtrl.$selectedItems.every(elt => elt.stat && !elt.stat.isDirectory);
    },
    /***
     * @this Finder
     */
    exec: function () {
        var taskMng = new AppPattern_TaskManager({ limit: 4 });
        this.selectCtrl.$selectedItems.forEach(elt => {
            if (elt.isDirectory) return;
            var url = elt.stat.url;
            if (!url) return;
            taskMng.requestTask(function (onFinish, bundle) {
                (0,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 (elt) {
        return elt && this.selectCtrl.$selectedItems.length === 1 && elt.stat && !elt.stat.isDirectory && elt.stat.writable;//todo: rename folder
    },
    /***
     * @this Finder
     */
    exec: function () {
        var elt = this.selectCtrl.$selectedItems[0];
        if (!elt) return;
        var path = elt.stat.path;
        var value = elt.fileName;
        var input = (0,ACore._)({
            tag: TextArea2/* default.tag */.Z.tag,
            style: {
                outline: 'none',
                position: 'absolute',
                zIndex: 100,
                left: 0,
                bottom: 0,
                width: '100%'
            },
            props: {
                value: elt.fileName
            },
            on: {
                blur: () => {
                    var newValue = input.value.replace(/<>:\\\/\|\?\*\^/g, '').trim();
                    input.remove();
                    if (!value) return;
                    if (value === newValue) return;
                    this.fileSystem.rename(path, newValue).then(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(() => 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 () {

    }
};

FinderCommands.move = {
    text: 'Di chuyển',
    icon: 'span.mdi.mdi-file-move-outline',
    match: function (fileElt) {
        if (arguments.length === 0) {
            return this.selectCtrl.$selectedItems.every(elt => elt.stat.writable);
        }

        return fileElt && fileElt.stat && fileElt.stat.writable;
    },
    /***
     * @this Finder
     */
    exec: function () {
        var itemElements = this.selectCtrl.$selectedItems.slice();
        var paths = itemElements.map(elt => elt.stat.path);
        var names = itemElements.map(elt => elt.fileName);
        if (names.length === 0) return;
        var currentFolderPath = this.path;
        this.folderDialog.open(currentFolderPath, false, (newFolderPath, stat) => newFolderPath !== currentFolderPath && stat.writable, 'Di chuyển file').then(newFolderPath => {
            if (!newFolderPath) return;
            if (newFolderPath === currentFolderPath) return;
            var contentElt = (0,ACore._)({
                style: { maxHeight: '50vh', overflow: 'auto' },
                child: {
                    style: { display: 'table' },
                    child: names.map(name => ({
                        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 = (0,ACore._)({
                tag: Modal/* default.tag */.Z.tag,
                style: { zIndex: this.findZIndex() + 9000 },
                child: {
                    tag: MessageDialog/* default.tag */.Z.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: (event, sender) => {
                            modal.remove();
                        }
                    }
                }
            }).addTo(document.body);
            var errors = [];
            var promises = paths.map((path, i) => {
                var newPath = newFolderPath + '/' + path.split('/').pop();
                return this.fileSystem.move(path, newPath).then(() => {
                    (0,ACore.$)('.as-finder-task-check', contentElt.firstChild.childNodes[i]).addChild((0,ACore._)('span.mdi.mdi-check'))
                }).catch(err => {
                    errors.push(err);
                    (0,ACore.$)('.as-finder-task-check', contentElt.firstChild.childNodes[i])
                        .addChild((0,ACore._)('span.mdi.mdi-alert-decagram-outline')).addChild((0,ACore._)({
                        tag: 'span',
                        class: '.as-finder-task-error-message',
                        child: { text: err.message }
                    }));
                });
            });
            Promise.all(promises).then(() => {
                var commands = {};
                if (errors.length > 0) {
                    errors.forEach(err => {
                        if (err.command) {
                            commands[err.command] = true;
                        }
                    });
                    if (commands.reload) this.execCommand('reload');
                }
                else {
                    this.navCtrl.reload(this.path, true).then(() => modal.remove());
                }
            });

        });
    }
};


FinderCommands.move_dir = {
    text: 'Di chuyển',
    icon: 'span.mdi.mdi-folder-arrow-right-outline',
    match: function (expElt) {
        return expElt && expElt.stat && expElt.stat.writable && !expElt.stat.isVirtual;
    },
    /***
     * @this Finder
     */
    exec: function (expElt) {
        var path = expElt.stat.path;
        var currentFolderPath = path.split('/');
        var name = currentFolderPath.pop();
        currentFolderPath = currentFolderPath.join('/');
        this.folderDialog.open(currentFolderPath, true, newPath => !newPath.startsWith(path), 'Di chuyển thư mục').then(newFolderPath => {
            if (!newFolderPath) return;
            return this.fileSystem.move(path, newFolderPath + '/' + name).then(() => {
                this.path = newFolderPath + '/' + name;
                this.navCtrl.reload(this.rootPath).then(() => {
                    this.navCtrl.viewDir(this.path)
                });
            });
        })
    }
};


FinderCommands.rmdir = {
    text: 'Xóa',
    icon: 'span.mdi.mdi-delete-outline',
    /***
     * @this Finder
     * @param elt
     */
    match: function (elt) {
        if (elt.stat && elt.stat.isVirtual) return false;
        if (elt) return elt.stat && elt.stat.writable;
        return false;
    },
    exec: function (elt) {

    }
};


FinderCommands.select_all = {
    text: 'Chọn tất cả',
    icon: 'span.mdi.mdi-select-all',
    match: function (fileElt) {
        return !fileElt;
    },
    /***
     * @this Finder
     */
    exec: function () {
        this.selectCtrl.selectAll();
    }
};

FinderCommands.nav_expand_all = {
    /***
     * @this Finder
     */
    exec: function () {
        this.navCtrl.expandAll();
    }
};

FinderCommands.nav_collapse_all = {
    /***
     * @this Finder
     */
    exec: function () {
        this.navCtrl.collapseAll();
    }
};


FinderCommands.reload = {
    /***
     * @this Finder
     */
    exec: function () {
        this.fileSystem.clearCache();
        this.navCtrl.reload().then(() => {
            this.navCtrl.viewDir(this.path);
        });
    }
};

FinderCommands.content_view_as = {
    /***
     * @this Finder
     */
    exec: function (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 () {
        this.searchCtrl.start();
    }
};

FinderCommands.cancel_search = {
    /***
     * @this Finder
     */
    exec: function () {
        this.searchCtrl.stop();
        this.navCtrl.viewDir(this.path);
    }
};


FinderCommands.start_search = {
    /***
     * @this Finder
     */
    exec: function () {
        this.searchCtrl.search();
    }
};

FinderCommands.nav_toggle = {
    icon: 'span.mdi.mdi-menu',
    exec: function () {
        if (this.hasClass('as-nav-open')) {
            this.removeClass('as-nav-open');
        }
        else {
            this.addClass('as-nav-open');
        }
    }
};


/***
 *
 * @param {Finder} elt
 * @constructor
 */
function 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))

}

LayoutController.prototype.requestUpdateActionButtonSize = function () {
    this.elt.domSignal.emit('requestUpdateActionButtonSize');
};

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, (ac, cr) => {
        return ac + Math.max(110, 0.715 * fontSize * 2 + (0,utils.measureText)(cr.text, font).width) + 10;
    }, 60);
    this.update();
};

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

LayoutController.prototype.ev_click = function (event) {
    if (event.target === this.elt) {
        this.elt.removeClass('as-nav-open');
    }
};

/***
 *
 * @param {Finder} elt
 * @constructor
 */

function CommandController(elt) {
    Object.keys(this.constructor.prototype).forEach(key => {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    });

    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 () {
    this.$normalActionCtn.clearChild();
    var buttons = this.buttonNames.map(name => {
        var desc = this.commands[name] || {};
        return (0,ACore._)({
            tag: FlexiconButton/* default.tag */.Z.tag,
            attr: { name: name },
            props: {
                text: desc.text || name
            },
            on: {
                click: () => {
                    this.execCommand(name);
                }
            }
        });
    });
    this.$normalActionCtn.addChild(buttons);

    buttons = this.buttonNames.map(name => {
        var desc = this.commands[name] || {};
        return (0,ACore._)({
            tag: 'button',
            class: 'as-transparent-button',
            attr: { name: name },
            child: desc.icon,
            on: {
                click: () => {
                    this.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 idx = this.buttonNames.indexOf(bf);
    var bfElt, smallBfElt;
    if (idx >= 0) {
        this.buttonNames.splice(idx, 0, name);
        bfElt = (0,ACore.$)(`button[name="${name}"]`, this.$normalActionCtn);
        smallBfElt = (0,ACore.$)(`button[name="${name}"]`, this.$tinyActionCtn);
    }
    else {
        this.buttonNames.push(name);
    }
    var desc = this.commands[name] || {};
    this.$normalActionCtn.addChildBefore((0,ACore._)({
        tag: FlexiconButton/* default.tag */.Z.tag,
        attr: { name: name },
        props: {
            text: desc.text || name
        },
        on: {
            click: () => {
                this.execCommand(name);
            }
        }
    }), bfElt);

    this.$tinyActionCtn.addChild((0,ACore._)({
        tag: 'button',
        class: 'as-transparent-button',
        attr: { name: name },
        child: desc.icon,
        on: {
            click: () => {
                this.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 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(name => {
        var desc = this.commands[name];
        if (!desc) return null;
        if (typeof desc.match === "function") {
            if (!desc.match.call(this.elt, expTree)) return null;
        }
        return {
            text: desc.text,
            icon: desc.icon,
            cmd: name
        }
    }).filter(x => !!x);
    if (items.length > 0) {
        event.showContextMenu({ items: items }, (event) => {
            var cmd = event.menuItem.cmd;
            this.execCommand(cmd, expTree);
        });
    }
};


CommandController.prototype.ev_contentContextMenu = function (event) {
    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(name => {
        var desc = this.commands[name];
        if (!desc) return null;
        if (typeof desc.match === "function") {
            if (!desc.match.call(this.elt, fileElt)) return null;
        }
        return {
            text: desc.text,
            icon: desc.icon,
            cmd: name
        }
    }).filter(x => !!x);
    if (items.length > 0) {
        event.showContextMenu({ items: items }, (event) => {
            var cmd = event.menuItem.cmd;
            this.execCommand(cmd, fileElt);
        });
    }
};


/***
 * for desktop
 * @param {Finder} elt
 * @constructor
 */
function SelectController(elt) {
    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(key => {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    });
    this._setupSelectTool();

}

/***
 *
 * @protected
 */
SelectController.prototype._setupSelectTool = function () {
    this._draged = false;
    this._dragOffset = new Vec2/* default */.Z(0, 0);
    this.$selectArea = (0,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(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 = Rectangle/* default.fromClientRect */.Z.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 = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.$content.getBoundingClientRect());
    var A = bound.A().add(this._dragOffset);
    var C = event.currentPoint;
    var sRect = Rectangle/* default.boundingPoints */.Z.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 () {
    while (this.$selectedItems.length > 0) {
        this.$selectedItems.pop().checked = false;
    }
    var selectBound = Rectangle/* default.fromClientRect */.Z.fromClientRect(this.$selectArea.getBoundingClientRect());
    Array.prototype.forEach.call(this.$content.childNodes, elt => {
        var bound = Rectangle/* default.fromClientRect */.Z.fromClientRect(elt.getBoundingClientRect());
        if (selectBound.isCollapse(bound, 0)) {
            this.$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(elt => 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 ((0,EventEmitter/* isMouseRight */.Ed)(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);
}


OOP/* default.mixClass */.ZP.mixClass(MobileSelectController, SelectController);

MobileSelectController.prototype._setupSelectTool = function () {
    this.$content.on('click', this.ev_click);
};


/***
 *
 * @param {Finder} elt
 * @constructor
 */
function UploadController(elt) {
    /***
     *
     * @type {Finder}
     */
    this.elt = elt;
    this.$body = this.elt.$body;
    Object.keys(this.constructor.prototype).forEach(key => {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    });

    this.$body.on({
        fileenter: this.ev_fileEnter,
        filedrop: this.ev_fileDrop
    })
}

UploadController.prototype.upload = function (files) {
    var screenSize = (0,Dom/* getScreenSize */.tE)();

    var contentElt = (0,ACore._)({
        style: { maxHeight: '50vh', overflow: 'auto' },
        child: {
            style: { display: 'table' },
            child: files.map(file => ({
                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 = (0,ACore._)({
        tag: Modal/* default.tag */.Z.tag,
        style: { zIndex: this.elt.findZIndex() + 9000 },
        child: {
            tag: MessageDialog/* default.tag */.Z.tag,
            props: {
                dialogTitle: 'Tải lên',
            },
            child: contentElt
        }
    }).addTo(document.body);

    //because file system in keeview not allow writing multiple file at the same time
    var syncs = files.reduce((sync, file, i) => {
        var percentText = (0,ACore.$)('.as-upload-percent', contentElt.firstChild.childNodes[i]);
        return sync.then(()=>{
            return this.elt.fileSystem.writeFile(this.elt.path + '/' + file.name, file, 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.resolve());
    syncs.then(() => {
        this.elt.navCtrl.reload(this.elt.path, true).then(() => 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) {
    EventEmitter/* default.call */.ZP.call(this);
    this.elt = elt;
}

OOP/* default.mixClass */.ZP.mixClass(FolderDialog, EventEmitter/* default */.ZP);

FolderDialog.prototype._init = function () {
    if (this.$modal) return;
    this.$modal = (0,ACore._)({
        tag: 'modal',
        class: 'as-finder-folder-dialog-modal',
        child: {
            tag: MessageDialog/* default.tag */.Z.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: ExpTree/* ExpGroup.tag */.uz.tag
                                },
                                {
                                    tag: ExpTree/* ExpTree.tag */.yb.tag,
                                    class: 'as-finder-folder-dialog-tree-root',
                                    props: {
                                        name: 'root',
                                        icon: 'span.mdi.mdi-harddisk'
                                    }
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    });
    this.$dialog = (0,ACore.$)(MessageDialog/* default.tag */.Z.tag, this.$modal);
    this.$treeCtn = (0,ACore.$)('.as-finder-folder-dialog-tree-ctn', this.$modal);
    this.$rootTree = (0,ACore.$)('.as-finder-folder-dialog-tree-root', this.$modal);
    this.$content = (0,ACore.$)('.as-finder-folder-dialog-content', this.$modal);
    this.$expGroup = (0,ACore.$)(ExpTree/* ExpGroup.tag */.uz.tag, this.$content);
    this.$selectedCtn = (0,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 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 = (path, ctnElt, level) => {
        level = level || 0;
        return fileSystem.readDir(path).then(dirs => Promise.all(dirs.map(dir => fileSystem.stat(path + '/' + dir))))
            .then(stats => stats.filter(stat => {
                return stat.isDirectory
            }))
            .then(stats => {
                var syncs = [];
                ctnElt.clearChild();
                var children = stats.map(stat => {
                    var nodePath = path + '/' + stat.name;
                    var node = (0,ACore._)({
                        tag: ExpTree/* ExpTree.tag */.yb.tag,
                        props: {
                            stat: stat,
                            name: stat.displayName || stat.name,
                            icon: { tag: 'img', props: { src: MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/folder.svg' } },
                            path: nodePath
                        },
                        on: {
                            statuschage: () => {
                            },
                            press: () => {
                                if (this.$activeNode) this.$activeNode.active = false;
                                this.$activeNode = node;
                                this.$activeNode.active = true;
                                this.$selectedPath.firstChild.data = node.getPath().join('/');
                                cPath = nodePath;
                                if (checkFunc && !checkFunc(cPath, stat)) {
                                    this.$dialog.$actionBtns[0].disabled = true;
                                }
                                else {
                                    this.$dialog.$actionBtns[0].disabled = false;
                                }
                            }
                        }

                    });
                    if (nodePath === cPath) {
                        node.active = true;
                        this.$activeNode = node;
                    }
                    if (checkFunc && !checkFunc(nodePath, stat)) {
                        node.getNode().addStyle('opacity', 0.3 + '');
                    }
                    node.getNode().on({
                        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(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 = () => {
            var node = this.$rootTree;
            var nodePath = this.elt.rootPath;
            if (this.$activeNode) this.$activeNode.active = false;
            this.$activeNode = node;
            this.$activeNode.active = true;
            this.$selectedPath.firstChild.data = node.getPath().join('/');
            cPath = nodePath;
            if (cPath === initPath || (checkFunc && !checkFunc(cPath, { writable: true }))) {
                this.$dialog.$actionBtns[0].disabled = true;
            }
            else {
                this.$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(() => {
        var p;
        if (this.$activeNode) {
            this.$selectedPath.firstChild.data = this.$activeNode.getPath().join('/');
            p = this.$activeNode.getParent();
            while (p) {
                if (p.status === 'close') {
                    p.status = 'open';
                }
                p = p.getParent && p.getParent();
            }
            setTimeout(() => {
                (0,utils.vScrollIntoView)(this.$activeNode.firstChild);
            }, 10)
        }
    });


    return new Promise((resolve) => {
        var finish = (event) => {
            this.$dialog.off('action', finish);
            this.$modal.remove();
            if (event.action.name === 'cancel') resolve(null);
            else resolve(cPath);
            if (onRootPress) {
                this.$rootTree.off('press', onRootPress);
            }
        }

        this.$dialog.on('action', finish);
    });
};

var isMatchAccept = (accept, statInfo) => {
    if (accept && (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 = (0,utils.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) {
    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(key => {
        if (key.startsWith('ev_')) {
            this[key] = this[key].bind(this);
        }
    });

    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 opened = !autoOpen;

    var makeTree = (path, ctnElt) => {
        if (!opened && ctnElt.path) {
            this.viewDir(ctnElt.path, [this.elt.rootPath].concat(ctnElt.getPath()).join('/'));
            opened = true;
        }
        return this.fileSystem.readDir(path).then(dirs => Promise.all(dirs.map(dir => this.fileSystem.stat(path + '/' + dir))))
            .then(stats => stats.filter(stat => {
                return stat.isDirectory
            }))
            .then(stats => {
                var syncs = [];
                ctnElt.clearChild();
                var children = stats.map(stat => {
                    var nodePath = path + '/' + stat.name;
                    var node = (0,ACore._)({
                        tag: ExpTree/* ExpTree.tag */.yb.tag,

                        props: {
                            stat: stat,
                            name: stat.displayName || stat.name,
                            icon: { tag: 'img', props: { src: MessageInput/* default.iconAssetRoot */.ZP.iconAssetRoot + '/folder.svg' } },
                            path: nodePath,
                        },
                        on: {
                            statuschage: () => {
                                this._states[path + '/' + stat.name] = node.status;
                            },
                            press: () => {
                                if (this.path !== nodePath)
                                    this.viewDir(nodePath, [this.elt.rootPath].concat(node.getPath()).join('/'));
                            }
                        }

                    });
                    node.getNode().on({
                        dblclick: () => {
                            if (node.status === 'close') {
                                node.status = 'open';
                            }
                            else if (node.status === 'open') {
                                node.status = 'close';
                            }
                            this._states[nodePath] = node.status;
                        }
                    });
                    this.$treeByPath[nodePath] = node;
                    if (stat.name !== 'node_modules')
                        syncs.push(makeTree(nodePath, node));
                    if (!opened) {
                        this.viewDir(nodePath, [this.elt.rootPath].concat(node.getPath()).join('/'));
                        opened = true;
                    }
                    return node;
                });
                children.forEach(c => {
                    ctnElt.addChild(c);
                });
                if (children.length) {
                    if (this._states[ctnElt.path] === 'close' || this._states[ctnElt.path] === 'open') {
                        ctnElt.status = this._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) {
    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();
    }

    (0,utils.vScrollIntoView)(this.$treeByPath[this.path].firstChild);


    this.fileSystem.stat(path).then(stat => {
        this.elt.dirStat = stat;
        if (this.path !== path) return;
        if (stat.writable) this.elt.addClass('as-writable-folder');
        else this.elt.removeClass('as-writable-folder');
        if (stat.isVirtual) {
            this.elt.addClass('as-virtual-folder');
        }
        else {
            this.elt.removeClass('as-virtual-folder');
        }
    })
    this.fileSystem.readDir(path).then(dirs => Promise.all(dirs.map(dir => this.fileSystem.stat(path + '/' + dir))))
        .then(stats => {
            if (this.path !== path) return;
            stats.sort((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(x => isMatchAccept(this.elt.accept, x));
            this.viewContent(stats);
        });
};

NavigatorController.prototype.viewContent = function (stats) {
    this.clearContent();
    stats.forEach(stat => {
        this.pushContentItem(stat);

    });
    this.notifyVisibleContentItems();
};

NavigatorController.prototype.clearContent = function () {
    this._notifiedVisibleIdx = 0;
    this.$content.clearChild();
};

NavigatorController.prototype.pushContentItem = function (stat) {
    var elt = (0,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: () => {
                var mineType = ext2MineType/* default */.Z[elt.fileType];
                if (mineType && mineType.startsWith('image/')) {
                    elt.thumbnail = stat.url;
                }
            },
            dblclick: () => {
                var prevented = false;
                var event;
                if (!stat.isDirectory) {
                    event = {
                        fileElt: elt,
                        stat: stat,
                        preventDefault: () => {
                            prevented = true;
                        }
                    };
                    this.elt.emit('dblclickfile', event);
                }
                if (!prevented)
                    this.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 visit = nodeElt => {
        if (nodeElt.status === 'close') {
            nodeElt.status = 'open';
            this._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 visit = nodeElt => {
        if (nodeElt.status === 'open') {
            nodeElt.status = 'close';
            this._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 = text => {
    var code = (0,stringFormat.nonAccentVietnamese)(text.toLowerCase())
        .replace(/[.,+^$()\[\]{}|\\]/g, x => '\\' + x)
        .replace(/\*+/g, '(.*)')
        .replace(/\?/g, '.');

    return new RegExp(code, 'i');
}


/***
 * @extends Context
 * @param {Finder} elt
 * @constructor
 */
function SearchController(elt) {
    Context/* default.apply */.Z.apply(this);
    this.elt = elt;
    this.$searchText = this.elt.$searchText.on('keydown', event => {
        if (event.key === 'Enter') {
            this.$searchText.blur();
            this.search();
        }
    });
}


OOP/* default.mixClass */.ZP.mixClass(SearchController, Context/* default */.Z);


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 = (0,stringGenerate.randomIdent)(10);
    this.$searchText.waiting = false;

};

SearchController.prototype.search = function () {
    var session = (0,stringGenerate.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 = stat => {
        var fileInfo = (0,utils.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 && (0,stringFormat.nonAccentVietnamese)(stat.name.toLowerCase()).match(regex)) return true;

        return false;
    }


    var handleStat = stat => {
        if (session !== this.session) return;
        if (stat.isDirectory) return new Promise(rs => {
            setTimeout(() => {
                rs(visitDir(stat.path));
            }, 5);
        });
        if (isMatched(stat)) {
            this.elt.navCtrl.pushContentItem(stat);
            this.elt.navCtrl.notifyVisibleContentItems();
        }
    };

    var handleDirResult = (dir, names) => {
        var syncs = names.map(name => {
            return fileSystem.stat(dir + '/' + name).then(stat => {
                if (session !== this.session) return;
                if (stat)
                    return handleStat(stat);
            });
        });
        return Promise.all(syncs);
    }

    var visitDir = path => {
        return fileSystem.readDir(path).then((names => handleDirResult(path, names)));
    }

    visitDir(rootPath).then(() => {
        if (session !== this.session) return;
        this.$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 });
}

OOP/* default.mixClass */.ZP.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) {
    this.sync = this.sync.then(() => {
        if (this.cache.readDir[path || '..']) return this.cache.readDir[path || '..'];
        return fetch(this.API_PREFIX + '/filesystem/ls.php', {
            method: 'POST',
            cache: "no-cache",
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
                path: path
            })
        }).then(res => res.json()).then(res => {
            res = res.filter(c => c.path.startsWith('/html'));
            res.forEach(c => {
                c.name = c.path.split('/').pop();
                c.url = c.path.replace('/html', this.API_PREFIX ||location.origin)
            });
            this.cache.readDir[path || '..'] = res.map(c => c.name);
            res.forEach(c => {
                this.cache.stats[c.path] = c;
            });

        }).then(() => {
            return this.cache.readDir[path || '..'];
        });
    });
    return this.sync;
};

AbsolFileSystem.prototype.stat = function (path) {
    return this.sync.then(() => {
        path = path || '';
        if (this.cache.stats[path || '..']) return this.cache.stats[path || '..'];
        var dir = path.split('/');
        dir.pop();
        dir = dir.join('/');
        return this.readDir(dir).then(() => {
            return this.cache.stats[path || '..'];
        })
    });
}

/***
 *
 * @param file
 * @param {File|Blob}data
 * @param {function(done: number):void=}onProcess
 */
AbsolFileSystem.prototype.writeFile = function (file, data, onProcess) {
    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(), (0,random/* randomArbitrary */.Ld)(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 = bundle => {
        return new Promise(rs => {
            this.taskMng.requestTask((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(this.API_PREFIX + '/filesystem/writefile.php', {
                    method: 'POST',
                    body: form
                }).then(res => res.text()).then(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(() => {
        var form = new FormData();
        form.append('action', 'join_parts');
        form.append('parts', parts.join(';'));
        form.append('path', file);
        fetch(this.API_PREFIX + '/filesystem/writefile.php', {
            method: 'POST',
            body: form
        }).then(res => res.text()).then(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(res => res.text()).then(text => {
        if (text !== 'OK') throw new Error(text);
    });
};


AbsolFileSystem.prototype.rename = function (path, name) {
    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(res => res.text()).then(text => {
        if (text !== 'OK') throw new Error(text);
        var newPath = folderPath + '/' + name;
        delete this.cache.readDir[folderPath];
        delete this.cache.stats[path];
        return {
            url: newPath.replace('/html', this.API_PREFIX || location.origin),
            path: newPath,
            name: name
        }
    });

};


AbsolFileSystem.prototype.move = function (oldPath, newPath) {
    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(res => res.text()).then(text => {
        if (text !== 'OK') throw new Error(text);
        delete this.cache.readDir[oldFolderPath];
        delete this.cache.readDir[newFolderPath];
        delete this.cache.stats[oldPath];
    });
};


/***/ }),

/***/ 103:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1477);
/***
 *
 * @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 = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.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[(0,_utils__WEBPACK_IMPORTED_MODULE_0__.keyStringOf)(value)];
    if (iDict) return iDict.item;
    return null;
};

/***
 *
 * @param {String | Number} value
 * @returns {Array<SelectionItem> }
 */
ItemDictionary.prototype.getAllItemByValue = function (value) {
    var key = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.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 __WEBPACK_DEFAULT_EXPORT__ = (ItemDictionary);


/***/ }),

/***/ 4623:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ list_ListSearchMaster)
});

// EXTERNAL MODULE: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate = __webpack_require__(1334);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/Thread.js + 1 modules
var Thread = __webpack_require__(6672);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/ListSearchFactor.js
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 (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 splitter = /([_\s\b\-()\[\]"']|&#8239;|&nbsp;|&#xA0;")+/g;
        var text = item.text.replace(splitter, ' ');
        var __words__ = text.split(/\s+/).filter(w=>!!w).map(w=>w.toLowerCase());
        var __text__ = __words__.join(' ');
        var __wordDict__ = __words__.reduce((ac, cr, i) => {
            ac[cr] = ac[cr] || i + 1;
            return ac;
        }, {});

        var __nvnText__ = nonAccentVietnamese(__text__);

        var __nvnWords__ =  __words__.map(w=>nonAccentVietnamese(w));
        var __nvnWordDict__ = __nvnWords__.reduce((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: __words__
            },
            __wordDict__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __wordDict__
            },
            __textNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __text__
            },
            __wordsNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __words__
            },
            __nvnText__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnText__
            },
            __nvnWords__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnWords__
            },
            __nvnWordDict__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnWordDict__
            },
            __nvnTextNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnText__
            },
            __nvnWordsNoneCase__: {
                configurable: true,
                enumerable: false,
                writable: true,
                value: __nvnWords__
            }
        });

        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;

        function calcByWordDict(queryWords, wordDict) {
            var hwScore = 0;
            var i;
            wordDict = Object.assign({}, wordDict);
            var bestWordMatched, bestWordMatchScore = 0;
            var word, wordScore;
            for (i = 0; i < queryWords.length; ++i) {
                bestWordMatchScore = 0;
                bestWordMatched = null;
                for (word in wordDict) {
                    wordScore = wordLike(word, queryWords[i]) - 1e-3 * wordDict[word];
                    if (wordScore > bestWordMatchScore) {
                        bestWordMatched = word;
                        bestWordMatchScore = wordScore;
                    }
                }
                if (bestWordMatchScore >0) {
                    hwScore += bestWordMatchScore * WORD_MATCH_SCORE;
                    delete wordDict[bestWordMatched];
                }
            }
            return hwScore;
        }

        score += calcByWordDict(queryItem.__words__, item.__wordDict__);
        score += calcByWordDict(queryItem.__nvnWords__, item.__nvnWordDict__);

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

        score += Math.max(wordsMatch(queryItem.__words__, item.__words__), wordsMatch(queryItem.__nvnWords__, item.__nvnWords__))/ Math.max(queryItem.__words__.length + 1, 1);

        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 = 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(val => keyStringOf(val)).join(',') + ')';
            }
            else {
                keys = Object.keys(o);
                keys.sort();
                return 'o(' + keys.map(key => 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 = 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 && (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((ac, cr) => 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];
    };

}

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/utils.js
var utils = __webpack_require__(1477);
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/list/ListSearchMaster.js






function ListSearchMaster() {
    this.prepare();
    this.id = (0,stringGenerate.randomIdent)(8);
    this.cache = {};
    this.share.instances.push(this.id);
}

ListSearchMaster.prototype.share = {
    worker: null,
    instances: []
};

ListSearchMaster.prototype.prepare = function () {
    if (this.share.worker) return;
    this.share.worker = new Thread/* default */.Z({
        methods: {
            init: ListSearchFactor
        },
        extendCode: 'init(this)'
    });
};

ListSearchMaster.prototype.transfer = function (items) {
    this.prepare();
    this.cache = {};
    return this.share.worker.invoke('transferSearchItems', this.id, items);
};


ListSearchMaster.prototype.query = function (query) {
    var key = (0,utils.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 () {
    // return;
    this.cache = {};
    this.share.worker.invoke('destroySlave', this.id);
    var idx = this.share.instances.indexOf(this.id);
    this.destroy = noop/* default */.Z;
    if (idx >= 0) {
        this.share.instances.splice(idx, 1);
    }
};

ListSearchMaster.prototype.revokeResource = function () {
};


/* harmony default export */ const list_ListSearchMaster = (ListSearchMaster);

/***/ }),

/***/ 2551:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (/* binding */ prepareSearchForItem),
/* harmony export */   "Lb": () => (/* binding */ prepareSearchForList),
/* harmony export */   "lk": () => (/* binding */ calcItemMatchScore),
/* harmony export */   "o": () => (/* binding */ searchListByText),
/* harmony export */   "$l": () => (/* binding */ searchTreeListByText)
/* harmony export */ });
/* unused harmony export searchCheckListByText */
/* harmony import */ var absol_src_String_stringFormat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6382);
/* harmony import */ var absol_src_String_stringMatching__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(991);



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 splitter = /([_\s\b\-()\[\]"']|&#8239;|&nbsp;|&#xA0;")+/g;
    var text = item.text.replace(splitter, ' ');
    var __words__ = text.split(/\s+/).filter(w=>!!w).map(w=>w.toLowerCase());
    var __text__ = __words__.join(' ');
    var __wordDict__ = __words__.reduce((ac, cr, i) => {
        ac[cr] = ac[cr] || i + 1;
        return ac;
    }, {});

    var __nvnText__ = (0,absol_src_String_stringFormat__WEBPACK_IMPORTED_MODULE_0__.nonAccentVietnamese)(__text__);

    var __nvnWords__ =  __words__.map(w=>(0,absol_src_String_stringFormat__WEBPACK_IMPORTED_MODULE_0__.nonAccentVietnamese)(w));
    var __nvnWordDict__ = __nvnWords__.reduce((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: __words__
        },
        __wordDict__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __wordDict__
        },
        __textNoneCase__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __text__
        },
        __wordsNoneCase__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __words__
        },
        __nvnText__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __nvnText__
        },
        __nvnWords__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __nvnWords__
        },
        __nvnWordDict__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __nvnWordDict__
        },
        __nvnTextNoneCase__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __nvnText__
        },
        __nvnWordsNoneCase__: {
            configurable: true,
            enumerable: false,
            writable: true,
            value: __nvnWords__
        }
    });

    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;

    function calcByWordDict(queryWords, wordDict) {
        var hwScore = 0;
        var i;
        wordDict = Object.assign({}, wordDict);
        var bestWordMatched, bestWordMatchScore = 0;
        var word, wordScore;
        for (i = 0; i < queryWords.length; ++i) {
            bestWordMatchScore = 0;
            bestWordMatched = null;
            for (word in wordDict) {
                wordScore = (0,absol_src_String_stringMatching__WEBPACK_IMPORTED_MODULE_1__.wordLike)(word, queryWords[i]) - 1e-3 * wordDict[word];
                if (wordScore > bestWordMatchScore) {
                    bestWordMatched = word;
                    bestWordMatchScore = wordScore;
                }
            }
            if (bestWordMatchScore >0) {
                hwScore += bestWordMatchScore * WORD_MATCH_SCORE;
                delete wordDict[bestWordMatched];
            }
        }
        return hwScore;
    }

    score += calcByWordDict(queryItem.__words__, item.__wordDict__);
    score += calcByWordDict(queryItem.__nvnWords__, item.__nvnWordDict__);

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

    score += Math.max((0,absol_src_String_stringMatching__WEBPACK_IMPORTED_MODULE_1__.wordsMatch)(queryItem.__words__, item.__words__), (0,absol_src_String_stringMatching__WEBPACK_IMPORTED_MODULE_1__.wordsMatch)(queryItem.__nvnWords__, item.__nvnWords__))/ Math.max(queryItem.__words__.length + 1, 1);
    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) {
        if (!item.__text__) prepareSearchForItem(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(c => 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;
    items = filterItems(scoredItems, medianScore);
    return items;
}


/***
 * checked is bestValue
 * @param  {String} query
 * @param {Array<SelectionItem|{checked:boolean, text: string}>} items
 */
function searchCheckListByText(query, items) {
    var res = items.filter(it=> it.checked);
    var nItems = items.filter(it=> !it.checked);
    prepareSearchForList(items);
    nItems = searchListByText(query, nItems);
    return res.concat(nItems);
}

/***/ }),

/***/ 4877:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "RD": () => (/* binding */ MessageQuote),
  "ZP": () => (/* binding */ messageinput_MessageInput),
  "kW": () => (/* binding */ parseMessage)
});

// UNUSED EXPORTS: MODE_EDIT, MODE_NEW, prepareIcon

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/messageinput.css
var messageinput = __webpack_require__(1813);
// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(3855);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js
var EventEmitter = __webpack_require__(863);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/utils.js
var utils = __webpack_require__(1477);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiAnims.js
var EmojiAnims = __webpack_require__(4670);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiPicker.js
var EmojiPicker = __webpack_require__(2948);
// EXTERNAL MODULE: ./node_modules/absol/src/Detector/BrowserDetector.js
var BrowserDetector = __webpack_require__(9399);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate = __webpack_require__(1334);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/CMDRunner.js
var CMDRunner = __webpack_require__(2243);
// EXTERNAL MODULE: ./node_modules/absol/src/Input/keyboard.js
var keyboard = __webpack_require__(27);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/tokenizeiput/tiutils.js
var tiutils = __webpack_require__(3421);
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
;// 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 || (0,stringGenerate.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 (EventEmitter/* default.hitElement */.ZP.hitElement(this.getTriggerButton(), event)) return;
    if (EventEmitter/* default.hitElement */.ZP.hitElement(this.getPopup(), event)) return;
    if (!this.autoClose) return;
    this.closePopup();
};


MessageInputPlugin.prototype.getIconElt = function () {
    if (!this.$icon)
        this.$icon = (0,ACore._)(this.icon);
    return this.$icon;
};


MessageInputPlugin.prototype.getTriggerButton = function () {
    if (!this.$triggerBtn) {
        this.$triggerBtn = (0,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 = (0,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/* default */.Z;
MessageInputPlugin.prototype.onClose = noop/* default */.Z;

Object.defineProperty(MessageInputPlugin.prototype, 'contentElt', {
    get: function () {
        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);
        }
    }
}

OOP/* default.mixClass */.ZP.mixClass(MIEmojiPlugin, messageinput_MessageInputPlugin);


MIEmojiPlugin.prototype.createContent = function () {
    return (0,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);
// EXTERNAL MODULE: ./node_modules/absol-acomp/assets/exticons/catalog.json
var catalog = __webpack_require__(2398);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/messageinput/MessageInput.js

















var _ = ACore/* default._ */.Z._;
var $ = ACore/* default.$ */.Z.$;
var $$ = ACore/* default.$$ */.Z.$$;


/***
 *
 * @typedef {{text:string, desc: string, img?:string, file?:string}|string} MessageInputQuote
 */


var MODE_NEW = 0;
var MODE_EDIT = 1;

var isMobile = BrowserDetector/* default.isMobile */.Z.isMobile;

/***
 * @extends AElement
 * @constructor
 */
function MessageInput() {
    this._cmdRunner = new CMDRunner/* default */.Z(this);
    this._keyMaps = {};
    this._plugins = [];
    this._mode = MODE_NEW;//edit
    this._editingText = "";
    prepareIcon();
    /**
     * @type {import('../PreInput').default}
     */
    this.$preInput = $('.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 = $('messagequote.as-message-input-quote', this)
        .on('pressremove', this.eventHandler.clickQuoteRemoveBtn);

    this.$left = $('.as-message-input-left', this);
    this.$right = $('.as-message-input-right', this);

    this.$attachmentCtn = $('.as-message-input-attachment-ctn', this);

    this.$fileBtn = $('.as-message-input-plugin-file', this)
        .on('click', this.openFileDialog.bind(this));
    this.$attachmentAddBtn = $('.as-message-input-attachment-add-btn', this)
        .on('click', this.openFileDialog.bind(this));
    this.$sendBtn = $('.as-message-input-plugin-send', this)
        .on('click', this.notifySend.bind(this));

    this.$cancelBtn = $('.as-message-input-plugin-cancel', this)
        .on('click', this.notifyCancel.bind(this));


    this.$attachhook = _('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);

    OOP/* default.drillProperty */.ZP.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 _({
        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 () {
                this.fileRemovePrevented = true;
            }
        }), this);
    }

    if (eventData.images.length > 0) {
        this.emit('sendimage', Object.assign(eventData, {
            type: 'sendimage', preventDefault: function () {
                this.imageRemovePrevented = true;
            }
        }), this);
    }

    if ((typeof this.quote === "string") || this.quote) {
        this.emit('sendquote', Object.assign(eventData, {
            type: 'sendquote', preventDefault: function () {
                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 () {
                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 = _({
            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 () {
                            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: (0,utils.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 = _({
                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 () {
                                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: (0,utils.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);
    $(document.body).off('mousedown', this.eventHandler.mousedownOutEmoji);
};


MessageInput.prototype.notifyAddFiles = function (files) {
    var event = {
        resolvedAsync: Promise.resolve(files),
        files: files,
        resolve: function (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;
    (0,utils.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(pl => 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 || (0,stringGenerate.randomIdent)(20);
    this._cmdRunner.add(option.name, option.exec);
    if (option.keyBiding && option.keyBiding.trim) {
        var keyBindingIdent = (0,keyboard/* normalizeKeyBindingIdent */.DB)(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 = (0,keyboard/* keyboardEventToKeyBindingIdent */.Ej)(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 (EventEmitter/* default.hitElement */.ZP.hitElement(this.$emojiPicker, event) || EventEmitter/* default.hitElement */.ZP.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 (value) {
        $$('.as-file', this.$attachmentCtn).forEach(function (elt) {
            elt.remove();
        });
        value = value || [];
        this._files = [];
        this.addFiles(value);
    },
    get: function () {
        return this._files;
    }
};

MessageInput.property.images = {
    set: function (value) {
        $$('.as-image', this.$attachmentCtn).forEach(function (elt) {
            elt.remove();
        });
        value = value || [];
        this._imageFiles = [];
        this.addImageFiles(value);
    },
    get: function () {
        return this._imageFiles;
    }
};

MessageInput.property.text = {
    set: function (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 () {
        return this.$preInput.value;
    }
};


/**
 * @type {MessageInput}
 */
MessageInput.property.mode = {
    set: function (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 () {
        return this._mode === MODE_EDIT ? 'edit' : 'new';
    }
};

MessageInput.property.autoSend = {
    set: function (value) {
        if (value) {
            this.addClass('as-auto-send');
        }
        else {
            this.removeClass('as-auto-send');
        }
    },
    get: function () {
        return this.hasClass('as-auto-send');
    }
};

MessageInput.property.quote = {
    set: function (quote) {
        this._quote = quote;
        this._updateQuote();
    },
    get: function () {
        return this._quote;
    }
};

MessageInput.property.tagMap = {
    set: function (value) {
        this.$preInput.tagMap = value || {};
        this.$quote.tagMap = value || {};

    },
    get: function () {
        return this.$preInput.tagMap;
    }
}


ACore/* default.install */.Z.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 || EmojiPicker/* default.assetRoot */.Z.assetRoot;
    data.staticSize = data.staticSize || 20;
    data.animSize = data.animSize || 60;
    var tagMap = data.tagMap || {};
    var tokens = (0,tiutils/* tokenizeMessageText */.Dx)(text).reduce((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((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((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 + '/' + EmojiAnims/* EmojiAnimByIdent */.M[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)
    }
    return MessageInput.iconSupportAsync;
}


function MessageQuote() {
    prepareIcon();
    this._tagMap = {};
    /***
     *
     * @type {null|MessageInputQuote}
     * @private
     */
    this._data = null;
    this.$img = $('.as-message-quote-img', this);
    this.$text = $('.as-message-quote-text', this);
    this.$desc = $('.as-message-quote-desc', this);
    this.$removeBtn = $('.as-message-quote-remove-btn', this)
        .on('click', this.eventHandler.clickRemoveBtn);
    Object.defineProperty(this, '$text', {
        set: function () {
            console.trace();
        },
        get: function () {
            return $('.as-message-quote-text', this);
        }
    })

}

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

MessageQuote.render = function () {
    return _({
        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 (val) {
        if (val) {
            this.addClass('as-removable');
        }
        else {
            this.removeClass('as-removable');
        }
    },
    get: function () {
        return this.hasClass('as-removable');
    }
};

MessageQuote.property.shortenText = {
    set: function (val) {
        if (val) {
            this.addClass('as-shorten-text');
        }
        else {
            this.removeClass('as-shorten-text');
        }
    },
    get: function () {
        return this.hasClass('as-shorten-text');
    }
};

MessageQuote.property.data = {
    set: function (quote) {
        this._data = quote;
        var text, desc;
        var file, img;
        if (typeof quote === "string") {
            text = quote;
            desc = ''
        }
        else if (quote && (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 _(c);
            });
            this.$text.clearChild().addChild(textEltChain);
            this.$desc.firstChild.data = desc;
        }
    },
    get: function () {
        return this._data;
    }
};

MessageQuote.property.tagMap = {
    set: function (value) {
        this._tagMap = value || {};
        this.data = this['data'];
    },
    get: function () {
        return this._tagMap;
    }
};

MessageQuote.eventHandler.clickRemoveBtn = function () {
    this.emit('pressremove', { target: this, type: 'pressclose' }, this);
};

ACore/* default.install */.Z.install(MessageQuote);


MessageInput.prototype.PluginConstructor = messageinput_MessageInputPlugin;


/***/ }),

/***/ 9277:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _css_mobileapp_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8789);
/* harmony import */ var _css_mobileapp_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_mobileapp_css__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _QuickMenu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1274);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1477);
/* harmony import */ var absol_src_HTML5_DynamicCSS__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(488);
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(863);







/**
 * @exatends AElement
 * @constructor
 */
function MHeaderBar() {
    this._title = null;
    this._titleDesc = null;
    this._actionIcon = null;
    this._commands = [];

    this._quickmenuHolder = null;
    this._quickmenu = null;
    this.$right = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__.$)('.am-header-bar-right', this);
    this.$leftBtn = null;
    this.$titleCtn = null;
    this.$title = null;
    this.$titleDesc = null;
    this.$notificationActionBtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__.$)(".as-header-bar-notification-action", this).on('click', (event) => {
        MHeaderBar.emit('clicknotification', { type: 'clicknotification', target: this }, this);
    });
    this.$commands = [];
}

MHeaderBar.tag = 'MHeaderBar'.toLowerCase();
MHeaderBar.render = function () {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({
        extendEvent: ['action', 'command'],
        class: 'am-header-bar',
        child: [
            {
                class: 'am-header-bar-right',
                child: [
                    {
                        tag: 'button',
                        class: ['am-header-bar-command', 'as-header-bar-notification-action'],
                        child: [
                            'span.mdi.mdi-bell',
                            '.as-header-bar-notification-action-count',
                        ]
                    }
                ]
            }
        ]
    });
};


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


MHeaderBar.prototype.showTitle = function (flag) {
    if (!this.$titleCtn && flag) {
        this.$titleCtn = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({
            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 = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__.$)('.am-header-bar-title', this.$titleCtn);
        this.$titleDesc = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__.$)('.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 = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({
            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 = (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({
            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.addChildBefore(this.$quickmenuBtn, this.$notificationActionBtn);
    }
    else {
        if (this.$quickmenuBtn) this.$quickmenuBtn.remove();
    }
};


MHeaderBar.prototype._makeCommandBtn = function (item) {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({
        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 (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 = _QuickMenu__WEBPACK_IMPORTED_MODULE_2__/* ["default"].toggleWhenClick */ .Z.toggleWhenClick(this.$quickmenuBtn, value);
        }
        else {
            this.showQuickMenu(false);
            value = null;
        }
        this._quickmenu = value;
    },
    get: function () {
        return this._quickmenu;
    }
};


/**
 * @type {MHeaderBar}
 */
MHeaderBar.property.title = {
    set: function (value) {
        if (value) {
            this.showTitle(true);
            if (typeof value === 'string') {
                this.$title.innerHTML = value;
            }
            else {
                this.$title.clearChild().addChild((0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)(value));
            }
        }
        else {
            this.showTitle(false);
            value = null;
        }
        this._title = value;
    },
    get: function () {
        return this._title;
    }
};

/**
 * @type {MHeaderBar}
 */
MHeaderBar.property.titleDesc = {
    set: function (value) {
        if (value) {
            value = value + '';
            this.showTitle(true);
            this.$titleDesc.clearChild().addChild((0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({ text: value }));
        }
        else {
            this.showTitle(false);
            if (this.$titleDesc) this.$titleDesc.clearChild();
            value = null;
        }
        this._titleDesc = value;
    },
    get: function () {
        return this._titleDesc;
    }
};

/**
 * @type {MHeaderBar}
 */
MHeaderBar.property.actionIcon = {
    set: function (value) {
        if (value) {
            this.showActionBtn(true);
            this.$leftBtn.clearChild()
                .addChild((0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)(value));
        }
        else {
            this.showActionBtn(false);
            value = null;
        }
        this._actionIcon = value;
    },
    get: function () {
        return this._actionIcon;
    }
};


/**
 * @type {MHeaderBar}
 */
MHeaderBar.property.commands = {
    set: function (value) {
        this.$commands.forEach(function (e) {
            e.selftRemove();
        });
        this.$commands = [];
        var commandBtn;
        var i;
        if (value) {
            var firstChild = this.$right.firstChild;
            if (firstChild) {
                for (i = 0; i < value.length; ++i) {
                    commandBtn = this._makeCommandBtn(value[i]);
                    this.$right.addChildBefore(commandBtn, firstChild)
                }
            }
            else {
                for (i = 0; i < value.length; ++i) {
                    commandBtn = this._makeCommandBtn(value[i]);
                    this.$right.addChild(commandBtn);
                }
            }
        }
        else {
            this._commands = [];
        }
        this._commands = value;
    },
    get: function () {
        return this._commands;
    }
};


_ACore__WEBPACK_IMPORTED_MODULE_1__/* ["default"].install */ .Z.install(MHeaderBar);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MHeaderBar);


var notyEmitter = new absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .ZP();

MHeaderBar.on = notyEmitter.on.bind(notyEmitter);
MHeaderBar.once = notyEmitter.once.bind(notyEmitter);
MHeaderBar.off = notyEmitter.off.bind(notyEmitter);
MHeaderBar.emit = notyEmitter.emit.bind(notyEmitter);


var notificationCount = 0;
/**
 *
 * @type {null|DynamicCSS}
 */
var ncCSS = null;

function updateNotificationCountText() {
    if (!ncCSS) ncCSS = new absol_src_HTML5_DynamicCSS__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z();
    console.log("notificationCount", notificationCount);
    ncCSS.setRule("button .as-header-bar-notification-action-count::before", {
        display: notificationCount > 0 ? 'block' : 'none',
        content: `"${notificationCount > 9 ? "+9" : notificationCount}"`,
    }).commit();
}

Object.defineProperty(MHeaderBar, 'notificationCount', {
    set: function (value) {
        value = Math.round(value);
        if (!(0,_utils__WEBPACK_IMPORTED_MODULE_3__.isNaturalNumber)(value)) value = 0;
        notificationCount = value;
        updateNotificationCountText();
    },
    get: function () {
        return notificationCount;
    }
});


/***/ }),

/***/ 1875:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "U": () => (/* binding */ EMPTY_2_SPACES),
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _EmojiAnims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4670);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6628);
/* harmony import */ var _EmojiPicker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2948);
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1477);
/* harmony import */ var _tiutils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3421);






var EMPTY_2_SPACES = String.fromCharCode(0x2003);
var emojiCSSLoaded = false;
function loadEmojiCSS(){
    if (emojiCSSLoaded) return;
    emojiCSSLoaded = true;
    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__/* ["default"].documentReady.then */ .ZP.documentReady.then(() => {
        var styleSheet = {};
        for (var name in _EmojiAnims__WEBPACK_IMPORTED_MODULE_0__/* .EmojiAnimByIdent */ .M) {
            styleSheet['.as-emoji-token[data-text="' + name + '"]'] = {
                'background-image': 'url(' + _EmojiPicker__WEBPACK_IMPORTED_MODULE_2__/* ["default"].assetRoot */ .Z.assetRoot + '/static/x20/' + _EmojiAnims__WEBPACK_IMPORTED_MODULE_0__/* .EmojiAnimByIdent */ .M[name][1] + ')'
            }
        }

        (0,_utils__WEBPACK_IMPORTED_MODULE_3__.buildCss)(styleSheet)
    });
}


/***
 *
 * @param {TokenizeHyperInput} elt
 * @constructor
 */
function TITextController(elt) {
    loadEmojiCSS();
    this.elt = elt;
}

TITextController.prototype.setText = function (text) {
    this.elt.clearChild();
    this.elt.addChild((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .text2ContentElements */ .fw)(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 ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isNewLine */ .K0)(nodes[nodes.length - 1])) {
        nodes.pop();
    }
    return nodes.map(node => {
        if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isText */ .Gs)(node)) {
            return node.data;
        }
        else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isToken */ .hD)(node)) {
            return node.getAttribute('data-text') || '';
        }
        else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isNewLine */ .K0)(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 ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isNewLine */ .K0)(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 ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isTokenText */ .tk)(startCtn)) {
        startCtn = startCtn.parentElement;
    }

    if (endCtn === this.elt) {
        endCtn = this.elt.childNodes[endOffset];
        endOffset = 0;
    }
    else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isTokenText */ .tk)(endCtn)) {
        endCtn = endCtn.parentElement;
    }

    if (startCtn === endCtn) {
        if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isToken */ .hD)(startCtn)) {
            return startCtn.getAttribute('data-text');
        }
        else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isText */ .Gs)(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 ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isToken */ .hD)(endCtn)) {
                    res += node.getAttribute('data-text');
                }
                else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isText */ .Gs)(node)) {
                    res += node.data.substring(0, endOffset);
                }
                break;
            }
            else {
                if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isToken */ .hD)(node)) {
                    res += node.getAttribute('data-text');
                }
                else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isText */ .Gs)(node)) {
                    res += node.data;
                }
                else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isNewLine */ .K0)(node)) {
                    res += '\n';
                }
            }
        }
        else {
            if (startCtn === node) {
                started = true;
                if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isText */ .Gs)(node)) {
                    res += node.data.substring(startOffset);
                }
                else if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isToken */ .hD)(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 = (0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .text2ContentElements */ .fw)(text, { tagMap: this.elt.tagMap });
    var startCtn = range.startContainer;
    var at;
    if ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isTokenText */ .tk)(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 ((0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isText */ .Gs)(at) && (0,_tiutils__WEBPACK_IMPORTED_MODULE_4__/* .isText */ .Gs)(newNode)) {
            at.data += newNode.data;
        }
        else {
            this.elt.addChildAfter(newNode, at);
            at = newNode;
        }
    }
};


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TITextController);

/***/ }),

/***/ 3421:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Dx": () => (/* binding */ tokenizeMessageText),
/* harmony export */   "Gs": () => (/* binding */ isText),
/* harmony export */   "K0": () => (/* binding */ isNewLine),
/* harmony export */   "ot": () => (/* binding */ getFirstTextNode),
/* harmony export */   "No": () => (/* binding */ getLastTextNode),
/* harmony export */   "tk": () => (/* binding */ isTokenText),
/* harmony export */   "hD": () => (/* binding */ isToken),
/* harmony export */   "M4": () => (/* binding */ findNextTextNode),
/* harmony export */   "LD": () => (/* binding */ findPrevTextNode),
/* harmony export */   "fw": () => (/* binding */ text2ContentElements)
/* harmony export */ });
/* harmony import */ var _EmojiAnims__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4670);
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3855);
/* harmony import */ var _TITextController__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1875);




function tokenizeMessageText(text) {
    var emojis = _EmojiAnims__WEBPACK_IMPORTED_MODULE_0__/* .EmojiAnimByIdent */ .M;
    var splitter = Object.keys(_EmojiAnims__WEBPACK_IMPORTED_MODULE_0__/* .EmojiAnimByIdent */ .M).concat(['\n']);
    var tagTokens = text.match(/@\[id:\d+]/g) || [];
    var otherTokens = text.split(/@\[id:\d+]/g);

    var tokens = otherTokens.reduce((ac, cr, i) => {
        ac.push(cr);
        if (i < tagTokens.length) ac.push(tagTokens[i]);
        return ac;
    }, []);

    tokens = splitter.reduce((chain, splitter) => {
        return chain.reduce((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(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 = node => {
    return node && node.nodeType === Node.TEXT_NODE;
}

var isNewLine = node => {
    return node && node.tagName === 'BR';
}

/***
 *
 * @param {Text|AElement}node
 * @returns {null|*}
 */
var 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 = 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 = node => {
    if (node.nodeType !== Node.TEXT_NODE) return false;
    return isToken(node.parentElement);
}

var isToken = node => {
    return node && node.classList && (node.classList.contains('as-emoji-token') || node.classList.contains('as-tag-token'));
}


function findNextTextNode(root, current) {
    var 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 = 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((token) => {
        var textOfTag;
        switch (token.type) {
            case 'NEW_LINE':
                return (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)('br');
            case 'EMOJI':
                return (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({
                    tag: 'span',
                    class: 'as-emoji-token',
                    attr: {
                        'data-display': _TITextController__WEBPACK_IMPORTED_MODULE_2__/* .EMPTY_2_SPACES */ .U,
                        'data-text': token.value
                    },
                    child: { text: _TITextController__WEBPACK_IMPORTED_MODULE_2__/* .EMPTY_2_SPACES */ .U }
                })
            case 'TAG':
                textOfTag = opt.tagMap && opt.tagMap[token.value];
                return (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({
                    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 (0,_ACore__WEBPACK_IMPORTED_MODULE_1__._)({ text: token.value });
        }
    });
}

/***/ }),

/***/ 9346:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(863);


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 (0,absol_src_HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* .hitElement */ .EY)(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 __WEBPACK_DEFAULT_EXPORT__ = (BlurTrigger);


/***/ }),

/***/ 1866:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/**
 * @deprecated use TextMeasure instead
 * @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 __WEBPACK_DEFAULT_EXPORT__ = (TextMeasurement);



/***/ }),

/***/ 1477:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "getSelectionRangeDirection": () => (/* binding */ getSelectionRangeDirection),
/* harmony export */   "setSelectionRange": () => (/* binding */ setSelectionRange),
/* harmony export */   "insertTextAtCursor": () => (/* binding */ insertTextAtCursor),
/* harmony export */   "contenteditableTextOnly": () => (/* binding */ contenteditableTextOnly),
/* harmony export */   "getSelectionText": () => (/* binding */ getSelectionText),
/* harmony export */   "positiveIntMod": () => (/* binding */ positiveIntMod),
/* harmony export */   "nearFloor": () => (/* binding */ nearFloor),
/* harmony export */   "measureText": () => (/* binding */ measureText),
/* harmony export */   "getCaretPosition": () => (/* binding */ getCaretPosition),
/* harmony export */   "preventNotNumberInput": () => (/* binding */ preventNotNumberInput),
/* harmony export */   "buildCss": () => (/* binding */ buildCss),
/* harmony export */   "forwardEvent": () => (/* binding */ forwardEvent),
/* harmony export */   "forwardMethod": () => (/* binding */ forwardMethod),
/* harmony export */   "openFileDialog": () => (/* binding */ openFileDialog),
/* harmony export */   "openYesNoQuestionDialog": () => (/* binding */ openYesNoQuestionDialog),
/* harmony export */   "charWidth": () => (/* binding */ charWidth),
/* harmony export */   "estimateWidth14": () => (/* binding */ estimateWidth14),
/* harmony export */   "getTextNodeBounds": () => (/* binding */ getTextNodeBounds),
/* harmony export */   "absCeil": () => (/* binding */ absCeil),
/* harmony export */   "zeroPadding": () => (/* binding */ zeroPadding),
/* harmony export */   "cleanMenuItemProperty": () => (/* binding */ cleanMenuItemProperty),
/* harmony export */   "getTagListInTextMessage": () => (/* binding */ getTagListInTextMessage),
/* harmony export */   "swapElt": () => (/* binding */ swapElt),
/* harmony export */   "swapChildrenInElt": () => (/* binding */ swapChildrenInElt),
/* harmony export */   "replaceChildrenInElt": () => (/* binding */ replaceChildrenInElt),
/* harmony export */   "findVScrollContainer": () => (/* binding */ findVScrollContainer),
/* harmony export */   "vScrollIntoView": () => (/* binding */ vScrollIntoView),
/* harmony export */   "fileSize2Text": () => (/* binding */ fileSize2Text),
/* harmony export */   "isDateTimeFormatToken": () => (/* binding */ isDateTimeFormatToken),
/* harmony export */   "normalizeMinuteOfMillis": () => (/* binding */ normalizeMinuteOfMillis),
/* harmony export */   "millisToClock": () => (/* binding */ millisToClock),
/* harmony export */   "clockToMillis": () => (/* binding */ clockToMillis),
/* harmony export */   "isRealNumber": () => (/* binding */ isRealNumber),
/* harmony export */   "isNaturalNumber": () => (/* binding */ isNaturalNumber),
/* harmony export */   "isInteger": () => (/* binding */ isInteger),
/* harmony export */   "parseLocalFloat": () => (/* binding */ parseLocalFloat),
/* harmony export */   "formatLocalFloat": () => (/* binding */ formatLocalFloat),
/* harmony export */   "isURLAddress": () => (/* binding */ isURLAddress),
/* harmony export */   "fileAccept": () => (/* binding */ fileAccept),
/* harmony export */   "fileInfoOf": () => (/* binding */ fileInfoOf),
/* harmony export */   "addElementsBefore": () => (/* binding */ addElementsBefore),
/* harmony export */   "addElementAfter": () => (/* binding */ addElementAfter),
/* harmony export */   "addElementClassName": () => (/* binding */ addElementClassName),
/* harmony export */   "findMaxZIndex": () => (/* binding */ findMaxZIndex),
/* harmony export */   "getAncestorElementOf": () => (/* binding */ getAncestorElementOf),
/* harmony export */   "checkedValues2RootTreeValues": () => (/* binding */ checkedValues2RootTreeValues),
/* harmony export */   "rootTreeValues2CheckedValues": () => (/* binding */ rootTreeValues2CheckedValues),
/* harmony export */   "copySelectionItemArray": () => (/* binding */ copySelectionItemArray),
/* harmony export */   "isScrolledToBottom": () => (/* binding */ isScrolledToBottom),
/* harmony export */   "parseDMS": () => (/* binding */ parseDMS),
/* harmony export */   "parseLatLng": () => (/* binding */ parseLatLng),
/* harmony export */   "normalizeLatLngString": () => (/* binding */ normalizeLatLngString),
/* harmony export */   "implicitLatLng": () => (/* binding */ implicitLatLng),
/* harmony export */   "getMapZoomLevel": () => (/* binding */ getMapZoomLevel),
/* harmony export */   "latLngDistance": () => (/* binding */ latLngDistance),
/* harmony export */   "keyStringOf": () => (/* binding */ keyStringOf),
/* harmony export */   "jsStringOf": () => (/* binding */ jsStringOf),
/* harmony export */   "calcDTQueryHash": () => (/* binding */ calcDTQueryHash),
/* harmony export */   "replaceInObject": () => (/* binding */ replaceInObject),
/* harmony export */   "replaceFileInObject": () => (/* binding */ replaceFileInObject),
/* harmony export */   "revokeResource": () => (/* reexport safe */ absol_src_DataStructure_Object__WEBPACK_IMPORTED_MODULE_9__.bU),
/* harmony export */   "isNone": () => (/* binding */ isNone),
/* harmony export */   "wrapWord": () => (/* binding */ wrapWord),
/* harmony export */   "wrapText": () => (/* binding */ wrapText),
/* harmony export */   "listenDomContentChange": () => (/* binding */ listenDomContentChange),
/* harmony export */   "getMaterialDesignIconNames": () => (/* binding */ getMaterialDesignIconNames)
/* harmony export */ });
/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3855);
/* harmony import */ var absol_src_String_stringUtils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2973);
/* harmony import */ var _YesNoQuestionDialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5466);
/* harmony import */ var _Modal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9826);
/* harmony import */ var absol_src_Converter_ext2MineType__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9691);
/* harmony import */ var _tool_TextMeasurement__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1866);
/* harmony import */ var absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7807);
/* harmony import */ var absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(2759);
/* harmony import */ var absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7951);
/* harmony import */ var absol_src_DataStructure_Object__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(2722);










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 measureText(text, font) {
    // re-use canvas object for better performance
    var canvas = measureText.canvas || (measureText.canvas = document.createElement("canvas"));
    var context = canvas.getContext("2d");
    if (font)
        context.font = font;
    var metrics = context.measureText(text);
    return metrics;
}


function 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 || getCaretPosition(this) > 0)) event.preventDefault();
            }
            else event.preventDefault();
        }
    });
}


function buildCss(StyleSheet) {
    return (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
        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 = _ACore__WEBPACK_IMPORTED_MODULE_0__/* ["default"]._ */ .Z._({
            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(resolve => {
        if (window.ModalElement && window.ModalElement.question) {
            window.ModalElement.question({
                title: title,
                message: message,
                onclick: function (sel) {
                    if (sel === 0) {
                        resolve(true);
                    }
                    else {
                        resolve(false);
                    }
                }
            });
        }
        else {
            var modal = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)({
                tag: _Modal__WEBPACK_IMPORTED_MODULE_2__/* ["default"].tag */ .Z.tag,
                child: {
                    tag: _YesNoQuestionDialog__WEBPACK_IMPORTED_MODULE_1__/* ["default"].tag */ .Z.tag,
                    props: {
                        textYes: 'Có',
                        textNo: 'Không',
                        message: message,
                        dialogTitle: title
                    },
                    on: {
                        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 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 = absol_src_Math_Rectangle__WEBPACK_IMPORTED_MODULE_6__/* ["default"].fromClientRect */ .Z.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(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 = (0,_ACore__WEBPACK_IMPORTED_MODULE_0__._)('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);
    (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)(e1).clearChild();
    (0,_ACore__WEBPACK_IMPORTED_MODULE_0__.$)(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((elt) => {
        elt.remove();
    });
    elt.addChild(nChildren);
}

function findVScrollContainer(elt) {
    if (!elt) return null;
    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) {
    //ND: like (Next day)
    return ['d', 'dd', 'M', 'MM', 'y', 'yyyy', 'h', 'hh', 'H', 'HH', 'm', 'mm', 'a', 'w', 'ww', 'Q', 'QQ', 'ND'].indexOf(text) >= 0;
}

var normalizeMinuteOfMillis = mil => {
    mil = mil >> 0;
    mil = Math.floor(mil / 6e4) * 6e4;
    if (mil === absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_5__.MILLIS_PER_DAY) return mil;
    mil = mil % absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_5__.MILLIS_PER_DAY;
    if (mil < 0) mil += absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_5__.MILLIS_PER_DAY;
    return mil;
};


/**
 *
 * @param {number} mil
 * @returns {{hour: number, minute: number, isNextDate: boolean}}
 */
var 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 = (hour, minute) => {
    var res = hour * absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_5__.MILLIS_PER_HOUR + minute * absol_src_Time_datetime__WEBPACK_IMPORTED_MODULE_5__.MILLIS_PER_MINUTE;
    if (isNaturalNumber(res)) return res;
    return null;
};


function isRealNumber(value) {
    return (isFinite(value) && (typeof value === "number"));
}

function isNaturalNumber(value) {
    return (isInteger(value) && value >= 0);
}

function isInteger(value) {
    return (isFinite(value) && (typeof value === "number") && Math.floor(value) === value);
}

/****
 *
 * @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 = o => {
        var parts;
        if (typeof o === "string") {
            res.name = res.name || (o.split('/').pop() || '').replace(/%([\dA-Fa-f][\dA-Fa-f])/g, (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 ((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 = absol_src_Converter_ext2MineType__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z[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(cls => 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 = (x) => (typeof x) + x;
    var dict = values.reduce((ac, cr) => {
        ac[keyOf(cr)] = true;
        return ac;
    }, {});
    var checkScan = item => {
        if (dict[keyOf(item.value)]) return true;
        if (item.items && item.items.length > 0) {
            item.items.forEach(sItem => checkScan(sItem));
            dict[keyOf(item.value)] = item.items.every(sItem => dict[keyOf(sItem.value)]);
        }
        return dict[keyOf(item.value)];
    }

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

    items.forEach(sItem => scan(sItem));
    return res;
}


function rootTreeValues2CheckedValues(items, values) {
    var keyOf = (x) => (typeof x) + x;
    var dict = values.reduce((ac, cr) => {
        ac[keyOf(cr)] = true;
        return ac;
    }, {});
    var res = [];
    var visit = (item, checked) => {
        if (checked) res.push(item.value);
        if (item.items && item.items.length > 0) {
            item.items.forEach(cr => visit(cr, checked || dict[keyOf(cr.value)]));
        }
    }

    items.forEach(cr => 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((item) => !item.noView);
    }
    if (opt.removeNewLine) {
        items.forEach(it => {
            if (it.text && it.text.indexOf && it.text.indexOf('\n') >= 0) {
                it.text = it.text.replace(/[\r\n]/g, '');
            }
        })
    }
    return items.map(item => {
        var newItem;
        if (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);
}

/**
 * parse a DMS string into latitude and longitude from google maps
 * @param {string} input
 * @returns {{latitude: number, longitude: number}|null}
 */
function parseDMS(input) {
    input = input.trim();
    var regex = /([+-]?\d+)°(\d+)'([\d.]+)"([NS])\s*,?\s*([+-]?\d+)°(\d+)'([\d.]+)"([EW])/;
    var match = input.match(regex);

    if (!match) {
        return null;
    }

    var [, latDeg, latMin, latSec, latDir, lngDeg, lngMin, lngSec, lngDir] = match;

    // Convert DMS to decimal
    var lat = (parseInt(latDeg) + parseInt(latMin) / 60 + parseFloat(latSec) / 3600) * (latDir === "N" ? 1 : -1);
    var lng = (parseInt(lngDeg) + parseInt(lngMin) / 60 + parseFloat(lngSec) / 3600) * (lngDir === "E" ? 1 : -1);

    return { latitude: lat, longitude: lng };
}

function parseLatLng(value) {
    value = value.trim();
    value = value.replace(/(^\(\s*)|(\s*\)*)/g, '');
    var nums = value.split(/\s*,\s*/);
    if (nums.length !== 2) return null;
    nums = nums.map((t) => {
        return parseFloat(t);
    });
    if (isRealNumber(nums[0]) && isRealNumber(nums[1])) {
        return { latitude: nums[0], longitude: nums[1] };
    }
    return null;
}

function normalizeLatLngString(text) {
    var latLgn = parseDMS(text) || parseLatLng(text);
    var lat, lng;
    if (latLgn) {
        lat = latLgn.latitude;
        lng = latLgn.longitude;
        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 '';
}

function implicitLatLng(value) {
    var latlng = null;
    var nums;
    if (typeof value === "string") {
        latlng = parseDMS(value);
        if (latlng) {
            latlng = new google.maps.LatLng(latlng.latitude, latlng.longitude);
        }
        else {
            latlng = parseLatLng(value);
            if (latlng) {

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

    if (!bounds) return 17;
    if (!mapDim) return 17;
    var ne = bounds.getNorthEast();
    var sw = bounds.getSouthWest();
    if (!ne || !ne.lat) return 17;
    if (!sw || !sw.lat) return 17;

    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 (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 = 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(val => keyStringOf(val)).join(',') + ')';
        }
        else {
            keys = Object.keys(o);
            keys.sort();
            return 'o(' + keys.map(key => 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 = 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 (0,absol_src_String_stringUtils__WEBPACK_IMPORTED_MODULE_8__/* .stringHashCode */ .$)(s);
}


function replaceInObject(o, replacer, test) {
    return new Promise((rs) => {
        var sync = [];

        function visit(so) {
            Object.keys(so).forEach((key) => {
                var newValue;
                if (test(so[key])) {
                    newValue = replacer(so[key], key, so);
                    if (newValue && newValue.then) {
                        sync.push(newValue);
                        newValue.then(newValue => so[key] = newValue);
                    }
                    else {
                        so[key] = newValue;
                    }
                }
                else if (typeof so[key] === "object" && so[key]) {
                    visit(so[key]);
                }
            });
        }

        visit(o);

        Promise.all(sync).then(() => {
            rs(o);
        })
    });
}

function replaceFileInObject(o, replacer) {
    return replaceInObject(o, replacer, (value, key, object) => {
        return (value instanceof File) || (value instanceof Blob);
    });
}



function isNone(x) {
    return x === null || x === undefined;
}

var measureTool = new _tool_TextMeasurement__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z();


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


var listenMethodNames = ['appendChild', 'insertBefore', 'addStyle', 'removeStyle', 'removeChild', 'remove'];
var originalMethodNames = listenMethodNames.map(x => 'original_' + x);

function listenDomContentChange(elt, callback) {
    function emit(name, event) {
        if (!callback) return;
        if (name === 'change') {
            if (typeof callback === "function") callback(event);
            else if (callback.change) {
                callback.change(event);
            }
        }
        else if (typeof callback[name] === "function") callback[name](event);
    }

    var overrideMethods = listenMethodNames.map((name, i) => {
        if (i < 2) {
            return function (child) {
                var res = this[originalMethodNames[i]].apply(this, arguments);
                addHook(child);
                emit('change', { target: this, method: name, args: Array.prototype.slice.call(arguments) })
                return res;
            }
        }
        else if (i < 4) {
            return function () {
                var res = this[originalMethodNames[i]].apply(this, arguments);
                if (arguments[0] === 'display')
                    emit('change', { target: this, method: name, args: Array.prototype.slice.call(arguments) });
                return res;
            }
        }
        else if (i < 5) {
            return function (child) {
                var res = this[originalMethodNames[i]].apply(this, arguments);
                removeHook(child);
                emit('change', { target: this, method: name, args: Array.prototype.slice.call(arguments) });
                return res;
            }
        }
        else {
            return function () {
                var res = this[originalMethodNames[i]].apply(this, arguments);
                removeHook(this);
                emit('change', { target: this, method: name, args: Array.prototype.slice.call(arguments) });
                return res;
            }
        }
    });
    /**
     *
     * @param {HTMLElement|AElement|Node} child
     */
    var addHook = (child) => {
        if (!child) return;
        if (child.nodeType !== Node.ELEMENT_NODE) return;
        if (child.domHooked) return;
        child.domHooked = true;
        var i;
        var ln;
        for (i = 0; i < listenMethodNames.length; ++i) {
            ln = listenMethodNames[i];
            if (!absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_7__/* ["default"].prototype */ .Z.prototype[ln] || absol_src_HTML5_AElement__WEBPACK_IMPORTED_MODULE_7__/* ["default"].prototype */ .Z.prototype[ln] === child[ln]) {
                child[originalMethodNames[i]] = child[ln];
                child[ln] = overrideMethods[i];
            }
        }

        if (callback && callback.scrollIntoView) {
            child.scrollIntoView1 = child.scrollIntoView;
            child.scrollIntoView = function () {
                emit('scrollIntoView', { target: this, method: name, args: Array.prototype.slice.call(arguments) });
            };
        }

        if (!child._azar_extendTags || Object.keys(child._azar_extendTags).length === 0) {
            for (i = 0; i < child.childNodes.length; ++i)
                addHook(child.childNodes[i]);
        }
    }

    var removeHook = (child) => {
        if (!child) return;
        if (child.nodeType !== Node.ELEMENT_NODE) return;
        if (!child.domHooked) return;
        delete child.domHooked;
        var i;
        for (i = 0; i < listenMethodNames.length; ++i) {
            if (child[originalMethodNames[i]]) {
                child[listenMethodNames[i]] = child[originalMethodNames[i]];
                delete child[originalMethodNames[i]];
            }
        }
        if (child.scrollIntoView1) {
            child.scrollIntoView = child.scrollIntoView1;
            delete child.scrollIntoView1;
        }
        for (i = 0; i < child.childNodes.length; ++i)
            removeHook(child.childNodes[i]);
    }

    addHook(elt);
}

var mdiLoadSync;

function getMaterialDesignIconNames() {
    if (mdiLoadSync) return mdiLoadSync;
    mdiLoadSync = fetch('https://absol.cf/vendor/materialdesignicons/materialdesignicons.css')
        .then(res => res.text()).then(text => {
            var regex = /\.mdi-([^:]+)::before/g;
            var iconNames = [];
            var iconNameMatch;
            do {
                iconNameMatch = regex.exec(text);
                if (iconNameMatch)
                    iconNames.push(iconNameMatch[1]);

            } while (iconNameMatch);
            return iconNames;
        }).catch(err => {
            mdiLoadSync = null;
        });
    return mdiLoadSync;
}

/***/ }),

/***/ 2243:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (CMDRunner);



/***/ }),

/***/ 5721:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Code_noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1432);

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 = _Code_noop__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
Context.prototype.onStop = _Code_noop__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
Context.prototype.onStart = _Code_noop__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
Context.prototype.onResume = _Code_noop__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
Context.prototype.onPause = _Code_noop__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
Context.prototype.onDetached = _Code_noop__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
Context.prototype.onAttached = _Code_noop__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Context);

/***/ }),

/***/ 6372:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (ContextManager);

/***/ }),

/***/ 4861:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ AppPattern_Fragment)
});

// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/ContextManager.js
var ContextManager = __webpack_require__(6372);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/Context.js
var Context = __webpack_require__(5721);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/GrandContext.js




/***
 * @extends Context
 * @constructor
 */
function GrandContext(){
    Context/* default.call */.Z.call(this);
    this.ctxMng = new ContextManager/* default */.Z();
}

OOP/* default.mixClass */.ZP.mixClass(GrandContext, Context/* default */.Z);

/* harmony default export */ const AppPattern_GrandContext = (GrandContext);
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Fragment.js





/***
 * @extends GrandContext
 * @constructor
 */
function Fragment() {
    AppPattern_GrandContext.call(this);
}

OOP/* default.mixClass */.ZP.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/* default */.Z;

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

/* harmony default export */ const AppPattern_Fragment = (Fragment);

/***/ }),

/***/ 4446:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/***
 *
 * @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 __WEBPACK_DEFAULT_EXPORT__ = (Ref);







/***/ }),

/***/ 1312:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (VarScope);



/***/ }),

/***/ 1432:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ noop)
/* harmony export */ });
function noop(){};

/***/ }),

/***/ 5650:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (/* binding */ safeThrow)
/* harmony export */ });
function safeThrow(error) {
    var func = function () {
        if (error.stack) {
            try {
                error.message += '\n' + error.stack;
            }
            catch (e){
                //can not modify message
            }
        }
        throw error;
    }
    if (window.Thread && window.Thread.setTimeout) {
        window.Thread.setTimeout({
            func: func,
            time: 1,
            type: 'background',
            args: [],
            stack: error.stack || ""
        });
    }
    else {
        setTimeout(func, 1);
    }
}

/***/ }),

/***/ 257:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _JSMaker_TemplateString__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(369);


function Color(rgba) {
    this.rgba = rgba.slice();
}

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

/***
 *
 * @returns {string}
 */
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.prototype.toHex4 = function () {
    return this.rgba.map(function (b) {
        b = b * 255 / 17 >> 0;
        return b.toString(16);
    }).join('');
};

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


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


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

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


/***
 *
 * @returns {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.fromHSB(h, s, b);
};


Color.prototype.getHightContrastColor = Color.prototype.getHighContrastColor;

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.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.prototype.getContrastYIQ = function () {
    var r = this.rgba[0] * 255;
    var g = this.rgba[1] * 255;
    var b = this.rgba[2] * 255;
    var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
    return (yiq >= 128) ? new Color([0, 0, 0, 1]) : new Color([1, 1, 1, 1]);
};

/**
 *
 * @returns {Color}
 */
Color.prototype.clone = function () {
    return new 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.prototype.toString = function (mode) {
    mode = mode || 'rgba';
    mode = mode.toLocaleLowerCase();
    return Color.templates[mode](this);
};

/***
 *
 * @param notStandard
 * @param {number[]} hsbWeight
 * @returns {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.namedColors).concat(notStandard ? Object.keys(Color.nonStandarNamedColors) : []).forEach(function (name) {
        var c = Color.parse(Color.namedColors[name] || Color.nonStandarNamedColors[name]);
        var cHSBA = c.toHSBA();
        var cDist = Math.abs(hsba[0] - cHSBA[0]) * hsbWeight[0] + Math.abs(hsba[1] - cHSBA[1]) * hsbWeight[1] + Math.abs(hsba[2] - cHSBA[2]) * hsbWeight[2];
        if (cDist < dist) {
            dist = cDist;
            bestMatch = name;
        }
    });
    return bestMatch;
};

Color.templates = [
    ['rgba', 'rgba', 'rgba({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}}, {{x[3]}})'],
    ['rgb', 'rgba', 'rgb({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}})'],
    ['hsl', 'toHSLA()', 'hsl({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'],
    ['hsla', 'toHSLA()', 'hsla({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'],
    ['hsb', 'toHSBA()', 'hsb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'],
    ['hsba', 'toHSBA()', 'hsba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'],
    ['hex3', 'toHex3()', '#{{x}}'],
    ['hex4', 'toHex4()', '#{{x}}'],
    ['hex6', 'toHex6()', '#{{x}}'],
    ['hex8', 'toHex8()', '#{{x}}'],
    ['hwb', 'toHWBA()', 'hwb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'],
    ['hwba', 'toHWBA()', 'hwba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'],
    ['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__WEBPACK_IMPORTED_MODULE_0__/* ["default"].parse */ .Z.parse(cr[2]).toJSCode() + ';'
    ].join('\n'));
    return ac;
}, {});


Color.regexes = {
    whiteSpace: /\s*/, // Match zero or more whitespace characters.
    integer: /(\d{1,3})/, // Match integers: 79, 255, etc.
    decimal: /((?:\d+(?:\.\d+)?)|(?:\.\d+))/, // Match 129.6, 79, .9, etc.
    percent: /((?:\d+(?:\.\d+)?)|(?:\.\d+))%/, // Match 12.9%, 79%, .9%, etc.
    hex3: /^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,

    // Match colors in format #XXXX, e.g. #5123.
    hex4: /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,

    // Match colors in format #XXXXXX, e.g. #b4d455.
    hex6: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,

    // Match colors in format #XXXXXXXX, e.g. #b4d45535.
    hex8: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i
};


Color.regexes.percent = new RegExp(Color.regexes.decimal.source + '%');

Color.regexes.rgb = new RegExp(
    [
        '^rgb\\(',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

Color.regexes.rgbPercent = new RegExp(
    [
        '^rgb\\(',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

// Match colors in format rgb(R, G, B, A), e.g. rgb(255, 0, 128, 0.25).
Color.regexes.rgba = new RegExp(
    [
        '^rgba\\(',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        ',',
        Color.regexes.decimal.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

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

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

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

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

Color.regexes.hwb = new RegExp(
    [
        '^hwb\\(',
        Color.regexes.integer.source,
        '[deg]*',
        ',',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

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

Color.regexes.cmyk = new RegExp(
    [
        '^cmyk\\(',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

/***
 *
 * @param {number} code
 * @param {32|24|16|8} bits
 * @returns {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([r, g, b, a]);
};

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

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

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

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

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

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

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

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

Color.fromCMYK = function (c, m, y, k) {
    var rgba = this.cmykToRGB([c, m, y, k]).concat([0]);
    return new Color(rgba);
};

/**
 * @param {String} text
 * @returns {Color}
 */
Color.parse = function (text) {
    if (this.namedColors[text]) text = this.namedColors[text];
    if (this.nonStandarNamedColors[text]) text = this.nonStandarNamedColors[text];
    if (this.regexes.hex8.test(text)) {
        return this.fromRGBA.apply(this,
            this.regexes.hex8.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v, 16) / 255;
                }));
    }
    else if (this.regexes.hex6.test(text)) {
        return this.fromRGB.apply(this,
            this.regexes.hex6.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v, 16) / 255;
                }));
    }
    else if (this.regexes.hex4.test(text)) {
        return this.fromRGBA.apply(this,
            this.regexes.hex4.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v + v, 16) / 255;
                }));
    }
    else if (this.regexes.hex3.test(text)) {
        return this.fromRGB.apply(this,
            this.regexes.hex3.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v + v, 16) / 255;
                }));
    }
    else if (this.regexes.rgba.test(text)) {
        return this.fromRGBA.apply(this,
            this.regexes.rgba.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return i < 3 ? parseFloat(v) / 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.namedColors = {
    aliceblue: '#f0f8ff',
    antiquewhite: '#faebd7',
    aqua: '#00ffff',
    aquamarine: '#7fffd4',
    azure: '#f0ffff',
    beige: '#f5f5dc',
    bisque: '#ffe4c4',
    black: '#000000',
    blanchedalmond: '#ffebcd',
    blue: '#0000ff',
    blueviolet: '#8a2be2',
    brown: '#a52a2a',
    burlywood: '#deb887',
    cadetblue: '#5f9ea0',
    chartreuse: '#7fff00',
    chocolate: '#d2691e',
    coral: '#ff7f50',
    cornflowerblue: '#6495ed',
    cornsilk: '#fff8dc',
    crimson: '#dc143c',
    cyan: '#00ffff',
    darkblue: '#00008b',
    darkcyan: '#008b8b',
    darkgoldenrod: '#b8860b',
    darkgray: '#a9a9a9',
    darkgreen: '#006400',
    darkgrey: '#a9a9a9',
    darkkhaki: '#bdb76b',
    darkmagenta: '#8b008b',
    darkolivegreen: '#556b2f',
    darkorange: '#ff8c00',
    darkorchid: '#9932cc',
    darkred: '#8b0000',
    darksalmon: '#e9967a',
    darkseagreen: '#8fbc8f',
    darkslateblue: '#483d8b',
    darkslategray: '#2f4f4f',
    darkslategrey: '#2f4f4f',
    darkturquoise: '#00ced1',
    darkviolet: '#9400d3',
    deeppink: '#ff1493',
    deepskyblue: '#00bfff',
    dimgray: '#696969',
    dimgrey: '#696969',
    dodgerblue: '#1e90ff',
    firebrick: '#b22222',
    floralwhite: '#fffaf0',
    forestgreen: '#228b22',
    fuchsia: '#ff00ff',
    gainsboro: '#dcdcdc',
    ghostwhite: '#f8f8ff',
    gold: '#ffd700',
    goldenrod: '#daa520',
    gray: '#808080',
    green: '#008000',
    greenyellow: '#adff2f',
    grey: '#808080',
    honeydew: '#f0fff0',
    hotpink: '#ff69b4',
    indianred: '#cd5c5c',
    indigo: '#4b0082',
    ivory: '#fffff0',
    khaki: '#f0e68c',
    lavender: '#e6e6fa',
    lavenderblush: '#fff0f5',
    lawngreen: '#7cfc00',
    lemonchiffon: '#fffacd',
    lightblue: '#add8e6',
    lightcoral: '#f08080',
    lightcyan: '#e0ffff',
    lightgoldenrodyellow: '#fafad2',
    lightgray: '#d3d3d3',
    lightgreen: '#90ee90',
    lightgrey: '#d3d3d3',
    lightpink: '#ffb6c1',
    lightsalmon: '#ffa07a',
    lightseagreen: '#20b2aa',
    lightskyblue: '#87cefa',
    lightslategray: '#778899',
    lightslategrey: '#778899',
    lightsteelblue: '#b0c4de',
    lightyellow: '#ffffe0',
    lime: '#00ff00',
    limegreen: '#32cd32',
    linen: '#faf0e6',
    magenta: '#ff00ff',
    maroon: '#800000',
    mediumaquamarine: '#66cdaa',
    mediumblue: '#0000cd',
    mediumorchid: '#ba55d3',
    mediumpurple: '#9370db',
    mediumseagreen: '#3cb371',
    mediumslateblue: '#7b68ee',
    mediumspringgreen: '#00fa9a',
    mediumturquoise: '#48d1cc',
    mediumvioletred: '#c71585',
    midnightblue: '#191970',
    mintcream: '#f5fffa',
    mistyrose: '#ffe4e1',
    moccasin: '#ffe4b5',
    navajowhite: '#ffdead',
    navy: '#000080',
    oldlace: '#fdf5e6',
    olive: '#808000',
    olivedrab: '#6b8e23',
    orange: '#ffa500',
    orangered: '#ff4500',
    orchid: '#da70d6',
    palegoldenrod: '#eee8aa',
    palegreen: '#98fb98',
    paleturquoise: '#afeeee',
    palevioletred: '#db7093',
    papayawhip: '#ffefd5',
    peachpuff: '#ffdab9',
    peru: '#cd853f',
    pink: '#ffc0cb',
    plum: '#dda0dd',
    powderblue: '#b0e0e6',
    purple: '#800080',
    red: '#ff0000',
    rosybrown: '#bc8f8f',
    royalblue: '#4169e1',
    saddlebrown: '#8b4513',
    salmon: '#fa8072',
    sandybrown: '#f4a460',
    seagreen: '#2e8b57',
    seashell: '#fff5ee',
    sienna: '#a0522d',
    silver: '#c0c0c0',
    skyblue: '#87ceeb',
    slateblue: '#6a5acd',
    slategray: '#708090',
    slategrey: '#708090',
    snow: '#fffafa',
    springgreen: '#00ff7f',
    steelblue: '#4682b4',
    tan: '#d2b48c',
    teal: '#008080',
    thistle: '#d8bfd8',
    tomato: '#ff6347',
    turquoise: '#40e0d0',
    violet: '#ee82ee',
    wheat: '#f5deb3',
    white: '#ffffff',
    whitesmoke: '#f5f5f5',
    yellow: '#ffff00',
    yellowgreen: '#9acd32',
    transparent: '#00000000'
};

Color.nonStandarNamedColors = {
    night: '#0C090A',
    gunmetal: '#2C3539',
    midnight: '#2B1B17',
    charcoal: '#34282C',
    oil: '#3B3131',
    blackcat: '#413839',
    iridium: '#3D3C3A',
    blackeel: '#463E3F',
    blackcow: '#4C4646',
    graywolf: '#504A4B',
    vampiregray: '#565051',
    graydolphin: '#5C5858',
    carbongray: '#625D5D',
    ashgray: '#666362',
    cloudygray: '#6D6968',
    smokeygray: '#726E6D',
    granite: '#837E7C',
    battleshipgray: '#848482',
    graycloud: '#B6B6B4',
    graygoose: '#D1D0CE',
    platinum: '#E5E4E2',
    metallicsilver: '#BCC6CC',
    bluegray: '#98AFC7',
    raven: '#657383',
    jetgray: '#616D7E',
    mistblue: '#646D7E',
    marbleblue: '#566D7E',
    shipcove: '#737CA1',
    mariner: '#4863A0',
    bluejay: '#2B547E',
    biscay: '#2B3856',
    navyblue: '#000080',
    bluewhale: '#342D7E',
    lapisblue: '#15317E',
    denimdarkblue: '#151B8D',
    earthblue: '#0000A0',
    cobaltblue: '#0020C2',
    blueberryblue: '#0041C2',
    sapphireblue: '#2554C7',
    blueeyes: '#1569C7',
    blueorchid: '#1F45FC',
    bluelotus: '#6960EC',
    lightslateblue: '#736AFF',
    windowsblue: '#357EC7',
    glacialblueice: '#368BC1',
    silkblue: '#488AC7',
    blueivy: '#3090C7',
    bluekoi: '#659EC7',
    columbiablue: '#87AFC7',
    babyblue: '#95B9C7',
    oceanblue: '#2B65EC',
    blueribbon: '#306EFF',
    bluedress: '#157DEC',
    butterflyblue: '#38ACEC',
    iceberg: '#56A5EC',
    crystalblue: '#5CB3FF',
    denimblue: '#79BAEC',
    dayskyblue: '#82CAFF',
    jeansblue: '#A0CFEC',
    blueangel: '#B7CEEC',
    pastelblue: '#B4CFEC',
    seablue: '#C2DFFF',
    coralblue: '#AFDCEC',
    robineggblue: '#BDEDFF',
    palebluelily: '#CFECEC',
    water: '#EBF4FA',
    lightslate: '#CCFFFF',
    lightaquamarine: '#93FFE8',
    electricblue: '#9AFEFF',
    cyanoraqua: '#00FFFF',
    tronblue: '#7DFDFE',
    bluezircon: '#57FEFF',
    bluelagoon: '#8EEBEC',
    celeste: '#50EBEC',
    bluediamond: '#4EE2EC',
    tiffanyblue: '#81D8D0',
    cyanopaque: '#92C7C7',
    bluehosta: '#77BFC7',
    northernlightsblue: '#78C7C7',
    jellyfish: '#46C7C7',
    bluegreen: '#7BCCB5',
    macawbluegreen: '#43BFC7',
    seaturtlegreen: '#438D80',
    greenishblue: '#307D7E',
    grayishturquoise: '#5E7D7E',
    beetlegreen: '#4C787E',
    camouflagegreen: '#78866B',
    sagegreen: '#848b79',
    hazelgreen: '#617C58',
    venomgreen: '#728C00',
    ferngreen: '#667C26',
    darkforestgreen: '#254117',
    mediumforestgreen: '#347235',
    seaweedgreen: '#437C17',
    pinegreen: '#387C44',
    junglegreen: '#347C2C',
    shamrockgreen: '#347C17',
    greenonion: '#6AA121',
    clovergreen: '#3EA055',
    greensnake: '#6CBB3C',
    aliengreen: '#6CC417',
    greenapple: '#4CC417',
    kellygreen: '#4CC552',
    zombiegreen: '#54C571',
    froggreen: '#99C68E',
    greenpeas: '#89C35C',
    dollarbillgreen: '#85BB65',
    iguanagreen: '#9CB071',
    avocadogreen: '#B2C248',
    pistachiogreen: '#9DC209',
    saladgreen: '#A1C935',
    hummingbirdgreen: '#7FE817',
    nebulagreen: '#59E817',
    stoplightgogreen: '#57E964',
    algaegreen: '#64E986',
    jadegreen: '#5EFB6E',
    emeraldgreen: '#5FFB17',
    dragongreen: '#6AFB92',
    mintgreen: '#98FF98',
    greenthumb: '#B5EAAA',
    lightjade: '#C3FDB8',
    teagreen: '#CCFB5D',
    slimegreen: '#BCE954',
    harvestgold: '#EDE275',
    sunyellow: '#FFE87C',
    cornyellow: '#FFF380',
    parchment: '#FFFFC2',
    cream: '#FFFFCC',
    blonde: '#FBF6D9',
    champagne: '#F7E7CE',
    vanilla: '#F3E5AB',
    tanbrown: '#ECE5B6',
    peach: '#FFE5B4',
    mustard: '#FFDB58',
    rubberduckyyellow: '#FFD801',
    brightgold: '#FDD017',
    goldenbrown: '#EAC117',
    macaroniandcheese: '#F2BB66',
    saffron: '#FBB917',
    beer: '#FBB117',
    cantaloupe: '#FFA62F',
    beeyellow: '#E9AB17',
    brownsugar: '#E2A76F',
    deeppeach: '#FFCBA4',
    gingerbrown: '#C9BE62',
    schoolbusyellow: '#E8A317',
    fallleafbrown: '#C8B560',
    orangegold: '#D4A017',
    sand: '#C2B280',
    cookiebrown: '#C7A317',
    caramel: '#C68E17',
    brass: '#B5A642',
    camelbrown: '#C19A6B',
    bronze: '#CD7F32',
    tigerorange: '#C88141',
    cinnamon: '#C58917',
    bulletshell: '#AF9B60',
    copper: '#B87333',
    wood: '#966F33',
    oakbrown: '#806517',
    armybrown: '#827B60',
    sandstone: '#786D5F',
    mocha: '#493D26',
    taupe: '#483C32',
    coffee: '#6F4E37',
    brownbear: '#835C3B',
    reddirt: '#7F5217',
    sepia: '#7F462C',
    orangesalmon: '#C47451',
    rust: '#C36241',
    redfox: '#C35817',
    sedona: '#CC6600',
    papayaorange: '#E56717',
    halloweenorange: '#E66C2C',
    pumpkinorange: '#F87217',
    constructionconeorange: '#F87431',
    sunriseorange: '#E67451',
    mangoorange: '#FF8040',
    basketballorange: '#F88158',
    tangerine: '#E78A61',
    beanred: '#F75D59',
    valentinered: '#E55451',
    shockingorange: '#E55B3C',
    scarlet: '#FF2400',
    rubyred: '#F62217',
    ferrarired: '#F70D1A',
    fireenginered: '#F62817',
    lavared: '#E42217',
    lovered: '#E41B17',
    grapefruit: '#DC381F',
    chestnutred: '#C34A2C',
    cherryred: '#C24641',
    mahogany: '#C04000',
    chillipepper: '#C11B17',
    cranberry: '#9F000F',
    redwine: '#990012',
    burgundy: '#8C001A',
    chestnut: '#954535',
    bloodred: '#7E3517',
    sangria: '#7E3817',
    plumpie: '#7D0541',
    velvetmaroon: '#7E354D',
    plumvelvet: '#7D0552',
    rosyfinch: '#7F4E52',
    puce: '#7F5A58',
    dullpurple: '#7F525D',
    khakirose: '#C5908E',
    pinkbow: '#C48189',
    lipstickpink: '#C48793',
    rose: '#E8ADAA',
    rosegold: '#ECC5C0',
    desertsand: '#EDC9AF',
    pigpink: '#FDD7E4',
    cottoncandy: '#FCDFFF',
    pinkbubblegum: '#FFDFDD',
    flamingopink: '#F9A7B0',
    pinkrose: '#E7A1B0',
    pinkdaisy: '#E799A3',
    cadillacpink: '#E38AAE',
    carnationpink: '#F778A1',
    blushred: '#E56E94',
    watermelonpink: '#FC6C85',
    violetred: '#F6358A',
    pinkcupcake: '#E45E9D',
    pinklemonade: '#E4287C',
    neonpink: '#F535AA',
    dimorphothecamagenta: '#E3319D',
    brightneonpink: '#F433FF',
    tulippink: '#C25A7C',
    roguepink: '#C12869',
    burntpink: '#C12267',
    bashfulpink: '#C25283',
    darkcarnationpink: '#C12283',
    violapurple: '#7E587E',
    purpleiris: '#571B7E',
    plumpurple: '#583759',
    purplemonster: '#461B7E',
    purplehaze: '#4E387E',
    eggplant: '#614051',
    grape: '#5E5A80',
    purplejam: '#6A287E',
    purpleflower: '#A74AC7',
    purpleamethyst: '#6C2DC7',
    purplesagebush: '#7A5DC7',
    lovelypurple: '#7F38EC',
    aztechpurple: '#893BFF',
    jasminepurple: '#A23BEC',
    purpledaffodil: '#B041FF',
    tyrianpurple: '#C45AEC',
    crocuspurple: '#9172EC',
    purplemimosa: '#9E7BFF',
    heliotropepurple: '#D462FF',
    purpledragon: '#C38EC7',
    lilac: '#C8A2C8',
    blushpink: '#E6A9EC',
    mauve: '#E0B0FF',
    wisteriapurple: '#C6AEC7',
    blossompink: '#F9B7FF',
    periwinkle: '#E9CFEC',
    lavenderpinocchio: '#EBDDE2',
    lavenderblue: '#E3E4FA',
    pearl: '#FDEEF4',
    milkwhite: '#FEFCFF'
};

/********************** COLOR CONVERTER *******************/


Color.rgbToHex = function (rgb) {
    return '#' + rgb.slice(0, 3).map(function (c) {
        var res = ((c * 255) >> 0).toString(16);
        if (res < 10) res = '0' + res;
        return res.toUpperCase();
    }).join('');
};

Color.rgbaToHex = function (rgb) {
    return '#' + rgb.map(function (c) {
        var res = ((c * 255) >> 0).toString(16);
        if (res < 10) res = '0' + res;
        return res.toUpperCase();
    }).join('');
};

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

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

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

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

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

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

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

Color.hsbaToHSLA = function (hsba) {
    var hue = hsba[0];
    var sat = hsba[1];
    var val = hsba[2];

    // Calculate lightness.
    var li = (2 - sat) * val / 2;

    // Convert saturation.
    if (li !== 0) {
        if (li === 1) {
            sat = 0;
        }
        else if (li < 0.5) {
            sat = sat / (2 - sat);
        }
        else {
            sat = sat * val / (2 - li * 2);
        }
    }

    // Hue and alpha stay the same.
    return [hue, sat, li, hsba[3]];
};

Color.hsbaToRGBA = function (hsba) {
    var hue = hsba[0] * 6; // We will split hue into 6 sectors.
    var sat = hsba[1];
    var val = hsba[2];

    var RGBA = [];

    if (sat === 0) {
        RGBA = [val, val, val, hsba[3]]; // Return early if grayscale.
    }
    else {
        var sector = Math.floor(hue);
        var tint1 = val * (1 - sat);
        var tint2 = val * (1 - sat * (hue - sector));
        var tint3 = val * (1 - sat * (1 + sector - hue));
        var red, green, blue;
        if (sector === 1) {
            // Yellow to green.
            red = tint2;
            green = val;
            blue = tint1;
        }
        else if (sector === 2) {
            // Green to cyan.
            red = tint1;
            green = val;
            blue = tint3;
        }
        else if (sector === 3) {
            // Cyan to blue.
            red = tint1;
            green = tint2;
            blue = val;
        }
        else if (sector === 4) {
            // Blue to magenta.
            red = tint3;
            green = tint1;
            blue = val;
        }
        else if (sector === 5) {
            // Magenta to red.
            red = val;
            green = tint1;
            blue = tint2;
        }
        else {
            // Red to yellow (sector could be 0 or 6).
            red = val;
            green = tint3;
            blue = tint1;
        }
        RGBA = [red, green, blue, hsba[3]];
    }
    return RGBA;
};


Color.hslaToHSBA = function (hsla) {
    var hue = hsla[0];
    var sat = hsla[1];
    var li = hsla[2];

    // Calculate brightness.
    var val;
    if (li < 0.5) {
        val = (1 + sat) * li;
    }
    else {
        val = li + sat - li * sat;
    }

    // Convert saturation.
    sat = 2 * (val - li) / val;

    // Hue and alpha stay the same.
    return [hue, sat, val, hsla[3]];
};

Color.hslaToRGBA = function (hsla) {
    var hue = hsla[0] * 6; // We will split hue into 6 sectors.
    var sat = hsla[1];
    var li = hsla[2];

    var RGBA = [];

    if (sat === 0) {
        RGBA = [li, li, li, hsla[3]]; // Return early if grayscale.
    }
    else {
        // Calculate brightness.
        var val;
        if (li < 0.5) {
            val = (1 + sat) * li;
        }
        else {
            val = li + sat - li * sat;
        }

        // Define zest.
        var zest = 2 * li - val;

        // Implement projection (project onto green by default).
        var hzvToRGB = function (hue, zest, val) {
            if (hue < 0) {
                // Hue must wrap to allow projection onto red and blue.
                hue += 6;
            }
            else if (hue >= 6) {
                hue -= 6;
            }
            if (hue < 1) {
                // Red to yellow (increasing green).
                return zest + (val - zest) * hue;
            }
            else if (hue < 3) {
                // Yellow to cyan (greatest green).
                return val;
            }
            else if (hue < 4) {
                // Cyan to blue (decreasing green).
                return zest + (val - zest) * (4 - hue);
            }
            else {
                // Blue to red (least green).
                return zest;
            }
        };

        // Perform projections, offsetting hue as necessary.
        RGBA = [
            hzvToRGB(hue + 2, zest, val),
            hzvToRGB(hue, zest, val),
            hzvToRGB(hue - 2, zest, val),
            hsla[3]
        ];
    }

    return RGBA;
};


Color.rgbaToHSBA = function (rgba) {
    var red = rgba[0];
    var green = rgba[1];
    var blue = rgba[2];

    var val = Math.max(red, green, blue);
    var chroma = val - Math.min(red, green, blue);

    var hue, sat;
    if (chroma === 0) {
        // Return early if grayscale.
        hue = 0;
        sat = 0;
    }
    else {
        sat = chroma / val;
        if (red === val) {
            // Magenta to yellow.
            hue = (green - blue) / chroma;
        }
        else if (green === val) {
            // Yellow to cyan.
            hue = 2 + (blue - red) / chroma;
        }
        else if (blue === val) {
            // Cyan to magenta.
            hue = 4 + (red - green) / chroma;
        }
        if (hue < 0) {
            // Confine hue to the interval [0, 1).
            hue += 6;
        }
        else if (hue >= 6) {
            hue -= 6;
        }
    }

    return [hue / 6, sat, val, rgba[3]];
};

Color.rgbaToHSLA = function (rgba) {
    var red = rgba[0];
    var green = rgba[1];
    var blue = rgba[2];

    var val = Math.max(red, green, blue);
    var min = Math.min(red, green, blue);
    var li = val + min; // We will halve this later.
    var chroma = val - min;

    var hue, sat;
    if (chroma === 0) {
        // Return early if grayscale.
        hue = 0;
        sat = 0;
    }
    else {
        if (li < 1) {
            sat = chroma / li;
        }
        else {
            sat = chroma / (2 - li);
        }
        if (red === val) {
            // Magenta to yellow.
            hue = (green - blue) / chroma;
        }
        else if (green === val) {
            // Yellow to cyan.
            hue = 2 + (blue - red) / chroma;
        }
        else if (blue === val) {
            // Cyan to magenta.
            hue = 4 + (red - green) / chroma;
        }
        if (hue < 0) {
            // Confine hue to the interval [0, 1).
            hue += 6;
        }
        else if (hue >= 6) {
            hue -= 6;
        }
    }

    return [hue / 6, sat, li / 2, rgba[3]];
};


Color.hwbaToHSBA = function (hwba) {
    return [hwba[0], 1 - hwba[1] / (1 - hwba[2]), 1 - hwba[2], hwba[3]];
};

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


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

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


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.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 __WEBPACK_DEFAULT_EXPORT__ = (Color);

/***/ }),

/***/ 9959:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "base64EncodeUnicode": () => (/* binding */ base64EncodeUnicode),
/* harmony export */   "base64DecodeUnicode": () => (/* binding */ base64DecodeUnicode),
/* harmony export */   "UnicodeBase64Converter": () => (/* binding */ UnicodeBase64Converter)
/* harmony export */ });
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
};

/***/ }),

/***/ 9691:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (ext2MineType);

/***/ }),

/***/ 4574:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "blobToFile": () => (/* binding */ blobToFile),
/* harmony export */   "dataURItoBlob": () => (/* binding */ dataURItoBlob),
/* harmony export */   "blobToArrayBuffer": () => (/* binding */ blobToArrayBuffer),
/* harmony export */   "stringToBlob": () => (/* binding */ stringToBlob)
/* harmony export */ });
/* harmony import */ var _ext2MineType__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9691);


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 : (_ext2MineType__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z[type] || 'text/plain');
    return new Blob([text], {
        type: mineTye
    });
}

/***/ }),

/***/ 7835:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "arrayUnique": () => (/* binding */ arrayUnique),
/* harmony export */   "arrayRemoveNone": () => (/* binding */ arrayRemoveNone),
/* harmony export */   "arrayIntersection": () => (/* binding */ arrayIntersection),
/* harmony export */   "arrayIsSubset": () => (/* binding */ arrayIsSubset),
/* harmony export */   "arrayCompare": () => (/* binding */ arrayCompare),
/* harmony export */   "arrayLexicographicalCompare": () => (/* binding */ arrayLexicographicalCompare),
/* harmony export */   "arrayShuffle": () => (/* binding */ arrayShuffle)
/* harmony export */ });
/***
 *
 * @param {(string|number|boolean|null)[]} arr
 * @returns {(string|number|boolean|null)[]}
 */
function arrayUnique(arr) {
    var dict = {};
    return arr.reduce(function (ac, cr) {
        var key = (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((ac, cr) => {
        ac[(typeof cr) + cr] = true;
        return ac;
    }, {});
    var dict2 = a2.reduce((ac, cr) => {
        ac[(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 = (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 = (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((ac, cr) => {
        ac[(typeof cr) + cr] = true;
        return ac;
    }, {});
    var res = true;
    var n = childArr.length;
    var k;
    for (var i = 0; i < n; ++i) {
        k = (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 {number[]} a1
 * @param {number[]} a2
 * @returns {number}
 */
function arrayLexicographicalCompare(a1, a2) {
    var minLength = Math.min(a1.length, a2.length);

    for (var i = 0; i < minLength; i++) {
        if (a1[i] < a2[i]) {
            return -1; // array1 nhỏ hơn array2
        } else if (a1[i] > a2[i]) {
            return 1; // array1 lớn hơn array2
        }
    }

    if (a1.length < a2.length) {
        return -1;
    } else if (a1.length > a2.length) {
        return 1;
    } else {
        return 0;
    }
}


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

/***/ }),

/***/ 5491:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports defaultCmp, heapDown, heapUp, heapify, heapPop, heapPush */
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 __WEBPACK_DEFAULT_EXPORT__ = (Heap);


/***/ }),

/***/ 2722:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "bU": () => (/* binding */ revokeResource),
/* harmony export */   "U": () => (/* binding */ observePropertyChanges),
/* harmony export */   "i3": () => (/* binding */ unobservePropertyChanges)
/* harmony export */ });
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 (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;
}


/**
 *
 * @param obj
 * @param {string|Array<string>} keys
 * @param {function} callback
 */
function observePropertyChanges(obj, keys, callback) {
    var value;
    if (Array.isArray(keys)) {
        keys.forEach(key => {
            observePropertyChanges(obj, key, callback);
        });
    }
    else {
        value = obj[keys];
        Object.defineProperty(obj, keys, {
            get: function () {
                return value;
            },
            set: function (newValue) {
                value = newValue;
                callback(keys, newValue);
            },
            configurable: true,
            enumerable: true
        });
    }
}


/**
 *
 * @param obj
 * @param {string|Array<string>} keys
 */
function unobservePropertyChanges(obj, keys) {
    var value;
    if (Array.isArray(keys)) {
        keys.forEach(key=>{
            unobservePropertyChanges(obj, key);
        })
    }
    else {
        value = obj[keys];
        delete obj[keys];
        obj[keys] = value;
    }
}

/***/ }),

/***/ 9399:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony export calcBenchmark */
/* harmony import */ var _BrowserRules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2777);
/* harmony import */ var _BrowserRules__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_BrowserRules__WEBPACK_IMPORTED_MODULE_0__);



/**
 *
 * @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;
    var isMobile = this.au.indexOf('KFFOWI') > -1 || this.au.toLowerCase().indexOf('mobile') > -1
        || this.device.type === 'iphone' || this.device.type === 'ipad' || this.device.type === 'android';
    Object.defineProperty(this, 'isMobile', {
        get: function () {
            return isMobile || window.isMobile || !!window['mobileHost'];
        },
        set: v => {
            //do nothing
        }
    });
    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 () {
                    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 () {
            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 (() => {
                var 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 __WEBPACK_DEFAULT_EXPORT__ = (new BrowserDetector((_BrowserRules__WEBPACK_IMPORTED_MODULE_0___default())));


/***/ }),

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

"use strict";


const external = __webpack_require__.g.external;
const re_msie = /\b(?:msie |ie |trident\/[0-9].*rv[ :])([0-9.]+)/;
const re_blackberry_10 = /\bbb10\b.+?\bversion\/([\d.]+)/;
const re_blackberry_6_7 = /\bblackberry\b.+\bversion\/([\d.]+)/;
const re_blackberry_4_5 = /\bblackberry\d+\/([\d.]+)/;

const NA_VERSION = "-1";

const 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) {
        const 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";
    }],
];

const 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) {
        const 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.]+)/]
];


const 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) {
        const 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.]+)/],
];
const 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) {
        const re_opera_old = /\bopera.+version\/([0-9.ab]+)/;
        const 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) {
        const 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,
};

/***/ }),

/***/ 7951:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(863);
/* harmony import */ var _Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9399);
/* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3349);





/***
 * @augments Node
 * @augments ChildNode
 * @augments ParentNode
 * @augments Element
 * @augments HTMLElement
 * @augments EventEmitter
 * @augments ElementCSSInlineStyle
 * @constructor
 */
function AElement() {
    _EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* ["default"].call */ .ZP.call(this);
    this._azar_extendAttributes = this._azar_extendAttributes || {};
    this._azar_extendTags = {};
    this.eventHandler = {};
}

_OOP__WEBPACK_IMPORTED_MODULE_2__/* ["default"].mixClass */ .ZP.mixClass(AElement, _EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP);

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__WEBPACK_IMPORTED_MODULE_1__/* ["default"].isSafari */ .Z.isSafari && !_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__/* ["default"].isMobile */ .Z.isMobile && false) {}

    if (_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__/* ["default"].isFirefox */ .Z.isFirefox && false) {}

}());

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 __WEBPACK_DEFAULT_EXPORT__ = (AElement);

/***/ }),

/***/ 2510:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7951);
/* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3349);



/***
 * @augments AElement
 * @augments SVGGraphicsElement
 * @constructor
 */
function AElementNS() {
    _AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"].call */ .Z.call(this);
}

_AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"].prototype.afterAttached */ .Z.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);
    });
};


_OOP__WEBPACK_IMPORTED_MODULE_1__/* ["default"].mixClass */ .ZP.mixClass(AElementNS, _AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z);

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 __WEBPACK_DEFAULT_EXPORT__ = (AElementNS);

/***/ }),

/***/ 5675:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony export AttachHook */
/* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7951);
/* harmony import */ var _EventEmitter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(863);



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.eventEmittorOnWithTime = function (isOnce, arg0, arg1, arg2) {
    if (arg0 === 'attached') {
        this._addAttachedEvent();
       return  _AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"].prototype.eventEmittorOnWithTime.apply */ .Z.prototype.eventEmittorOnWithTime.apply(this, arguments);
    } else {
        return  _AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"].prototype.eventEmittorOnWithTime.apply */ .Z.prototype.eventEmittorOnWithTime.apply(this, arguments);
    }
};
/*
AttachHook.prototype.on = function () {
    if (arguments[0] === 'attached') {
        this._addAttachedEvent();
        AElement.prototype.on.apply(this, arguments);
    }
    else {
        AElement.prototype.on.apply(this, arguments);
    }
    return this;
};


AttachHook.prototype.once = function () {
    if (arguments[0] === 'attached') {
        this._addAttachedEvent();
        AElement.prototype.once.apply(this, arguments);
    }
    else {
        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 () {
            return !!this._attached;
        }
    },
    canceled: {
        get: function () {
            return !!this._canceled;
        }
    }
};

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AttachHook);

/***/ }),

/***/ 5164:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "copyImage": () => (/* binding */ copyImage),
/* harmony export */   "copyText": () => (/* binding */ copyText),
/* harmony export */   "pasteText": () => (/* binding */ pasteText)
/* harmony export */ });
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();
    }
}

/***/ }),

/***/ 8098:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(863);
/* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3349);



/**
 * @extends EventEmitter
 * @constructor
 */
function DelaySignal() {
    _EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* ["default"].call */ .ZP.call(this);
    this.signals = {};
    this.to = this.NO_WAIT;
    this.execSignal = this.execSignal.bind(this);
}

(0,_OOP__WEBPACK_IMPORTED_MODULE_1__/* .mixClass */ .Jx)(DelaySignal, _EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP);

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) {
        if (window.Thread && window.Thread.setTimeout) {
            this.to = window.Thread.setTimeout({
                func: this.execSignal,
                time: this.delay,
                type: 'background',
                args: []
            });
        }
        else {
            this.to = setTimeout(this.execSignal, this.delay);
        }
    }
    return this;
};

DelaySignal.prototype.revokeResource = function () {
    if (this.to !== this.NO_WAIT) {
        clearTimeout(this.to);
    }
    delete this.signals;
    delete this.execSignal;
}

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DelaySignal);

/***/ }),

/***/ 6628:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "E7": () => (/* binding */ copyStyleRule),
  "ZP": () => (/* binding */ HTML5_Dom),
  "qE": () => (/* binding */ depthClone),
  "tE": () => (/* binding */ getScreenSize),
  "Z4": () => (/* binding */ getSystemFontSize),
  "m1": () => (/* binding */ getTextNodeBound),
  "mV": () => (/* binding */ isDomNode),
  "DI": () => (/* binding */ traceOutBoundingClientRect),
  "Lp": () => (/* binding */ waitImageLoaded)
});

// UNUSED EXPORTS: FeatureClass, activeFullScreen, deactiveFullScreen, depthCloneWithStyle, fontFaceIsLoaded, getConstructDescriptor, getScrollSize, imageToCanvas, inactiveFullScreen, isFullScreen, isVisibilityOnScreen, waitIFrameLoaded

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/JSPath.js
var JSPath = __webpack_require__(8706);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
;// 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;
}
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ElementNS.js
var ElementNS = __webpack_require__(1321);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElement.js
var AElement = __webpack_require__(7951);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js
var ResizeSystem = __webpack_require__(6700);
// EXTERNAL MODULE: ./node_modules/absol/src/JSX/attribute.js + 1 modules
var attribute = __webpack_require__(2953);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AttachHook.js
var AttachHook = __webpack_require__(5675);
;// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Dom.js









/***
 * @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 () {
    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(AElement/* default.prototype */.Z.prototype);
    Object.defineProperties(element, prototypes);
    AElement/* default.call */.Z.call(element);
    return element;
};

/***
 *
 * @param {*=} option
 * @constructor
 */
function Dom(option) {
    option = option || {};
    this.creator = option.creator || {};

    Object.defineProperties(this.creator,
        {
            svg: {
                set: function () {
                    //do nothing
                },
                get: function () {
                    return svgCreator;
                }
            },
            attachhook: {
                set: function () {
                    //do nothing
                },
                get: function () {
                    return AttachHook/* default */.Z;
                }
            }
        });


    this['$ '.trim()] = this.$.bind(this);
    this['_ '.trim()] = this._.bind(this);
    this['$' + '$'] = this.$$.bind(this);
    this.buildDom = this._;
}

Dom.prototype.defaultTag = 'div';

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(AElement/* default.prototype */.Z.prototype);
    Object.defineProperties(element, prototypes);
    AElement/* default.call */.Z.call(element);
    return element;
};


/**
 * DFS
 * @param {string | AElement} query
 * @param {AElement} root
 * @param {function} onFound - return true to stop find
 * @returns {AElement | AElementNS}
 */


Dom.prototype.$ = function (query, root, onFound) {
    var res;
    if (Dom.isDomNode(query)) res = query;
    else
        res = this.select(query, root, onFound);
    if (res) this.attach(res);
    return res;
};

/***
 *
 * @type {function(string, AElement, Function): AElement}
 */
Dom.prototype.selectAttacth = Dom.prototype.$;


/**
 * DFS
 * @param {string} query
 * @param {AElement} root
 * @param {function} onFound - return true to stop find
 */
Dom.prototype.select = function (query, root, onFound) {
    root = root || document.documentElement;
    var matcher = JSPath/* default.compileJSPath */.Z.compileJSPath(query);
    return matcher.findFirst(root, onFound);
};


var FeatureClass = {
    AElementNS: {
        constructor: ElementNS/* default */.Z,
        prototypeKeys: Object.keys(ElementNS/* default.prototype */.Z.prototype)
    },
    AElement: {
        constructor: AElement/* default */.Z,
        prototypeKeys: Object.keys(AElement/* default.prototype */.Z.prototype)
    }
};
/**
 *
 * @param {AElement | AElementNS } element
 */
Dom.prototype.attach = function (element) {
    if (element.attr) return;
    var feature = (element.getBBox && element.tagName !== 'svg') ? FeatureClass.AElementNS : FeatureClass.AElement;
    var elementConstructor = feature.constructor;
    var proto = elementConstructor.prototype;
    var prototypeKeys = feature.prototypeKeys;
    var n = prototypeKeys.length;
    var key;
    for (var i = 0; i < n; ++i) {
        key = prototypeKeys[i];
        element[key] = proto[key];
    }
    Object.assign(element, elementConstructor.prototype)
    elementConstructor.call(element);
};


Dom.prototype.makeNewElement = function (tagName) {
    return document.createElement(tagName);
};

Dom.prototype.makeNewTextNode = function (data) {
    return document.createTextNode(data);
};


/**
 *
 * @param {AbsolConstructDescriptor | string | {} } option
 * @param {boolean=} isInherited
 * @returns {AElementNS| AElement | Text}
 */
Dom.prototype._ = function (option, isInherited) {
    var res;
    var creator;
    if (Dom.isDomNode(option)) {
        res = option;
        option = {};
        /** fix reinit component */
        isInherited = true;
    }
    else {
        if (option.charAt) {
            option = option.trim();
            if (option[0] === '<') {
                res = this.fromCode(option);
                option = {};
            }
            else {
                var queryObj = JSPath/* default.parseQuery */.Z.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 && OOP/* default.extends */.ZP["extends"](res, creator.prototype);
        creator.attribute && res.defineAttributes(creator.attribute);
        if (creator.render) {
            if (creator.eventHandler) {
                res.eventHandler = res.eventHandler || {};
                var eventHandler = OOP/* default.bindFunctions */.ZP.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.prototype.create = Dom.prototype._;


/***
 *
 * @param query
 * @param root
 * @returns {Array<AElement|AElementNS>}
 */
Dom.prototype.$$ = function (query, root) {
    var thisD = this;
    var res = [];
    this.selectAttacth(query, root, function (elt) {
        thisD.attach(elt);
        res.push(elt);
    });
    return res;
};

Dom.prototype.install = function (arg0, arg1) {
    var _this = this;
    if (arguments.length === 1) {
        if (arg0.creator && arg0.create && arg0.select) {
            // is a dom core
            var creator = arg0.creator;
            Object.keys(creator).forEach(function (key) {
                if (key.startsWith('_') || key.startsWith('$')) return;
                var func = creator[key];
                if (typeof (func) == 'function')
                    if (_this.creator[key] !== func)
                        _this.creator[key] = func;
            });
        }
        else if (typeof (arg0) == 'function') {
            var name = arg0.tag || getFunctionName(arg0) || arg0.name;
            if (name) {
                this.creator[name.toLowerCase()] = arg0;
            }
            else {
                console.error('No ident name of creator function', arg0);
            }
        }
        else if (arg0 instanceof Array) {
            arg0.forEach(function (func) {
                var name = func.tag || getFunctionName(func) || func.name;
                if (name) {
                    _this.creator[name.toLowerCase()] = func;
                }
            });
        }
        else if (typeof arg0 == 'object') {
            Object.keys(arg0).forEach(function (key) {
                if (key.startsWith('_') || key.startsWith('$')) return;
                var func = arg0[key];
                if (typeof (func) == 'function')
                    if (_this.creator[key] !== func)
                        _this.creator[key] = func;
            });
        }
        else {
            console.error('Unknown data', arg0);
        }
    }
    else if (arguments.length === 2) {
        if (arg0 instanceof Array) {
            if (arg1.creator) arg1 = arg1.creator;
            arg0.forEach(function (key) {
                var func = arg1[key];
                if (typeof (func) == 'function')
                    if (_this.creator[key] !== func)
                        _this.creator[key] = func;
            });
        }
        else if (arg0 instanceof RegExp) {
            if (arg1.creator) arg1 = arg1.creator;
            Object.keys(arg1).forEach(function (key) {
                if (key.match(arg0)) {
                    var func = arg1[key];
                    if (typeof (func) == 'function')
                        if (_this.creator[key] !== func)
                            _this.creator[key] = func;
                }
            });
        }
        else if (typeof (arg0) == 'string' && arg0.length > 0) {
            if (typeof (arg1) == 'function') {
                this.creator[arg0] = arg1;
            }
            else {
                console.error('arg1 is not a function');
            }
        }
    }
    else {
        console.error('Invalid param');
    }

    return this;
};

/***
 *
 * @param {String | null} tagName
 */
Dom.prototype.require = function (tagName) {
    return this.creator[tagName] || null;
};


/**
 *
 * @param {*} o
 * @returns {Boolean}
 */
function isDomNode(o) {
    return (
        typeof Node === "object" ? o instanceof Node :
            o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string"
    );
}

Dom.isDomNode = isDomNode;

/**
 * @param {AElement|Node|HTMLElement} element
 */
function activeFullScreen(element) {
    if (element.requestFullscreen) {
        element.requestFullscreen();
    }
    else if (element.mozRequestFullScreen) {
        element.mozRequestFullScreen();
    }
    else if (element.webkitRequestFullscreen) {
        element.webkitRequestFullscreen(AElement/* default.ALLOW_KEYBOARD_INPUT */.Z.ALLOW_KEYBOARD_INPUT);
    }
    else if (element.msRequestFullscreen) {
        element.msRequestFullscreen();
    }
}

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.inactiveFullScreen = inactiveFullScreen;

//adapt
var deactiveFullScreen = inactiveFullScreen;
Dom.deactiveFullScreen = deactiveFullScreen;


function isFullScreen() {
    var fullScreenElement = document.fullscreenElement ||
        document.webkitFullscreenElement ||
        document.mozFullScreenElement ||
        document.msFullscreenElement;
    return !!fullScreenElement;
}

Dom.isFullScreen = isFullScreen;

/**
 * @param {AElement|Node|HTMLElement} current
 * @returns {ClientRect}
 */
function traceOutBoundingClientRect(current) {
    var screenSize = Dom.getScreenSize();
    var left = 0;
    var right = screenSize.width;
    var top = 0;
    var bottom = screenSize.height;
    var ox, oy, fixed;
    var bound;
    while (current) {
        fixed = AElement/* default.prototype.getComputedStyleValue.call */.Z.prototype.getComputedStyleValue.call(current, 'position') == "fixed";
        ox = AElement/* default.prototype.getComputedStyleValue.call */.Z.prototype.getComputedStyleValue.call(current, 'overflow-x') !== "visible";
        oy = AElement/* default.prototype.getComputedStyleValue.call */.Z.prototype.getComputedStyleValue.call(current, 'overflow-y') !== "visible";
        var isHtml = current.tagName.toLowerCase() === 'html';
        if (ox || oy || isHtml || fixed) {
            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 || fixed) {
                left = Math.max(left, bound.left);
                right = Math.min(right, bound.right);
            }
            if (oy || isHtml || fixed) {
                top = Math.max(top, bound.top);
                bottom = Math.min(bottom, bound.bottom);
            }
        }

        if (isHtml || fixed) break;
        current = current.parentElement;
    }
    return { left: left, right: right, top: top, bottom: bottom, width: right - left, height: bottom - top };
}

Dom.traceOutBoundingClientRect = traceOutBoundingClientRect;

/***
 *
 * @param {string} fontFace
 * @param {number} timeout
 * @returns {Promise<boolean>}
 */
function fontFaceIsLoaded(fontFace, timeout) {
    timeout = timeout || 0;

    var element = this.ShareInstance._({
        tag: 'span',
        style: {
            visibility: 'hidden',
            position: 'fixed',
            top: '-9999px',
            left: '-9999px',
            'font-size': '256px'

        }, props: {
            innerHTML: "Test string long long long"
        }
    });
    element.addTo(document.body);
    return element.afterAttached().then(function () {
        var lastOffsetWidth = element.getBoundingClientRect().width;
        element.addStyle('font-family', fontFace);
        return new Promise(function (resolve, reject) {
            function check(remainTime) {
                if (remainTime < 0) {
                    resolve(false);
                    element.selfRemove();
                }
                else
                    requestAnimationFrame(function () {
                        var currentOffsetWidth = element.getBoundingClientRect().width;
                        if (currentOffsetWidth != lastOffsetWidth) {
                            resolve(true);
                            element.selfRemove();
                        }
                        else
                            check(remainTime - 10);
                    });
            }

            check(timeout);
        });
    });
}

Dom.fontFaceIsLoaded = fontFaceIsLoaded;

/***
 *
 * @returns {{width: number, WIDTH: number, HEIGHT: number, height: number}}
 */
function getScreenSize() {
    var width = window.innerWidth ||
        document.documentElement.clientWidth ||
        document.body.clientWidth;

    var height = window.innerHeight ||
        document.documentElement.clientHeight ||
        document.body.clientHeight;

    return { WIDTH: width, HEIGHT: height, width: width, height: height };
}

Dom.getScreenSize = getScreenSize;

/***
 *
 * @param {HTMLImageElement} img
 * @param {number=} timeout
 * @returns {Promise<void>}
 */
function waitImageLoaded(img, timeout) {
    var isLoaded = true;
    if (!img.complete) {
        isLoaded = false;
    }
    if (img.naturalWidth === 0) {
        isLoaded = false;
    }
    if (isLoaded) return Promise.resolve();
    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.waitImageLoaded = waitImageLoaded;


/***
 *
 * @param {HTMLIFrameElement| Worker} iframe
 * @returns {Promise}
 */
function waitIFrameLoaded(iframe) {
    return new Promise(function (rs, rj) {
        if (document.all) {
            iframe.onreadystatechange = function () {
                if (iframe.readyState === "complete" || iframe.readyState === "loaded")
                    rs();
            };
        }
        else {
            iframe.onload = rs;
        }
        setTimeout(rs, 5000)
    });
}

Dom.waitIFrameLoaded = waitIFrameLoaded;

/***
 *
 * @param {Image} element
 * @returns {Promise<HTMLCanvasElement>}
 */
function imageToCanvas(element) {
    if (typeof element == 'string') {
        element = Dom.ShareInstance.$(element);
    }
    if (element.tagName.toLowerCase() === 'img') {
        var preRender = Dom.ShareInstance._('div');
        preRender.addStyle({
            position: 'fixed',
            top: '0',
            left: '0',
            zIndex: '-10000',
            opacity: '0'
        }).addTo(document.body);

        var canvas = document.createElement("canvas");
        preRender.addChild(canvas);


        return Dom.waitImageLoaded(element).then(function () {
            canvas.width = element.width;
            canvas.height = element.height;
            var context = canvas.getContext("2d");
            context.drawImage(element, 0, 0);
            preRender.selfRemove();
            return canvas;
        });
    }
    else {
        throw new Error("AElement must be image");
    }
}

Dom.imageToCanvas = imageToCanvas;


Dom.ShareInstance = new Dom();


Dom.scrollWidthPromise;

Dom.documentReady = new Promise(function (resolve) {
    if (document.body) {
        resolve();
    }
    else {
        window.addEventListener("load", resolve);
    }
});

function getScrollSize() {
    if (!Dom.scrollWidthPromise)
        Dom.scrollWidthPromise = new Promise(function (resolve) {
            function prerender() {
                var parent = Dom.ShareInstance._({
                    style: {
                        'z-index': '-100',
                        opacity: '0',
                        width: '100px',
                        height: '100px',
                        overflow: 'scroll',
                        top: '0',
                        left: '0',
                        'box-sizing': 'content-box',
                        position: 'fixed'
                    }
                })
                    .addTo(document.body);
                var child = Dom.ShareInstance._({ style: { width: '100%', height: '100%' } }).addTo(parent);
                requestAnimationFrame(function () {
                    var parentBound = parent.getBoundingClientRect();
                    var childBound = child.getBoundingClientRect();
                    resolve({
                        width: parentBound.width - childBound.width,
                        height: parentBound.height - childBound.height
                    });
                    parent.selfRemove();
                });
            }

            Dom.documentReady.then(prerender);
        });
    return Dom.scrollWidthPromise;
}

Dom.getScrollSize = getScrollSize;


/***
 *
 * @param {(AElement|AElementNS|Node)} originElt
 * @param {function(originElt: (AElement|AElementNS|Node), originElt: (AElement|AElementNS|Node)):void } afterCloneCb
 * @return {AElement|AElementNS|Node}
 */
function depthClone(originElt, afterCloneCb) {
    /***
     *
     * @type {AElement|AElementNS|Node}
     */
    var newElt = originElt.cloneNode();//no deep
    if (originElt.childNodes) {
        /***
         *
         * @type {(AElement|AElementNS)[]}
         */
        var children = Array.prototype.map.call(originElt.childNodes, function (child) {
            return depthClone(child, afterCloneCb)
        });
        for (var i = 0; i < children.length; ++i) {
            newElt.appendChild(children[i]);
        }
    }

    return (afterCloneCb && afterCloneCb(originElt, newElt)) || newElt;
}


/***
 *
 * @param originElt
 * @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.depthClone = depthClone;
Dom.depthCloneWithStyle = depthCloneWithStyle;

/***
 *
 * @param  {AElement|HTMLElement|Node}sourceElt
 * @param  {AElement|HTMLElement|Node} destElt
 * @returns  {AElement|HTMLElement|Node}
 */
function copyStyleRule(sourceElt, destElt) {
    if (!sourceElt.getAttribute && !sourceElt.getAttributeNS) return destElt;//is text node
    if (!destElt.getAttribute && !destElt.getAttributeNS) return destElt;//is text node, nothing to copy
    var cssRules = AElement/* default.prototype.getCSSRules.call */.Z.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] = AElement/* default.prototype.getComputedStyleValue.call */.Z.prototype.getComputedStyleValue.call(sourceElt, key);
    }
    return destElt;
}

Dom.copyStyleRule = copyStyleRule;

/**
 *
 */
function getSystemFontSize() {
    if (window.mobileHost && window.mobileHost.systemFont) {
        return window.mobileHost.systemFont.pointSize;
    }
    var _ = Dom.ShareInstance._;
    var initSpan = Dom.ShareInstance._({
        tag: 'span',
        style: {
            font: 'inherit',
        }
    });

    var appleSpan = 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.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 = (0,attribute.parseClassAttr)(classAttr);
    if (classList && classList.length > 0)
        obj.class = classList;
    var styleAttr = elt.getAttribute('style');
    var style;
    if (styleAttr)
        style = (0,attribute.parseStyleAttr)(styleAttr);


    var attributes = elt.attributes;
    var attNode;
    var attrName;
    var attrValue;
    var attr = {};
    var on = {};
    var props = {};
    var eventMatch, eventName;
    var propMatch, propName;
    for (var i = 0; i < attributes.length; ++i) {
        attNode = attributes[i];
        attrName = attNode.nodeName;
        attrValue = attNode.nodeValue;
        if (attrName == 'style' || attrName == 'class') continue;
        eventMatch = attrName.match(/^on(.+)/)
        if (eventMatch) {
            eventName = eventMatch[1];
            on[eventName] = new Function('event', 'sender', attrValue);
            continue;
        }
        propMatch = attrName.match(/^prop-(.+)/);
        if (propMatch) {
            propName = propMatch[1];
            props[propName] = attrValue;
            continue;
        }
        attr[attrName] = attrValue;
    }
    var key;
    for (key in style) {
        //style is not empty
        obj.style = style;
        break;
    }
    for (key in attr) {
        obj.attr = attr;
        break;
    }
    for (key in on) {
        obj.on = on;
        break;
    }
    for (key in props) {
        obj.props = props;
        break;
    }

    return obj;
}

Dom.getConstructDescriptor = getConstructDescriptor;

Dom.addToResizeSystem = function (element) {
    ResizeSystem/* default.add */.Z.add(element);
};

Dom.updateResizeSystem = function () {
    ResizeSystem/* default.update */.Z.update();
}

Dom.updateSizeUp = function (fromElt) {
    ResizeSystem/* default.updateUp */.Z.updateUp(fromElt);
};


/* harmony default export */ const HTML5_Dom = (Dom);


/**
 *
 * @param elt
 */
function isVisibilityOnScreen(elt) {
    if (!elt) return false;
    if (!AElement/* default.prototype.isDescendantOf.call */.Z.prototype.isDescendantOf.call(elt, document.body)) {
        return false;
    }

    var current = elt;
    var comStyle;
    while (current) {
        if (current === document.body) break;
        comStyle = window.getComputedStyle(current, null);
        if (comStyle.getPropertyValue('display') === 'none') return false;
        if (comStyle.getPropertyValue('visisbility') === 'hidden') return false;
        if (comStyle.getPropertyValue('opacity') === '0') return false;
        current = current.parentElement;
    }
    var bound = elt.getBoundingClientRect();
    var outBound = traceOutBoundingClientRect(elt);
    if (bound.top > outBound.bottom) return false;
    if (bound.bottom < outBound.top) return false;
    if (bound.left > outBound.right) return false;
    if (bound.right < outBound.left) return false;
    return true;
}

Dom.isVisibilityOnScreen = isVisibilityOnScreen;

/***/ }),

/***/ 5150:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__),
/* harmony export */   "J6": () => (/* binding */ setDomImmediate),
/* harmony export */   "fi": () => (/* binding */ clearDomImmediate)
/* harmony export */ });
/* harmony import */ var _EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(863);
/* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7951);
/* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3349);
/* harmony import */ var _AttachHook__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(5675);
/* harmony import */ var _Code_safeThrow__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5650);






/***
 *
 * @extends EventEmitter
 * @param {AElement=} attachHookElt
 * @constructor
 */
function DomSignal(attachHookElt) {
    _EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* ["default"].call */ .ZP.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;
}

_OOP__WEBPACK_IMPORTED_MODULE_2__/* ["default"].mixClass */ .ZP.mixClass(DomSignal, _EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP);

DomSignal.prototype.createBuildInAttachHook = function () {
    var elt = document.createElement('img');
    Object.defineProperties(elt, Object.getOwnPropertyDescriptors(_AElement__WEBPACK_IMPORTED_MODULE_1__/* ["default"].prototype */ .Z.prototype));
    Object.defineProperties(elt, Object.getOwnPropertyDescriptors(_AttachHook__WEBPACK_IMPORTED_MODULE_3__/* ["default"].prototype */ .Z.prototype));
    Object.defineProperties(elt, _AttachHook__WEBPACK_IMPORTED_MODULE_3__/* ["default"].property */ .Z.property);
    _AElement__WEBPACK_IMPORTED_MODULE_1__/* ["default"].call */ .Z.call(elt);
    elt.setAttribute('src', '');
    elt.defineEvent('attached');
    elt.addStyle('display', 'none');
    _AttachHook__WEBPACK_IMPORTED_MODULE_3__/* ["default"].call */ .Z.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 __WEBPACK_DEFAULT_EXPORT__ = (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) {
                        (0,_Code_safeThrow__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(error);
                    }
                }
            })
        })
    }
    return cid;
}


function clearDomImmediate(id) {
    delete callbackList[id];
}


/***/ }),

/***/ 488:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
function DynamicCSS() {
    this.elt = document.createElement('style');
    this.data = {};
    this.state = 'STANDBY';
    this.start();
}

/**
 *
 * @returns {this}
 */
DynamicCSS.prototype.commit = function () {
    this.elt.innerHTML = Object.keys(this.data).map(ruleQuery => {
            var rule = this.data[ruleQuery];
            return [
                ruleQuery + ' {',
                '    ' + Object.keys(rule).map(name => 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) {
    Object.keys(rules).forEach(key => this.setRule(key, rules[key]));
    return this;
};


DynamicCSS.prototype.getRules = function () {
    return this.data;
};

DynamicCSS.prototype.modifyRules = function (rules) {
    Object.keys(rules).forEach(key => this.modifyRule(key, rules[key]));
    return this;
};

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DynamicCSS);


/***/ }),

/***/ 1487:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7951);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z);

/***/ }),

/***/ 1321:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _AElementNS__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2510);

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_AElementNS__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z);


/***/ }),

/***/ 863:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Ed": () => (/* binding */ isMouseRight),
/* harmony export */   "FQ": () => (/* binding */ isMouseLeft),
/* harmony export */   "EY": () => (/* binding */ hitElement),
/* harmony export */   "FG": () => (/* binding */ copyEvent),
/* harmony export */   "VY": () => (/* binding */ findChangedTouchByIdent),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports eventProperties, touchProperties, isMouseMiddle, copyTouch, findTouchByIdent */
/* harmony import */ var _Code_safeThrow__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5650);


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 === "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) {
                    (0,_Code_safeThrow__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(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) {
                    (0,_Code_safeThrow__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(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 === 0;
    return isLeftMB;
}

function isMouseMiddle(event) {
    var isMiddleMB = false;
    if ("which" in event)  // Gecko (Firefox), WebKit (Safari/Chrome) & Opera
        isMiddleMB = event.which === 2;
    else if ("button" in event)  // IE, Opera
        isMiddleMB = event.button === 1;
    return isMiddleMB;
}

/**
 *
 * @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 __WEBPACK_DEFAULT_EXPORT__ = (EventEmitter);

/***/ }),

/***/ 8706:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (JSPath);

/***/ }),

/***/ 6013:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports LangSys, textNodeLanguageChangeHandler, elementLanguageChangeHandler */
/* harmony import */ var _ResizeSystem__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6700);
/* harmony import */ var _Code_safeThrow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5650);




/***
 * @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) {
                (0,_Code_safeThrow__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(err);
            }
            if (elt.childNodes && elt.childNodes.length > 0) {
                Array.prototype.forEach.call(elt.childNodes, visit);
            }
        }
    }

    visit(document.body);
    if (sizeChange) _ResizeSystem__WEBPACK_IMPORTED_MODULE_0__/* ["default"].update */ .Z.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();

LangSys.getText = function () {
    if (window.LanguageModule && window.LanguageModule.text){
        LangSys.addExtension({
            getText: function () {
                var text = window.LanguageModule.text.apply(window.LanguageModule, arguments);
                if (text && (text.startsWith('[key:') && text.charAt(text.length - 1) === ']')) return null;
                return text || null;
            }
        });
        LangSys.getText = LanguageSystem.prototype.getText;
        return this.getText.apply(this, arguments);
    }

    return LanguageSystem.prototype.getText.apply(this, arguments);
}

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 __WEBPACK_DEFAULT_EXPORT__ = (LangSys);

/***/ }),

/***/ 3349:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "pj": () => (/* binding */ drillProperty),
/* harmony export */   "Jx": () => (/* binding */ mixClass),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports overrideMethod, bindFunctions, inheritCreator */
/**
 * @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 (value) {
                botObject[keyBot] = value;
            },
            get: function () {
                return botObject[keyBot];
            },
            configurable: true
        });
    }
    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 __WEBPACK_DEFAULT_EXPORT__ = (OOP);

/***/ }),

/***/ 6700:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7951);
/* harmony import */ var _AElementNS__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2510);
/* harmony import */ var _DelaySignal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8098);




/**
 * @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() {
    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 = ()=>{
        this.domSignal = new _DelaySignal__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z();
        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 (_AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"].prototype.isDescendantOf.call */ .Z.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 (_AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"].prototype.isDescendantOf.call */ .Z.prototype.isDescendantOf.call(elt, this.elts[i])) {
            return false;
        }
    this.elts = this.elts.filter(function (e) {
        return !_AElement__WEBPACK_IMPORTED_MODULE_0__/* ["default"].prototype.isDescendantOf.call */ .Z.prototype.isDescendantOf.call(e, elt);
    });
    this.removeTrash();
    this.cache = undefined;
    this.elts.push(elt);
    return true;
};

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new ResizeSystem());

/***/ }),

/***/ 6821:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports svgToRasterImageUrl, svgToExportedString */
/* harmony import */ var _Dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6628);
/* harmony import */ var _ElementNS__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1321);
/* harmony import */ var _AElement__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7951);
/* harmony import */ var _Color_Color__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(257);
/* harmony import */ var _AttachHook__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5675);
/* harmony import */ var _OOP__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3349);







/***
 * @extends Dom
 * @param option
 * @constructor
 */
function Svg(option) {
    _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].call */ .ZP.call(this, option);
    this.svgNS = "http://www.w3.org/2000/svg";
    Object.defineProperties(this.creator,
        {
            sattachhook: {
                set: function () {
                    //do nothing
                },
                get: function () {
                    return _AttachHook__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z;
                }
            }
        });
    delete this.buidDom;
    this.buildSvg = this.create.bind(this);
}


_OOP__WEBPACK_IMPORTED_MODULE_5__/* ["default"].mixClass */ .ZP.mixClass(Svg, _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP);

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(_AElement__WEBPACK_IMPORTED_MODULE_2__/* ["default"].prototype */ .Z.prototype);
        Object.defineProperties(element, prototypes);
        _AElement__WEBPACK_IMPORTED_MODULE_2__/* ["default"].call */ .Z.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__WEBPACK_IMPORTED_MODULE_1__/* ["default"].prototype */ .Z.prototype);
        Object.defineProperties(element, prototypes);
        _ElementNS__WEBPACK_IMPORTED_MODULE_1__/* ["default"].call */ .Z.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 = _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance.$ */ .ZP.ShareInstance.$(element);
    }
    if (element && element.tagName == 'svg') {
        var depthClone = function (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 = _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance._ */ .ZP.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 = _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance._ */ .ZP.ShareInstance._('img');
        image.attr('src', src)
            .addTo(renderSpace);
        var canvas = document.createElement("canvas");
        renderSpace.addChild(canvas);
        return _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].waitImageLoaded */ .ZP.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;

/**
 *
 * @param {string|AElement}element
 * @param {"print"|null=} option
 * @returns {string}
 */
function svgToExportedString(element, option) {
    if (typeof element == 'string') {
        element = _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance.$ */ .ZP.ShareInstance.$(element);
    }
    if (element && element.tagName === 'svg') {
        var depthClone = function (originElt) {
            var newElt = originElt.cloneNode();//no deep
            if (!originElt.getAttributeNS) return newElt;//is text node
            var cssRules = _AElement__WEBPACK_IMPORTED_MODULE_2__/* ["default"].prototype.getCSSRules.call */ .Z.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] = _AElement__WEBPACK_IMPORTED_MODULE_2__/* ["default"].prototype.getComputedStyleValue.call */ .Z.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 = _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance._ */ .ZP.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;

/**
 *
 * @param element
 * @param {"print"|null=}option
 * @returns {string}
 */
function svgToSvgUrl(element, option) {
    var svg = svgToExportedString(element, option);
    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>}
 */
_Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].printElement */ .ZP.printElement = function (option) {
    var _ = _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance._ */ .ZP.ShareInstance._;
    var $ = _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance.$ */ .ZP.ShareInstance.$;
    option = option || {};
    if (typeof option == 'string') {
        option = { elt: _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance.$ */ .ZP.ShareInstance.$(option) };
    }
    else if (typeof option.elt == 'string') {
        option.elt = $(option.elt);
    }
    else if (_Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].isDomNode */ .ZP.isDomNode(option)) {
        option = { elt: option };
    }
    option = Object.assign({ keepBackgroundColor: true, convertSVG: false, computeStyle: false }, option);
    if (_Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].isDomNode */ .ZP.isDomNode(option.elt)) {
        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;
            var printViewBox;
            if (tagName === 'canvas' || (tagName === 'svg' && option.convertSVG)) {
                if (tagName === "canvas") {
                    url = originElt.toDataURL();
                }
                else {
                    url = svgToSvgUrl(originElt, 'print');//todo: option
                }
                img = _({
                    tag: 'img',
                    props: {
                        src: url
                    }
                });
                $(newElt).selfReplace(img);
                newElt = img;
                needCopyStyle = true;
            }
            else if (tagName === 'svg' && originElt.getAttribute('data-print-view-box')) {
                printViewBox = originElt.getAttribute('data-print-view-box').split(' ').map(function (v) {
                    return parseFloat(v);
                });
                newElt.setAttribute('viewBox', printViewBox.join(' '));
                newElt.setAttribute('width', printViewBox[2]);
                newElt.setAttribute('height', printViewBox[3]);
                newElt.style.setProperty('width', printViewBox[2] + 'px');
                newElt.style.setProperty('height', printViewBox[3] + 'px');
            }
            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) {
                (0,_Dom__WEBPACK_IMPORTED_MODULE_0__/* .copyStyleRule */ .E7)(originElt, newElt);
            }
            if (needKeepBackgroundColor) {
                try {
                    var bgColor = _AElement__WEBPACK_IMPORTED_MODULE_2__/* ["default"].prototype.getComputedStyleValue.call */ .Z.prototype.getComputedStyleValue.call(originElt, 'background-color');
                    if (bgColor) {
                        bgColor = _Color_Color__WEBPACK_IMPORTED_MODULE_3__/* ["default"].parse */ .Z.parse(bgColor);
                        if (bgColor.rgba[3] > 0) {
                            newElt.style.setProperty('background-color', bgColor.toString('hex8'), 'important');
                        }
                    }
                } catch (e) {

                }
            }

            return newElt;
        }


        var newElt = (0,_Dom__WEBPACK_IMPORTED_MODULE_0__/* .depthClone */ .qE)(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 == _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].$printStyle */ .ZP.$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 __WEBPACK_DEFAULT_EXPORT__ = (Svg);

/***/ }),

/***/ 5827:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "getTextNodesIn": () => (/* binding */ getTextNodesIn),
/* harmony export */   "setSelectionRangeStart": () => (/* binding */ setSelectionRangeStart),
/* harmony export */   "setSelectionRangeEnd": () => (/* binding */ setSelectionRangeEnd),
/* harmony export */   "setSelectionRange": () => (/* binding */ setSelectionRange),
/* harmony export */   "getTextIn": () => (/* binding */ getTextIn),
/* harmony export */   "textToNodes": () => (/* binding */ textToNodes),
/* harmony export */   "getCaretPosition": () => (/* binding */ getCaretPosition),
/* harmony export */   "setCaretPosition": () => (/* binding */ setCaretPosition),
/* harmony export */   "measureText": () => (/* binding */ measureText)
/* harmony export */ });
/* harmony import */ var _Dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6628);


function getTextNodesIn(node) {
    var textNodes = [];
    if (node.nodeType == 3) {
        textNodes.push(node);
    } else {
        var children = node.childNodes;
        for (var i = 0, len = children.length; i < len; ++i) {
            textNodes.push.apply(textNodes, getTextNodesIn(children[i]));
        }
    }
    return textNodes;
}

/**
 * 
 * @param {Element} el 
 * @param {Range} range 
 * @param {Number} start 
 * @returns {Number} -1: ok,  ret >= 0(is length of text) : need move to next element
 * 
 */
function setSelectionRangeStart(el, range, start) {
    if (start > 0) {
        if (el.nodeType == Node.TEXT_NODE) {
            var text = el.data;
            if (start <= text.length) {
                range.setStart(el, start);
                return -1;
            }
            else
                return text.length;
        } if (el.tagName.toLowerCase() == 'br') {
            return 0;
        }
        else {
            var delta = 0;
            var i = 0;
            var textLength = 0;
            var newLine = false;
            while (delta >= 0 && i < el.childNodes.length) {
                var childElt = el.childNodes[i];

                if (newLine) {
                    newLine = false;
                    ++textLength;
                }
                delta = setSelectionRangeStart(childElt, range, start - textLength);

                if (delta >= 0) textLength += delta;
                if (childElt.nodeType != Node.TEXT_NODE
                    && (window.getComputedStyle(childElt).display == 'block'
                        || childElt.tagName.toLowerCase() == 'br')) {
                    newLine = true;
                }
                ++i;
            }
            if (delta >= 0) return textLength;
            return -1;
        }
    }
    else {
        range.setStart(el, 0);
        return -1;
    }
}

/**
 * 
 * @param {Element} el 
 * @param {Range} range 
 * @param {Number} end 
 * @returns {Number} -1: ok,  ret >= 0(is length of text) : need move to next element
 * 
 */
function setSelectionRangeEnd(el, range, end) {
    if (end > 0) {
        if (el.nodeType == Node.TEXT_NODE) {
            var text = el.data;
            if (end <= text.length) {
                range.setEnd(el, end);
                return -1;
            }
            else
                return text.length;
        } if (el.tagName.toLowerCase() == 'br') {
            return 0;
        }
        else {
            var delta = 0;
            var i = 0;
            var textLength = 0;
            var newLine = false;
            while (delta >= 0 && i < el.childNodes.length) {
                var childElt = el.childNodes[i];

                if (newLine) {
                    newLine = false;
                    ++textLength;
                }
                delta = setSelectionRangeEnd(childElt, range, end - textLength);

                if (delta >= 0) textLength += delta;
                if (childElt.nodeType != Node.TEXT_NODE
                    && (window.getComputedStyle(childElt).display == 'block'
                        || childElt.tagName.toLowerCase() == 'br')) {
                    newLine = true;
                }
                ++i;
            }
            if (delta >= 0) return textLength;
            return -1;
        }
    }
    else {
        range.setEnd(el, 0);
        return -1;
    }
}

function setSelectionRange(el, start, end) {
    if (document.createRange && window.getSelection) {
        var range = document.createRange();
        range.selectNodeContents(el);
        var delta;
        if (start >= 0) {
            delta = setSelectionRangeStart(el, range, start);
            if (delta >= 0) range.setStart(el, el.childNodes.length);
        }
        else {
            start = 0;
            range.setStart(el, 0);
        }
        if (end >= start) {
            delta = setSelectionRangeEnd(el, range, end);
            if (delta >= 0) range.setEnd(el, el.childNodes.length);
        }
        var sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
    } else if (document.selection && document.body.createTextRange) {
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(el);
        textRange.collapse(true);
        textRange.moveEnd("character", end);
        textRange.moveStart("character", start);
        textRange.select();
    }
}

function getTextIn(e) {
    if (e.nodeType == Node.TEXT_NODE) {
        return e.data;
    }
    if (e.tagName && e.tagName.toLowerCase() == 'br') return '';

    var texts = [];
    var newLine = false;
    for (var i = 0; i < e.childNodes.length; ++i) {
        if (newLine) {
            newLine = false;
            texts.push('\n');
        }
        var childElt = e.childNodes[i];
        texts.push(getTextIn(childElt));


        if (childElt.nodeType != Node.TEXT_NODE
            && (window.getComputedStyle(childElt).display == 'block'
                || childElt.tagName.toLowerCase() == 'br')) {
            newLine = true;
        }
    }
    return texts.join('');
}


function textToNodes(text) {
    var lines = text.split(/\r?\n/);
    return lines.map(function (text) {
        if (text.length == 0) {
            return _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance._ */ .ZP.ShareInstance._({
                child: { tag: 'br' }
            });
        }
        else {
            return _Dom__WEBPACK_IMPORTED_MODULE_0__/* ["default"].ShareInstance._ */ .ZP.ShareInstance._({
                child: { text: text }
            });
        }
    });
}


/*
** Returns the caret (cursor) position of the specified text field (oField).
** Return value range is 0-oField.value.length.
*/
function 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 measureText(text, font) {
    // re-use canvas object for better performance
    var canvas = measureText.canvas || (measureText.canvas = document.createElement("canvas"));
    var context = canvas.getContext("2d");
    if (font)
        context.font = font;
    var metrics = context.measureText(text);
    return metrics;
}


/***/ }),

/***/ 27:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "DB": () => (/* binding */ normalizeKeyBindingIdent),
/* harmony export */   "Ej": () => (/* binding */ keyboardEventToKeyBindingIdent)
/* harmony export */ });
/* unused harmony exports isFnKey, isSpaceKey, isCtrlKey, isAltKey, isShiftKey, isMetaKey */
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 = [];
    var keyName =  event.key || String.fromCharCode(event.which || event.keyCode);
    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(keyName)) {
        keys.push('space');
    }
    else if (isFnKey(keyName)) {
        keys.push(keyName.toLowerCase())
    }
    else if (!isMetaKey(keyName) && !isAltKey(keyName) && !isCtrlKey(keyName) && !isShiftKey(keyName))
        keys.push(keyName.toLowerCase());
    return keys.join('-');
}

/***/ }),

/***/ 369:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
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 __WEBPACK_DEFAULT_EXPORT__ = (TemplateString);

/***/ }),

/***/ 2914:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "NQ": () => (/* binding */ generateJSVariable),
/* harmony export */   "Ew": () => (/* binding */ copyJSVariable),
/* harmony export */   "wP": () => (/* binding */ replaceDateStringJSVariable)
/* harmony export */ });
/* unused harmony export isJSVariableEqual */
/**
 *
 * @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 (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 replacer;
    if (replacers && replacers.length > 0) {
        replacer = replacers.find((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 = 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((it, i) => copyJSVariable(it, replacers, i, o));
    }
    if (type === "object" && o.constructor === Object) {
        return Object.keys(o).reduce((ac, cr) => {
            ac[cr] = copyJSVariable(o[cr], replacers, cr, o);
            return ac;
        }, {});
    }
    return o;
}

function replaceDateStringJSVariable(o) {
    return copyJSVariable(o, [{
        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: x => new Date(x)
    }]);
}

/***
 *
 * @param a
 * @param b
 * @return {boolean}
 */
function isJSVariableEqual(a, b) {
    if (a === b) return true;//1
    var tA = typeof a;
    var tB = 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;
}



/***/ }),

/***/ 2953:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "computeMeasureExpression": () => (/* reexport */ computeMeasureExpression),
  "parseClassAttr": () => (/* binding */ parseClassAttr),
  "parseMeasureValue": () => (/* binding */ parseMeasureValue),
  "parseStyleAttr": () => (/* binding */ parseStyleAttr)
});

// EXTERNAL MODULE: ./node_modules/absol/src/Pharse/DPParser.js + 1 modules
var DPParser = __webpack_require__(3281);
// EXTERNAL MODULE: ./node_modules/absol/src/Pharse/DPParseInstance.js
var DPParseInstance = __webpack_require__(56);
;// CONCATENATED MODULE: ./node_modules/absol/src/JSX/CSSParser.js





/***** css expression rules****/

// var exp = `calc(var(--abcd) + 15px + 15%)`;


var elementRegexes = [
    ['varname', /--[a-z-]+/],
    ['word', /[_a-zA-Z][_a-zA-Z0-9]*/],
    ['msnumber', /(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)(vh|vw|px|%|pt)/],
    ['number', /(\d+([.]\d*)?([eE][+-]?\d+)?|[.]\d+([eE][+-]?\d+)?)/],
    ['symbol', /[^\s_a-zA-Z0-9]/],
    ['string', /("(?:[^"\\]|\\.)*?")|('(?:[^'\\]|\\.)*?')/]
];


var rules = [];


rules.push({
    target: 'measure_num',
    elements: ['.msnumber'],
    toAST: function (pN) {
        pN = pN.children[0];
        return {
            type: "MeasureLiteral",
            value: parseFloat(pN.content.replace(/vh|vw|px|%|pt/, '')),
            unit: pN.content.match(/px|%|pt|vw|vh/)[0]
        }
    }
});

rules.push({
    target: 'number',
    elements: ['.number'],
    toAST: function (pN) {
        pN = pN.children[0];
        return {
            type: "NumericLiteral",
            value: parseFloat(pN.content),
        }
    }
});


rules.push({
    target: 'exp',
    elements: ['measure_num'],
    toAST: function (pN) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(pN.children[0]);
    }
});

rules.push({
    target: 'bracket_group',
    elements: ['_(', 'exp', '_)'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[1]);
    }
});

rules.push({
    target: 'exp',
    elements: ['bracket_group'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'variable_name',
    elements: ['.varname'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableName',
            name: parsedNode.children[0].content
        }
    }
});

rules.push({
    target: 'exp',
    elements: ['variable_name'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});


['+', '-', '*', '/'].forEach(function (op) {
    rules.push({
        target: 'bin_op',
        elements: ['_' + op],
        toAST: function (parsedNode) {
            return {
                type: "BinaryOperator",
                content: op
            }
        }
    });
});


var operatorOrder = {
    '*': 5,
    '/': 5,
    '%': 5,
    '+': 6,
    '-': 6
}

var operatorTokenToAst = token => ({ type: token.type, content: token.content });

rules.push({
    target: 'exp',
    elements: ['exp', 'bin_op', 'exp'],
    // longestOnly: true,//* error when parse return (...)...
    ident: 'bin_op_rec',
    toASTChain: function (parseNode) {
        var res = [];
        if (parseNode.children[0].rule === this) {
            res = res.concat(this.toASTChain(parseNode.children[0]));
        }
        else {
            res.push((0,DPParseInstance/* parsedNodeToAST */.Hg)(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((0,DPParseInstance/* parsedNodeToAST */.Hg)(parseNode.children[2]));
        }
        return res;
    },
    toAST: function (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 = operatorTokenToAst(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 = operatorTokenToAst(stack.pop());
            newNode.left = stack.pop();
            stack.push(newNode);
        }

        return stack.pop();
    }
});


rules.push({
    target: 'args_list',
    elements: ['exp'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    },
    toASTChain: function (parsedNode) {
        return [(0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode)];
    }
});

rules.push({
    target: 'ident',
    elements: ['.word'],
    toAST: function (parsedNode) {
        return {
            type: 'Identifier',
            name: parsedNode.children[0].content
        }
    }
});

rules.push({
    target: 'number',
    elements: ['.number'],
    toAST: function (parsedNode) {
        return {
            type: 'NumericLiteral',
            value: parseFloat(parsedNode.children[0].content)
        }
    }
});


rules.push({
    target: 'args_list',
    elements: ['args_list', '_,', 'exp'],
    longestOnly: true,
    ident: 'args_list_rec',
    toASTChain: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToASTChain */.xI)(parsedNode.children[0]).concat((0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[2]));
    }
});


rules.push({
    target: 'function_callee',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'function_callee',
    elements: ['mem_exp'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(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: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0])
        }
    }
});


rules.push({
    target: 'function_call',
    elements: ['function_callee', '_(', '_)'],
    toAST: function (parsedNode) {
        return {
            type: 'CallExpression',
            arguments: [],
            callee: (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0])
        };
    }
});

rules.push({
    target: 'exp',
    elements: ['function_call'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['number'],
    toAST: function (parsedNode) {
        return (0,DPParseInstance/* parsedNodeToAST */.Hg)(parsedNode.children[0]);
    }
});


var cssExpressionParser = new DPParser/* default */.Z({
    elementRegexes: elementRegexes,
    rules: rules
});

var getScreenViewSize = () => {
    var div = document.createElement('div');
    div.style.width = '100vw';
    div.style.height = '100vh';
    div.style.zIndex = '-10000';
    div.style.visibility = 'hidden';
    div.style.position = 'fixed';
    document.body.appendChild(div);
    var res = div.getBoundingClientRect();
    div.remove();
    return { width: res.width, height: res.height };
}

var fx = {
    calc: function (x) {
        return x;
    },
    'var': function (x, ctx) {
        if (!ctx.style) {
            if (ctx.elt) {
                ctx.style = getComputedStyle(ctx.elt);
            }
        }
        if (ctx.style) {
            if (ctx.style.getPropertyValue) {
                return ctx.style.getPropertyValue(x);
            }
            else {
                return ctx.style[x];
            }
        }
        throw new Error("Miss style:CSSStyleDeclaration in ctx");
    },
    '*': function (x, y, ctx) {
        if (x && x.unit) {
            if (y && y.unit) {
                throw Error(`Can not call ${x.value + x.unit} * ${y.value + y.unit}`);
            }
            else {
                return { value: x.value * y, unit: x.unit };
            }
        }
        else {
            if (y && y.unit) {
                return { value: x * y.value, unit: y.unit };
            }
            else return x * y;
        }
    },
    '/': function (x, y, ctx) {
        if (x && x.unit) {
            if (y && y.unit) {
                throw Error(`Can not call ${x.value + x.unit} / ${y.value + y.unit}`);
            }
            else {
                return { value: x.value / y, unit: x.unit };
            }
        }
        else {
            if (y && y.unit) {
                throw Error(`Can not call ${x} / ${y.value + y.unit}`);
            }
            else return x * y;
        }
    },
    '+': function add(x, y, ctx) {
        if (x && x.unit) {
            if (y && y.unit) {
                if (x.unit === y.unit) {
                    return { value: x.value + y.value, unit: x.unit };
                }
                else {
                    return fx['+'](fx.toPx(x, ctx), fx.toPx(y, ctx));
                }
            }
            else {
                throw Error(`Can not call ${x.value + x.unit} + ${y}`);
            }
        }
        else {
            if (y && y.unit) {
                throw Error(`Can not call ${x} +  ${y.value + y.unit}`);
            }
            else return x + y;
        }
    },
    '-': function add(x, y, ctx) {
        if (x && x.unit) {
            if (y && y.unit) {
                if (x.unit === y.unit) {
                    return { value: x.value - y.value, unit: x.unit };
                }
                else {
                    return fx['+'](fx.toPx(x, ctx), fx.toPx(y, ctx));
                }
            }
            else {
                throw Error(`Can not call ${x.value - x.unit} + ${y}`);
            }
        }
        else {
            if (y && y.unit) {
                throw Error(`Can not call ${x} -  ${y.value + y.unit}`);
            }
            else return x + y;
        }
    },
    toPx: (val, ctx) => {
        switch (val.unit) {
            case '%':
                if (typeof ctx.parentSize !== "number") throw new Error("Miss parentSize:number(px) in ctx");
                return { value: ctx.parentSize * val.value / 100, unit: 'px' };
            case 'vh':
                if (!ctx.screenSize) {
                    ctx.screenSize = getScreenViewSize();
                }
                return { value: ctx.screenSize.height * val.value / 100, unit: 'px' };
            case 'vw':
                if (!ctx.screenSize) {
                    ctx.screenSize = getScreenViewSize();
                }
                return { value: ctx.screenSize.width * val.value / 100, unit: 'px' };
            default:
                break;
        }
        return val;
    }
};

var visitors = {
    CallExpression: (astNode, ctx) => {
        var args = astNode.arguments.map(it => accept(it, ctx));
        args.push(ctx);
        return fx[astNode.callee.name].apply(null, args);
    },
    BinaryExpression: (astNode, ctx) => {
        var left = accept(astNode.left, ctx);
        var right = accept(astNode.right, ctx);
        var func = fx[astNode.operator.content];
        return func(left, right, ctx);
    },
    MeasureLiteral: (astNode, ctx) => {
        return { value: astNode.value, unit: astNode.unit }
    },
    NumericLiteral: (astNode, ctx) => {
        return astNode.value;
    },
    VariableName: (astNode, ctx) => {
        return astNode.name;
    }
};


var accept = (astNode, ctx) => {
    return visitors[astNode.type](astNode, ctx);
}

/**
 *
 * @param {string} exp
 * @param {{parentSize?: number, screenViewSize?:{width: number, height: number}, style?:CSSStyleDeclaration|Object, elt:AElement|any}} ctx
 * @param {boolean=} debug
 * @returns {*|null}
 */
function computeMeasureExpression(exp, ctx, debug) {
    try {
        var p = cssExpressionParser.parse(exp, 'exp');
        if (p.ast) {
            return accept(p.ast, ctx);
        }
        return null;
    } catch (error) {
        return null;
    }
}


function getQuerySelectorSpecificity(selector) {
    let inline = 0;
    let idCount = 0;
    let classCount = 0;
    let tagCount = 0;

    // Remove pseudo-elements
    selector = selector.replace(/::\w+/g, '');

    // Check for inline styles (not directly calculable from selector string)
    if (selector.includes('style="')) {
        inline = 1;
    }


    // Count ID selectors
    idCount = (selector.match(/#[\w-]+/g) || []).length;

    // Count class selectors, attributes selectors, and pseudo-classes
    classCount = (selector.match(/\.[\w-]+/g) || []).length +
        (selector.match(/\[[^\]]+\]/g) || []).length +
        (selector.match(/:(?!:)[\w-]+/g) || []).length;


    // Count element selectors and pseudo-elements
    tagCount = (selector.match(/^[\w-]+|\s[\w-]+/g) || []).length;

    return [inline, idCount, classCount, tagCount];
}


function compareQuerySelectorSpecificity(selector1, selector2) {
    const specificity1 = getQuerySelectorSpecificity(selector1);
    const specificity2 = getQuerySelectorSpecificity(selector2);
    return arrayLexicographicalCompare(selector1, specificity2);
}
;// 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|em|rem|pt)?/i);
        if (matched) {
            value = parseFloat(matched[1]);
            unit = matched[4];
        }
    }
    if (isNaN(value)) return null;
    unit = unit || 'px';
    return {
        value: value,
        unit: unit
    };
}


/***/ }),

/***/ 9846:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Vec2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(557);


function Mat3(data) {
    this.data = data || Array(6).fill(0);
}

Mat3.identity = function () {
    return new Mat3([1, 0, 0, 0, 1, 0, 0, 0, 1]);
};

/**
 *
 * @returns {Mat3|null}
 */
Mat3.prototype.invert = function () {
    var a = this.data;
    var out = Array(9);
    var a00 = a[0], a01 = a[1], a02 = a[2];
    var a10 = a[3], a11 = a[4], a12 = a[5];
    var a20 = a[6], a21 = a[7], a22 = a[8];

    var b01 = a22 * a11 - a12 * a21;
    var b11 = -a22 * a10 + a12 * a20;
    var b21 = a21 * a10 - a11 * a20;

    // Calculate the determinant
    var det = a00 * b01 + a01 * b11 + a02 * b21;

    if (!det) return null;
    det = 1.0 / det;

    out[0] = b01 * det;
    out[1] = (-a22 * a01 + a02 * a21) * det;
    out[2] = (a12 * a01 - a02 * a11) * det;
    out[3] = b11 * det;
    out[4] = (a22 * a00 - a02 * a20) * det;
    out[5] = (-a12 * a00 + a02 * a10) * det;
    out[6] = b21 * det;
    out[7] = (-a21 * a00 + a01 * a20) * det;
    out[8] = (a11 * a00 - a01 * a10) * det;
    return new Mat3(out);
};

/**
 *
 * @param {Vec2} v
 * @return {Mat3}
 */
Mat3.prototype.translate = function (v) {
    var out = Array(9);
    var a = this.data;
    var a00 = a[0], a01 = a[1], a02 = a[2];
    var a10 = a[3], a11 = a[4], a12 = a[5];
    var a20 = a[6], a21 = a[7], a22 = a[8];
    var x = v.x, y = v.y;

    out[0] = a00;
    out[1] = a01;
    out[2] = a02;

    out[3] = a10;
    out[4] = a11;
    out[5] = a12;

    out[6] = x * a00 + y * a10 + a20;
    out[7] = x * a01 + y * a11 + a21;
    out[8] = x * a02 + y * a12 + a22;
    return new Mat3(out);
};


/**
 *
 * @param {Mat3} mat
 * @returns {Mat3}
 */
Mat3.prototype.multiply = function (mat) {
    var a = this.data;
    var b = mat.data;
    var a00 = a[0], a01 = a[1], a02 = a[2];
    var a10 = a[3], a11 = a[4], a12 = a[5];
    var a20 = a[6], a21 = a[7], a22 = a[8];

    var b00 = b[0], b01 = b[1], b02 = b[2];
    var b10 = b[3], b11 = b[4], b12 = b[5];
    var b20 = b[6], b21 = b[7], b22 = b[8];

    var out = Array(9);
    out[0] = b00 * a00 + b01 * a10 + b02 * a20;
    out[1] = b00 * a01 + b01 * a11 + b02 * a21;
    out[2] = b00 * a02 + b01 * a12 + b02 * a22;

    out[3] = b10 * a00 + b11 * a10 + b12 * a20;
    out[4] = b10 * a01 + b11 * a11 + b12 * a21;
    out[5] = b10 * a02 + b11 * a12 + b12 * a22;

    out[6] = b20 * a00 + b21 * a10 + b22 * a20;
    out[7] = b20 * a01 + b21 * a11 + b22 * a21;
    out[8] = b20 * a02 + b21 * a12 + b22 * a22;

    return new Mat3(out);
}

/***
 *
 * @param {Number} rad
 * @return {Mat3}
 */
Mat3.prototype.rotate = function (rad) {
    var a = this.data;
    var a00 = a[0], a01 = a[1], a02 = a[2];
    var a10 = a[3], a11 = a[4], a12 = a[5];
    var a20 = a[6], a21 = a[7], a22 = a[8];

    var s = Math.sin(rad);
    var c = Math.cos(rad);
    var out = Array(9);

    out[0] = c * a00 + s * a10;
    out[1] = c * a01 + s * a11;
    out[2] = c * a02 + s * a12;

    out[3] = c * a10 - s * a00;
    out[4] = c * a11 - s * a01;
    out[5] = c * a12 - s * a02;

    out[6] = a20;
    out[7] = a21;
    out[8] = a22;
    return new Mat3(out);
};

/***
 *
 * @param {Vec2} v
 * @returns {Mat3}
 */
Mat3.prototype.scale = function (v) {
    var x = v.x;
    var y = v.y;
    var out = Array(9);
    out[0] = x * a[0];
    out[1] = x * a[1];
    out[2] = x * a[2];

    out[3] = y * a[3];
    out[4] = y * a[4];
    out[5] = y * a[5];

    out[6] = a[6];
    out[7] = a[7];
    out[8] = a[8];

    return new Mat3(out);
};

/***
 *
 * @return {Mat3}
 */
Mat3.prototype.transpose = function (){
    var a = this.data;
    var out = Array(9);
    out[0] = a[0];
    out[1] = a[3];
    out[2] = a[6];
    out[3] = a[1];
    out[4] = a[4];
    out[5] = a[7];
    out[6] = a[2];
    out[7] = a[5];
    out[8] = a[8];
    return new Mat3(out);
};

/**
 *
 * @param {Vec2}v
 */
Mat3.prototype.apply2DTransform = function (v) {
    var a = this.data;
    var x0 = v.x;
    var y0 = v.y;
    var x = x0 * a[0] + y0 * a[3] + a[6];
    var y = x0 * a[1] + y0 * a[4] + a[7];
    return new _Vec2__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(x, y);
}


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Mat3);

/***/ }),

/***/ 9894:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Vec2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(557);


/***
 *
 * @param {Vec2[]} vertices
 * @constructor
 */
function Polygon(vertices) {
    this.vertices = vertices;
}


/***
 *
 * @param {Vec2} P
 * @returns {-1|0|1}
 */
Polygon.prototype.pointLocalIn = function (P) {
    var A = this.vertices[this.vertices.length - 1];
    var B;
    var AB, PA, PB;
    var t, x;
    var count = 0;
    for (var i = 0; i < this.vertices.length; ++i) {
        B = this.vertices[i];
        PA = A.sub(P);
        PB = B.sub(P);
        if (PA.cross(PB) === 0 && PA.dot(PB) <= 0) {
            return 0;
        }
        AB = B.sub(A);
        if (A.y !== B.y) {
            t = -PA.y / AB.y;
            x = A.x + AB.x * t;
            if (t >= 0 && t < 1 && x > P.x) {
                count++;
            }
        }
        A = B;
    }

    return count % 2 === 1 ? 1 : -1;
};


Polygon.prototype.getPathString = function () {
    var vts = this.vertices;
    var res = 'M' + vts[0].x + ' ' + vts[0].y;
    for (var i = 1; i < vts.length; ++i) {
        res += 'L' + vts[i].x + ' ' + vts[i].y;
    }
    res += 'z';
    return res;
};


Polygon.prototype.copy = function () {
    return new Polygon(this.vertices.map((v) => {
        return v.copy();
    }));
};

Polygon.make = function (vertices) {
    return new Polygon(vertices);
};

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Polygon);


/***/ }),

/***/ 2759:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Vec2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(557);


/**
 *
 * @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 _Vec2__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(this.x, this.y);
};

/***
 *
 * @return {Vec2}
 * @constructor
 */
Rectangle.prototype.B = function () {
    return new _Vec2__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(this.x + this.width, this.y);
};

/***
 *
 * @return {Vec2}
 * @constructor
 */
Rectangle.prototype.C = function () {
    return new _Vec2__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(this.x + this.width, this.y + this.height);
};

/***
 *
 * @return {Vec2}
 * @constructor
 */
Rectangle.prototype.D = function () {
    return new _Vec2__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(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 = _Vec2__WEBPACK_IMPORTED_MODULE_0__/* ["default"].make */ .Z.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 _Vec2__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(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.copy = function () {
    return new Rectangle(this.x, this.y, this.width, this.height);
};


/**
 * @returns {Rectangle}
 */
Rectangle.prototype.clone = function () {
    return this.copy();
};

/***
 *
 * @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 __WEBPACK_DEFAULT_EXPORT__ = (Rectangle);

/***/ }),

/***/ 557:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/***
 *
 * @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 __WEBPACK_DEFAULT_EXPORT__ = (Vec2);

/***/ }),

/***/ 7988:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "map": () => (/* binding */ map),
/* harmony export */   "sumArr": () => (/* binding */ sumArr),
/* harmony export */   "radianInRange": () => (/* binding */ radianInRange),
/* harmony export */   "distance": () => (/* binding */ distance),
/* harmony export */   "numberToString": () => (/* binding */ numberToString),
/* harmony export */   "isNumber": () => (/* binding */ isNumber),
/* harmony export */   "numberAutoFixed": () => (/* binding */ numberAutoFixed),
/* harmony export */   "integerZeroPadding": () => (/* binding */ integerZeroPadding),
/* harmony export */   "harmonicMean": () => (/* binding */ harmonicMean)
/* harmony export */ });
/**
 *
 * @param {number} x
 * @param {number} l
 * @param {number} h
 * @param {number} L
 * @param {number} H
 * @returns {number}
 */
function map(x, l, h, L, H) {
    return (x - l) / (h - l) * (H - L) + L;
}


function sumArr(arr) {
    var res = 0;
    for (var i = 0; i < arr.length; ++i)
        res += arr[i];
    return res;
}

function radianInRange(x, start, end) {
    if (start > end) return radianInRange(x, end, start);
    if (x < start) x += (Math.PI * 2) * Math.ceil((start - x) / 2 / Math.PI);
    if (x > end) x -= (Math.PI * 2) * Math.ceil((x - end) / 2 / Math.PI);
    return x >= start && x <= end;
}


function distance(x0, y0, x1, y1) {
    var dx = x0 - x1;
    var dy = y0 - y1;
    return Math.sqrt(dx * dx + dy * dy);
}

/**
 *
 * @param {Number} numb
 * @param {Number} floatFixed
 * @param {"."|","} decimalSeparator
 * @param {","|"."} thousandsSeparator
 * @param {Number} decimalPadding
 */
function numberToString(numb, floatFixed, decimalSeparator, thousandsSeparator, decimalPadding) {
    if (floatFixed === undefined || floatFixed === null || typeof floatFixed != "number" || isNaN(floatFixed) || floatFixed < -1) floatFixed = -1;
    if (decimalSeparator === undefined || decimalSeparator === null || (decimalSeparator != '.' && decimalSeparator != ',')) decimalSeparator = '.';
    if (thousandsSeparator === undefined || thousandsSeparator === null || (floatFixed >= 0 && thousandsSeparator == decimalSeparator)) thousandsSeparator = undefined;
    if (thousandsSeparator != ',' && thousandsSeparator != '.') thousandsSeparator = undefined;
    if (decimalPadding === undefined || decimalPadding === null || typeof decimalPadding != "number" || isNaN(decimalPadding) || decimalPadding < 0) decimalPadding = 0;

    var text = numb.toString();
    var matched = text.match(/[+-]?([0-9]*)(\.([0-9]*))?(e([+-]?[0-9]+))?/);
    var dec = matched[1] || '';
    var real = matched[3] || '';
    var floatPoint = parseInt(matched[5] || '0');
    var decDigits = dec.split('').map(function (d) {
        return parseInt(d)
    });
    var realDigits = real.split('').map(function (d) {
        return parseInt(d)
    });

    while (floatPoint < 0) {
        if (decDigits.length > 0) {
            realDigits.unshift(decDigits.pop());
        }
        else {
            realDigits.unshift(0);
        }
        floatPoint++;
    }
    while (floatPoint > 0) {
        if (realDigits.length > 0) {
            decDigits.push(realDigits.unshift());
        }
        else {
            decDigits.push(0);
        }
        floatPoint++;
    }

    var mem = 0, i, cValue;
    if (floatFixed > realDigits.length) {
        while (realDigits.length < floatFixed) {
            realDigits.push(0);
        }
    }
    else if (floatFixed < realDigits.length && floatFixed >= 0) {
        i = floatFixed;
        mem = realDigits[i] >= 5 ? 1 : 0;
        realDigits.splice(floatFixed);
        --i;
        while (mem > 0) {
            if (i >= 0) {
                cValue = realDigits[i] + mem;
                realDigits[i] = cValue % 10;
                mem = Math.floor(cValue / 10);
            }
            else {
                if (decDigits.length + i < 0) decDigits.unshift(0);
                cValue = decDigits[decDigits.length + i] + mem;
                decDigits[decDigits.length + i] = cValue % 10;
                mem = Math.floor(cValue / 10);
            }
            --i;
        }
    }


    while (decDigits.length < decimalPadding) {
        decDigits.unshift(0);
    }

    var decText = numb < 0 ? '-' : '';
    var breadMod = (decDigits.length + 2) % 3;
    if (thousandsSeparator) {
        for (i = 0; i < decDigits.length; ++i) {
            decText += decDigits[i];
            if (i % 3 == breadMod && i + 1 < decDigits.length) {
                decText += thousandsSeparator;
            }
        }
    }
    else {
        decText += decDigits.join('');
    }

    var realText = realDigits.length == 0 ? '' : decimalSeparator + realDigits.join('');

    return decText + realText;
}

/***
 *
 * @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 integerZeroPadding(number, length) {
    var res = number + '';
    while (res.length < length) res = '0' + res;
    return res;
}

function harmonicMean(a, b) {
    return 2 / (1 / a + 1 / b);
}

/***/ }),

/***/ 7848:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Ld": () => (/* binding */ randomArbitrary),
/* harmony export */   "Iy": () => (/* binding */ randomInt)
/* harmony export */ });
/* unused harmony export randomPick */

/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function randomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

/**
 * Returns a random integer between min (inclusive) and max (inclusive)
 * Using Math.round() will give you a non-uniform distribution!
 */
function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function randomPick(arr) {
    var id = randomInt(0, arr.length - 1);
    return arr[id];
}

/***/ }),

/***/ 5447:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "fileExist": () => (/* binding */ fileExist),
/* harmony export */   "saveAs": () => (/* binding */ saveAs),
/* harmony export */   "saveTextAs": () => (/* binding */ saveTextAs)
/* harmony export */ });
/* harmony import */ var _Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9399);



/***
 * @typedef {{revokeTimeout?: number, autoBom?:boolean }} FileSaverOpts
 *
 */
function fileExist(url) {
    var xhr = new XMLHttpRequest();
    xhr.open('HEAD', url, true);
    return new Promise(function (resolve) {
        xhr.onreadystatechange = function () {
            if (this.readyState === 4) {
                resolve(xhr.status === 200);
            }
        };

        xhr.onerror = function (err) {};

        xhr.send();
    });
}

/***
 *
 * @param url
 * @param name
 * @param {FileSaverOpts} opts
 */
function download(url, name, opts) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.responseType = 'blob';
    xhr.onload = function () {
        saveAs(xhr.response, name, opts);
    }
    xhr.onerror = function () {
        console.error('Could not download: ' + url);
    };
    xhr.send(null);
}


function bom(blob, opts) {
    if (typeof opts === undefined)
        opts = { autoBom: false };
    else if (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__WEBPACK_IMPORTED_MODULE_0__/* ["default"].isSafari */ .Z.isSafari;
    var isChromeIOS = _Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_0__/* ["default"].isChromeIOS */ .Z.isChromeIOS;
    var isMacOSWebView = _Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_0__/* ["default"].isMacOSWebView */ .Z.isMacOSWebView;
    var isSafariUnder13 = (_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_0__/* ["default"].browser.type */ .Z.browser.type === 'safari' && parseFloat(_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_0__/* ["default"].browser.version */ .Z.browser.version) < 13);
    if ((!isChromeIOS || (force && isSafari) || isMacOSWebView)
        && typeof FileReader !== 'undefined' & !isSafariUnder13) {
        var reader = new FileReader();
        reader.onloadend = function () {
            var url = reader.result;
            url = isChromeIOS ? url : url.replace(/^data:[^;]*/, 'data:attachment/file');
            if (popup) popup.location.href = url;
            else location = url;
            popup = null;
        };
        reader.readAsDataURL(blob);
    }
    else {
        var URL = window.URL || window.webkitURL;
        var url = URL.createObjectURL(blob);
        if (popup) popup.location.href = url;
        else location.href = url;
        popup = null;
        setTimeout(function () {
            URL.revokeObjectURL(blob);
        }, (opts && opts.revokeTimeout) || 4E4);
    }
}

/***
 *
 * @param {string  | File | Blob}blob
 * @param {string=} name
 * @param {Object=} opts
 * @param {Object=} popup
 */
function saveAs(blob, name, opts, popup) {
    if (typeof window !== "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__WEBPACK_IMPORTED_MODULE_0__/* ["default"].isMacOSWebView */ .Z.isMacOSWebView) {
        normalSaveAs(blob, name, opts);
    }
    else if ('msSaveOrOpenBlob' in navigator) {
        msSaveAs(blob, name, opts);
    }
    else {
        setTimeout(function () {
            popupSaveAs(blob, name, opts, popup);
        }, 100)
    }
}

function saveTextAs(text, name, opts) {
    var blob = new Blob([text], { type: 'text/plain' });
    saveAs(blob, name, opts);
}


/***/ }),

/***/ 3154:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(863);
/* harmony import */ var _String_stringGenerate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1334);
/* harmony import */ var _Code_safeThrow__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5650);




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) {
    _HTML5_EventEmitter__WEBPACK_IMPORTED_MODULE_0__/* ["default"].call */ .ZP.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(() => 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 () {
    return new Promise(rs => {
        var iframeLoaded = () => {
            if (this.host.removeEventListener) {
                this.host.removeEventListener("load", iframeLoaded);
            }
            else {
                this.host.detachEvent("onload", iframeLoaded);
            }
            this.sender = this.host.contentWindow;
            rs();
        };
        if (this.host instanceof Worker) {
            this.type = TYPE_WORKER_MASTER;
            this.sender = this.host;
            this.receiver = this.host;
        }
        else if (this.host.tagName === 'IFRAME') {
            this.type = TYPE_IFRAME_MASTER;
            this.receiver = self;
            this.id = this.host.src;
            this.origin = '*';
            if (this.host.addEventListener) {
                this.host.addEventListener("load", iframeLoaded);
            }
            else {
                this.host.attachEvent("onload", iframeLoaded);
            }
        }
        else if (IFrameBridge.isInIFrame()) {
            this.type = TYPE_IFRAME;
            this.sender = window.parent;
            this.receiver = this.host;
            this.id = location.href;
            this.origin = '*';

        }
        else if (IFrameBridge.isInWorker()) {
            this.type = TYPE_WORKER;
            this.sender = this.host;
            this.receiver = this.host;
        }
        if (this.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 () {
            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__WEBPACK_IMPORTED_MODULE_0__/* ["default"].prototype */ .ZP.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) {
                            (0,_Code_safeThrow__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(err);
                            this.__azarResolve(data.taskId, null, err);
                        }.bind(this));
                }
                else {
                    this.__azarResolve(data.taskId, result);
                }
            } catch (err) {
                (0,_Code_safeThrow__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(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 = (0,_String_stringGenerate__WEBPACK_IMPORTED_MODULE_1__.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 __WEBPACK_DEFAULT_EXPORT__ = (IFrameBridge);

/***/ }),

/***/ 6672:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ Network_Thread)
});

// EXTERNAL MODULE: ./node_modules/absol/src/Network/IFrameBridge.js
var IFrameBridge = __webpack_require__(3154);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
;// 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);");
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
;// 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));
    IFrameBridge/* default.call */.Z.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);
};

Thread.prototype.destroy = function () {
    if (this.worker) {
        this.worker.terminate();
        delete this.worker;
    }
};


Thread.prototype.revokeResource = function () {
    this.destroy();
    this.revokeResource = noop/* default */.Z;
};

OOP/* default.mixClass */.ZP.mixClass(Thread, IFrameBridge/* default */.Z);

/* harmony default export */ const Network_Thread = (Thread);

/***/ }),

/***/ 6069:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });

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 && (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 && (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 && (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 __WEBPACK_DEFAULT_EXPORT__ = (XHR);

/***/ }),

/***/ 9238:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ve": () => (/* binding */ loadScript),
/* harmony export */   "AU": () => (/* binding */ isImageURLAllowCrossOrigin),
/* harmony export */   "t2": () => (/* binding */ loadToBlobURL)
/* harmony export */ });

var XLoader = {};

function 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 = loadScript;


function isImageURLAllowCrossOrigin(url) {
    return new Promise((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(res=> res.blob()).then(blob=> URL.createObjectURL(blob));
    return blobCache[url];
}

/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = ((/* unused pure expression or super */ null && (XLoader)));

/***/ }),

/***/ 56:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Hg": () => (/* binding */ parsedNodeToAST),
/* harmony export */   "xI": () => (/* binding */ parsedNodeToASTChain),
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _DataStructure_Heap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5491);




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__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP(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__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .ZP(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 __WEBPACK_DEFAULT_EXPORT__ = (DPParseInstance);


/***/ }),

/***/ 3281:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "Z": () => (/* binding */ Pharse_DPParser)
});

;// 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);
// EXTERNAL MODULE: ./node_modules/absol/src/Pharse/DPParseInstance.js
var DPParseInstance = __webpack_require__(56);
;// 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 DPParseInstance/* default */.ZP(this, source, target);
};

/* harmony default export */ const Pharse_DPParser = (DPParser);

/***/ }),

/***/ 1942:
/***/ (() => {

if (navigator.geolocation) {
    var getCurrentPosition = navigator.geolocation.getCurrentPosition;
    var lastResult = null;
    navigator.geolocation.getCurrentPosition = function (successCallback, errorCallback, options) {
        if (typeof successCallback !== "function") successCallback = function (){};
        if (typeof errorCallback !== "function") errorCallback = function (){};
        var ended = false;
        var to = setTimeout(function (){
            if (lastResult && !ended) {
                ended = true;
                successCallback && successCallback(lastResult);
            }
            else if (!ended) {
                ended = true;
                errorCallback && errorCallback(new Error("GPS không phản hồi."));
            }
        }, lastResult?5000: 10000);
        getCurrentPosition.call(this, function (result){
            lastResult = result;
            if (!ended) {
                ended = true;
                successCallback && successCallback(lastResult);
            }
        }, function (error) {
            if (error && error.message.indexOf('deni') >0 && !ended) {
                ended = true;
                errorCallback && errorCallback(new Error("Chưa cấp quyền truy cập GPS."));
            }
            else  if (lastResult && !ended) {
                ended = true;
                successCallback && successCallback(lastResult);
            }
            else if (!ended) {
                ended = true;
                errorCallback && errorCallback(error);
            }
        }, {maximumAge: 1000});
    }
}


/***/ }),

/***/ 5421:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ZP": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* unused harmony exports getComputedStyleCache, getComputedStyleValueCache, computePrintAttr */
/* harmony import */ var _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2759);
/* harmony import */ var _HTML5_Svg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6821);
/* harmony import */ var _HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6628);
/* harmony import */ var _JSX_attribute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2953);
/* harmony import */ var _Network_XLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9238);








var _ = _HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].ShareInstance._ */ .ZP.ShareInstance._;
var $ = _HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].ShareInstance.$ */ .ZP.ShareInstance.$;
var $$ = _HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* ["default"].ShareInstance.$$ */ .ZP.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(dir => (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('padding-' + dir)));
    var borderWidthStyle = dirs.map(dir => (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('border-' + dir + '-width')));

    var contentBound = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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: (elt) => elt.nodeType === Node.TEXT_NODE,
    exec: (printer, text, scope, stack, accept) => {
        var O = printer.O;
        var elt = text.parentElement;
        var bound = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.fromClientRect((0,_HTML5_Dom__WEBPACK_IMPORTED_MODULE_2__/* .getTextNodeBound */ .m1)(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__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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(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: (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: (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(borderRadius),
            color: borderColor,
        })

        return true;


    },
    exec: (printer, elt, scope, stack, accept) => {
        var borderStyle = scope.get('borderStyle');
        var bound = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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: (elt, scope, stack) => {
        return elt.getComputedStyleValue('background-image') !== 'none';
    },
    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__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.fromClientRect(elt.getBoundingClientRect());
        rect.x -= printer.O.x;
        rect.y -= printer.O.y;
        var borderRadius = ['top-left', 'top-right', 'bottom-right', 'bottom-left'].map(key => (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('border-' + key + '-radius')));
        var image = (0,_Network_XLoader__WEBPACK_IMPORTED_MODULE_4__/* .isImageURLAllowCrossOrigin */ .AU)(url).then(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(x => 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((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(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(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(err => {
            console.error(err);
        });
        printer.image(image, rect);
        return true;
    }
});


PrintSerialHandlers.push({
    id: 'BreakInside',
    match: (elt, scope, stack) => {
        return getComputedStyleValueCache(elt, 'break-inside') === 'avoid';
    },
    exec: (printer, elt, scope, stack, accept) => {
        var rect = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.fromClientRect(elt.getBoundingClientRect());
        rect.x -= printer.O.x;
        rect.y -= printer.O.y;

        printer.rect(rect, {});
        return true;
    }
});


PrintSerialHandlers.push({
    id: 'MDI_FA',
    match: (elt, scope, stack) => elt.classList && (elt.classList.contains('mdi')
        || elt.classList.contains('fab') || elt.classList.contains('far') || elt.classList.contains('fas') || elt.classList.contains('material-icons')),
    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__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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: elt => elt.tagName && elt.tagName.toLowerCase() === 'img' && elt.src && elt.naturalWidth,
    exec: (printer, elt, scope, stack, accept) => {
        var bound = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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: elt => elt.tagName && elt.tagName.toLowerCase() === 'canvas',
    exec: (printer, elt, scope, stack, accept) => {
        var bound = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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: elt => elt.tagName && elt.tagName.toLowerCase() === 'svg',
    exec: (printer, elt, scope, stack, accept) => {
        var bound = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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__WEBPACK_IMPORTED_MODULE_1__/* ["default"].svgToCanvas */ .ZP.svgToCanvas(elt.__origin__).catch(err => {
            console.error(err);
        });
        res.elt = elt;
        printer.image(res, rect);
    }
});

PrintSerialHandlers.push({
    id: 'TextInput',
    match: (elt, scope, stack) => {
        return elt.tagName === 'INPUT' && (elt.attr('type') === 'text' || elt.attr('type') === 'number' || !elt.attr('type'));
    },
    exec: (printer, elt, scope, stack, accept) => {
        var O = printer.O;
        var style = getComputedStyleCache(elt);
        var paddingLeft = (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('padding-left'));
        var paddingTop = (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('padding-top'));
        var paddingBottom = (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('padding-bottom'));
        var borderLeftWidth = (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('border-left-width'));
        var borderTopWidth = (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('border-top-width'));
        var borderBottomWidth = (0,_JSX_attribute__WEBPACK_IMPORTED_MODULE_3__.parseMeasureValue)(style.getPropertyValue('border-top-width'));
        var rect = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.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: elt => elt.hasClass && elt.hasClass('as-page-break'),
    exec: (printer, elt, scope, stack, accept) => {
        var rect = _Math_Rectangle__WEBPACK_IMPORTED_MODULE_0__/* ["default"].fromClientRect */ .Z.fromClientRect(elt.getBoundingClientRect());
        rect.x -= printer.O.x;
        rect.y -= printer.O.y;
        printer.pageBreak(rect.A());
    }
});


PrintSerialHandlers.push({
    id: '*',
    match: () => true,
    exec: (printer, elt, scope, stack, accept) => {
        if (elt.getComputedStyleValue('display') === 'none') return;
        if (elt.childNodes) {
            Array.prototype.forEach.call(elt.childNodes, child => accept(child));
        }
    }
})

/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PrintSerialHandlers);

/***/ }),

/***/ 9673:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "I": () => (/* binding */ mergePdfs)
/* harmony export */ });
/* harmony import */ var _Network_XLoader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9238);


// 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 = (0,_Network_XLoader__WEBPACK_IMPORTED_MODULE_0__/* .loadScript */ .ve)(pdLibUrl).then(() => window.PDFLib)
    }
    return libSync;
}

function loadPdf(data) {
    if (typeof data === "string") {
        return fetch(data).then(res => res.arrayBuffer()).then(buff => 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(() => {
        var pdfSync = pdfsToMerges.map(it => loadPdf(it).then(r => {
            processInfo.loaded++;
            onProcess && onProcess(processInfo);
            return r;
        }));
        pdfSync.push(PDFLib.PDFDocument.create());
        return Promise.all(pdfSync);
    }).then(pdfs => {
        var mergedPdf = pdfs.pop();
        return pdfs.reduce((sync, pdf) => {
            return mergedPdf.copyPages(pdf, pdf.getPageIndices()).then(copiedPages => sync.then(() => copiedPages))
                .then(copiedPages => {
                    copiedPages.forEach((page) => {
                        mergedPdf.addPage(page);
                    });
                    processInfo.merged++;
                    onProcess && onProcess(processInfo);
                });
        }, Promise.resolve()).then(() => mergedPdf);
    }).then(mergedPdf => mergedPdf)
}


/***/ }),

/***/ 2691:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
// ESM COMPAT FLAG
__webpack_require__.r(__webpack_exports__);

// EXPORTS
__webpack_require__.d(__webpack_exports__, {
  "PaperPrinter": () => (/* reexport */ Print_PaperPrinter),
  "PrintSerializer": () => (/* reexport */ Print_PrintSerializer),
  "ShareSerializer": () => (/* binding */ ShareSerializer),
  "downloadAsPDF": () => (/* binding */ downloadAsPDF),
  "mergePdfs": () => (/* reexport */ pdf/* mergePdfs */.I)
});

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var Dom = __webpack_require__(6628);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/VarScope.js
var VarScope = __webpack_require__(1312);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Rectangle.js
var Rectangle = __webpack_require__(2759);
// EXTERNAL MODULE: ./node_modules/absol/src/Print/PrintSerialHandlers.js
var PrintSerialHandlers = __webpack_require__(5421);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/XLoader.js
var XLoader = __webpack_require__(9238);
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate = __webpack_require__(1334);
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/PrintSerializer.js









/***
 * @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 = PrintSerialHandlers/* default */.ZP;

/***
 *
 * @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) {
    if (elt.nodeType === Node.ELEMENT_NODE) Dom/* default.ShareInstance.$ */.ZP.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, elt1 => {
                this.accept(printer, elt1, new VarScope/* default */.Z(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 $ = Dom/* default.ShareInstance.$ */.ZP.ShareInstance.$;
    if (!(docList instanceof Array)) docList = [docList];
    docList = docList.map(doc => {
        if (typeof doc === "string") {
            return {
                elt: $(doc)
            }
        }
        else if ((0,Dom/* isDomNode */.mV)(doc)) {
            return {
                elt: $(doc)
            }
        }
        else if (typeof doc === "object" && doc) {
            if (typeof doc.elt === "string") doc.elt = $(doc.elt);
            if (doc.elt && (0,Dom/* isDomNode */.mV)(doc.elt))
                return doc;
        }
        else return null;
    }).filter(it => !!it);
    var sync = [];
    var processInfo = {
        state: 'RENDER_DOM',
        total: {
            all: 0,
            text: 0,
            image: 0
        },
        dom: {
            text: 0,
            image: 0
        },
        onProcess: () => {
            onProcess && onProcess(processInfo);
        }
    };
    printer.processInfo = processInfo;
    var contentChildList = docList.map(doc => {
        var elt = doc.elt;
        return (0,Dom/* depthClone */.qE)(elt, (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(rs => {
                    setTimeout(() => {
                        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((0,XLoader/* isImageURLAllowCrossOrigin */.AU)(originElt.src).then(result => {
                    var newElt;
                    if (!result) {
                        newElt = copyElt.cloneNode();
                        newElt.__idx__ = copyElt.__idx__;
                        newElt.__origin__ = copyElt.__origin__;
                        ;
                        copyElt.parentElement.replaceChild(newElt, copyElt);
                        return (0,XLoader/* loadToBlobURL */.t2)('https://absol.cf/crossdownload.php?file=' + encodeURIComponent(originElt.src)).then(url => newElt.src = url)
                            .then(() => (0,Dom/* waitImageLoaded */.Lp)(newElt, 10000))
                            .then(() => {
                                if (!done) {
                                    processInfo.dom.image++;
                                    processInfo.onProcess();
                                    done = true;
                                }
                            });
                    }
                    else {
                        return (0,Dom/* waitImageLoaded */.Lp)(copyElt, 10000).then(() => {
                            if (!done) {
                                processInfo.dom.image++;
                                processInfo.onProcess();
                                done = true;
                            }
                        });
                    }
                }, (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') || (0,stringGenerate.randomIdent)()) + '_for_print');
                    copyElt.checked = originElt.checked;
                }
            }
        });
    });


    var content = Dom/* default.ShareInstance._ */.ZP.ShareInstance._({
        style: {
            width: 794 - 57 * 2 + 'px',
            //WIDTH: 1123 - 57*2
            display: 'inline-block',
            overflow: 'visible'

        },
        class: 'as-printer-content',
        child: contentChildList
    });
    var scroller = Dom/* default.ShareInstance._ */.ZP.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(rs => {
        setTimeout(rs, 50);
    }));

    return Promise.all(sync).then(() => {
        processInfo.state = "SERIALIZE";
        processInfo.onProcess();
        docList.forEach((doc, i) => {
            printer.O = Rectangle/* default.fromClientRect */.Z.fromClientRect(contentChildList[i].getBoundingClientRect()).A();
            printer.addSubDocument(printer.O, doc.opt);
            this.accept(printer, contentChildList[i], new VarScope/* default */.Z(), []);
        });
    })
        .then(() => {
            scroller.remove();
            processInfo.onProcess = noop/* default */.Z;
            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(value => 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(value => 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(value => 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(value => value.id === id);
    if (idx >= 0) {
        return this.handlers[idx];
    }
    return null;
};


/* harmony default export */ const Print_PrintSerializer = (PrintSerializer);
// EXTERNAL MODULE: ./node_modules/absol/src/Color/Color.js
var Color = __webpack_require__(257);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElement.js
var AElement = __webpack_require__(7951);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Vec2.js
var Vec2 = __webpack_require__(557);
// EXTERNAL MODULE: ./node_modules/absol/src/JSMaker/generator.js
var generator = __webpack_require__(2914);
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/PaperPrinter.js








var 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 = color => {
    try {
        color = Color/* default.parse */.Z.parse(color + '');
        return color.rgba.slice(0, 3).map(x => x * 255 >> 0);
    } catch (e) {
        return null;
    }
};

function PaperPrinter(opt) {
    this.opt = Object.assign((0,generator/* copyJSVariable */.Ew)(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(() => {
        this.processInfo.state = 'READY';
    });
}

PaperPrinter.prototype.defaultOptions = {
    size: 'a4',
    margin: { top: 57, left: 57, bottom: 57, right: 57 },
    footer: null,
    header: null,
    paddingEven: true,
    lastPagePaddingEven: false
};


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.prototype.ready = function () {
    var sync;
    if (!this.share.readySync) {
        sync = this.share.fonts.map((font) => {
            return fetch(font.url).then(res => res.blob())
                .then(blob => {
                    var reader = new window.FileReader();
                    return new Promise(rs => {
                        reader.onload = function () {
                            rs(this.result);
                        }
                        reader.readAsDataURL(blob);

                    })
                })
                .then(b64Url => {
                    var idx = b64Url.indexOf('base64,');
                    return b64Url.substring(idx + 'base64,'.length);
                }).then(b64 => {
                    font.content = b64;
                })
        });
        if (window.jspdf) {
            this.share.jsPDF = window.jspdf.jsPDF;
        }
        else {
            sync.push((0,XLoader/* loadScript */.ve)(this.share.jsPDFUrl).then(() => {
                this.share.jsPDF = window.jspdf.jsPDF;
            }))
        }
        this.share.readySync = Promise.all(sync);
    }
    return this.share.readySync;
};

/***
 *
 * @param at
 * @param opt
 */
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.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.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.prototype.pageBreak = function (at, paddingEven) {
    this.objects.push({
        type: 'page_break',
        at: at,
        paddingEven: !!paddingEven
    });
    return this;
};

/***
 *
 * @param {Rectangle}rect
 * @param {Object=}style
 */
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.prototype.image = function (image, rect, style) {
    this.objects.push({
        type: 'image',
        rect: rect,
        style: style || {},
        image: image
    });
    return this;
};


PaperPrinter.prototype.boundOf = function (objectData) {
    return this.measures[objectData.type](objectData);
};

PaperPrinter.prototype.computeObjects = function () {
    var objects = this.objects.slice();
    if (!objects[0] || objects[0].type !== 'sub_document') {
        objects.unshift({
            type: 'sub_document',
            at: Vec2/* default.ZERO */.Z.ZERO,
        })
    }
    this.subDocs = objects.reduce((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((doc, i) => {
        doc.objects.forEach((o, i) => {
            o.idx = i;
            o.bound = this.boundOf(o);
        });
        var newDocCmd = doc.objects.shift();
        doc.objects.sort((a, b) => {
            return a.bound.y - b.bound.y;
        });
        doc.opt = Object.assign((0,generator/* copyJSVariable */.Ew)(this.opt), newDocCmd.opt || {});
        doc.objects.unshift(newDocCmd);
        doc.startPage = i > 0 ? this.subDocs[i - 1].startPage + this.subDocs[i - 1].pages.length : this.computedPages;
        if (this.opt.paddingEven && doc.startPage % 2 > 0) doc.startPage++;

        var pageContentHeight = 1123 - doc.opt.margin.top - doc.opt.margin.bottom;
        doc.pages = doc.objects.reduce((ac, cr) => {
            var page = ac[ac.length - 1];
            if (cr.bound.height > pageContentHeight) {
                page.objects.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(page => page.objects.sort((a, b) => a.idx - b.idx));
        this.computedPages = doc.startPage + doc.pages.length;
    });
};


PaperPrinter.prototype.getDoc = function () {
    if  (this.docSync)  return this.docSync;
    this.docSync =  this.sync.then(() => {
        if (this.pdfDoc) return this.pdfDoc;
        var jsPDF = jspdf.jsPDF;
        this.pdfDoc = new jsPDF({
            orientation: 'p',
            unit: 'px',
            format: 'a4',
            putOnlyUsedFonts: true,
            floatPrecision: 16,
            dpi: 300,
            hotfixes: ["px_scaling"]
        });
        this.share.fonts.forEach(font => {
            this.pdfDoc.addFileToVFS(font.fileName, font.content);
            this.pdfDoc.addFont(font.fileName, font.name, font.style);
        });
        return this.pdfDoc;
    });
    this.sync = this.docSync;
    return this.docSync;
};

PaperPrinter.prototype.flush = function () {
    this.sync = this.getDoc().then(pdfDoc => {
        this.computeObjects();
        var subDocs = this.subDocs;
        this.subDocs = null;//reset
        var onProcess = this.opt.onProcess;
        var processInfo = this.processInfo;
        processInfo.pdf = {
            all: subDocs.reduce((ac, sD) => ac + sD.objects.length, 0),
            done: 0
        };
        processInfo.onProcess = () => {
            onProcess && onProcess(processInfo);
        };
        processInfo.state = 'RENDER_PDF';
        return subDocs.reduce((sync, doc, i) => {
            return sync.then(() => {
                var startPage = doc.startPage;
                while (pdfDoc.getNumberOfPages() <= startPage) {
                    pdfDoc.addPage();
                }

                return doc.pages.reduce((docSync, page, i) => {
                    return docSync.then(() => {
                        if (pdfDoc.getNumberOfPages() <= startPage + i) {
                            pdfDoc.addPage();
                        }
                        pdfDoc.setPage(startPage + i + 1);
                        page.O = new Vec2/* default */.Z(this.opt.margin.left, this.opt.margin.top - page.y);
                        return page.objects.reduce((pageSync, obj) => {
                            return pageSync.then(() => {
                                var type = obj.type;
                                var res = this.pdfHandlers[type](page, pdfDoc, obj);
                                processInfo.pdf.done++;
                                if (res && res.then) {
                                    res.then(() => processInfo.onProcess())
                                }
                                return res;
                            });
                        }, Promise.resolve()).then(() => {
                            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(() => {
                        if (this.opt.lastPagePaddingEven) {
                            while (pdfDoc.getNumberOfPages() % 2 > 0) {
                                pdfDoc.addPage();
                            }
                        }
                    })
            })
        }, Promise.resolve());
    });
    return this.sync;
};


PaperPrinter.prototype.exportAsPDF = function () {
    return this.flush().then(() => this.pdfDoc);
};


PaperPrinter.prototype.pdfHandlers = {
    text: function (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 (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 (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 (context, doc, data) {
        var 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(err => {
            });
        }
        else return handleImage(data.image);
    },
    page_break: function (context, doc, data) {
    },
    sub_document: function (context, doc, data) {
    }
};


PaperPrinter.prototype.measures = {
    sub_document: data => {
        return new Rectangle/* default */.Z(0, 0, 0, 0);
    }, rect: data => {
        return data.rect;
    },
    text: data => {
        return data.pos;
    },
    image: data => {
        return data.rect;
    },
    line: data => {
        return Rectangle/* default.boundingPoints */.Z.boundingPoints([data.start, data.end]);
    },
    page_break: data => {
        return new Rectangle/* default */.Z(0, data.at.y, 0, 0);
    }
};


/* harmony default export */ const Print_PaperPrinter = (PaperPrinter);


// EXTERNAL MODULE: ./node_modules/absol/src/Network/FileSaver.js
var FileSaver = __webpack_require__(5447);
// EXTERNAL MODULE: ./node_modules/absol/src/Print/pdf.js
var pdf = __webpack_require__(9673);
;// CONCATENATED MODULE: ./node_modules/absol/src/Print/printer.js





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/* default.ShareInstance.$ */.ZP.ShareInstance.$;
    if (!(docList instanceof Array)) docList = [docList];
    docList = docList.map(doc => {
        if (typeof doc === "string") {
            return {
                elt: $(doc)
            }
        }
        else if ((0,Dom/* isDomNode */.mV)(doc)) {
            return {
                elt: $(doc)
            }
        }
        else if (typeof doc === "object" && doc) {
            if (typeof doc.elt === "string") doc.elt = $(doc.elt);
            if (doc.elt && (0,Dom/* isDomNode */.mV)(doc.elt))
                return doc;
        }
        else return null;
    }).filter(it => !!it).map(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 Print_PaperPrinter(opt);
    return serializer.serialize(docList, printer, opt.onProcess)
        .then(printer => printer.exportAsPDF())
        .then(doc => {
            (0,FileSaver.saveAs)(doc.output('blob'), opt.fileName);
        });
}







/***/ }),

/***/ 3224:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(56);



/*********************************
 * EXPRESSION
 */
var operatorOrder = {
    'NOT': 4,
    '!': 4,
    '*': 5,
    '/': 5,
    'MOD': 5,
    '%': 5,
    '+': 6,
    '-': 6,
    '<': 9,
    '>': 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])))*\*+\/)/],
    ['tsymbol', /(\.\.\.)|(===)/],
    ['dsymbol', /\+\+|--|==|!=|<=|>=|\|\||&&/],
    ['symbol', /[^\s_a-zA-Z0-9]/],
];


var rules = [];

rules.push({
    target: 'null',
    elements: ['_null'],
    toAST: function (parsedNode) {
        return {
            type: 'NullLiteral',
        }
    }
});

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 (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    },
    toASTChain: function (parsedNode) {
        return [(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode)];
    }
});


rules.push({
    target: 'args_list',
    elements: ['args_list', '_,', 'exp'],
    longestOnly: true,
    ident: 'args_list_rec',
    toASTChain: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[0]).concat((0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2]));
    }
});


rules.push({
    target: 'function_callee',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'function_callee',
    elements: ['mem_exp'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(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: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])
        }
    }
});


rules.push({
    target: 'function_call',
    elements: ['function_callee', '_(', '_)'],
    toAST: function (parsedNode) {
        return {
            type: 'CallExpression',
            arguments: [],
            callee: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])
        };
    }
});


rules.push({
    target: 'new_expression',
    elements: ['_new', 'function_call'],
    toAST: function (parsedNode) {
        var callAst = (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1])
        return {
            type: 'NewExpression',
            arguments: callAst.arguments,
            callee: callAst.callee
        }
    }
});


rules.push({
    target: 'exp',
    elements: ['new_expression'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['null'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'number',
    elements: ['.number'],
    toAST: function (parsedNode) {
        return {
            type: 'NumericLiteral',
            value: parseFloat(parsedNode.children[0].content)
        }
    }
});


rules.push({
    target: 'string',
    elements: ['.string'],
    toAST: function (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 (parsedNode) {
        return {
            type: 'BooleanLiteral',
            value: true
        };
    }
});


rules.push({
    target: 'boolean',
    elements: ['_false'],
    toAST: function (parsedNode) {
        return {
            type: 'BooleanLiteral',
            value: false
        };
    }
});

rules.push({
    target: 'exp',
    elements: ['number'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['string'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'exp',
    elements: ['boolean'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

['+', '-', '*', '/', '%', '&&', '||', 'XOR', '==','===', '!=', '<', '>', '>=', '<='].forEach(function (op) {
    rules.push({
        target: 'bin_op',
        elements: ['_' + op],
        toAST: function (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 (parseNode) {
        var res = [];
        if (parseNode.children[0].rule === this) {
            res = res.concat(this.toASTChain(parseNode.children[0]));
        }
        else {
            res.push((0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(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((0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parseNode.children[2]));
        }
        return res;
    },
    toAST: function (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: 'condition_exp',
    elements: ['exp', '_?', 'exp', '_:', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'ConditionalExpression',
            test: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            consequent: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2]),
            alternate: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[4])
        }
    }
});

rules.push({
    target: 'sequence_exp',
    elements: ['exp', '_,', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'SequenceExpression',
            expressions: [(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]), (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])]
        }
    }
});

rules.push({
    target: 'sequence_exp',
    elements: ['sequence_exp', '_,', 'exp'],
    toAST: function (parsedNode) {
        var ast = (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
        ast.expressions.push((0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2]));
        return ast;
    }
});


rules.push({
    target: 'exp',
    elements: ['condition_exp'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'exp',
    elements: ['function_call'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'bracket_group',
    elements: ['_(', 'exp', '_)'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]);
    }
});

rules.push({
    target: 'exp',
    elements: ['bracket_group'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(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 (parsedNode) {
                return {
                    type: 'UnaryExpression',
                    argument: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
                    operator: {
                        type: 'UnaryOperator',
                        content: op
                    }
                }
            }
        });
    });
});

rules.push({
    target: 'exp',
    elements: ['unary_exp'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['ident', '_.', 'ident'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['ident', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['new_expression', '_.', 'ident'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['new_expression', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['mem_exp', '_.', 'ident'],
    longestOnly: true,
    ident: 'mem_exp_ident_rev',
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['mem_exp', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'mem_exp',
    elements: ['bracket_group', '_.', 'ident'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: false,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'mem_exp',
    elements: ['bracket_group', '_[', 'exp', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "MemberExpression",
            computed: true,
            object: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            property: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});


rules.push({
    target: 'exp',
    elements: ['mem_exp'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


/**********************************************************************************************************************/


rules.push({
    target: 'object_exp',
    elements: ['_{', '_}'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectExpression',
            properties: []
        }
    }
});

rules.push({
    target: 'object_exp',
    elements: ['_{', 'object_property_list', '_}'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectExpression',
            properties: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[1])
        }
    }
});


rules.push({
    target: 'exp',
    elements: ['object_exp'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'object_property',
    elements: ['ident', '_:', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectProperty',
            key: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            value: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        };
    }
});

rules.push({
    target: 'object_property',
    elements: ['string', '_:', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'ObjectProperty',
            key: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            value: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        };
    }
});


rules.push({
    target: 'object_property_list',
    elements: ['object_property'],
    toASTChain: function (parsedNode) {
        return [(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])];
    }
});

rules.push({
    target: 'object_property_list',
    elements: ['object_property_list', '_,', 'object_property'],
    longestOnly: true,
    ident: 'object_property_list_rec',
    toASTChain: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[0]).concat([(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])]);
    }
});


/**********************************************************************************************************************/


rules.push({
    target: 'exp',
    elements: ['array_exp'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'array_exp',
    elements: ['_[', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "ArrayExpression",
            elements: []
        };
    }
});

rules.push({
    target: 'array_exp',
    elements: ['_[', 'array_item_list', '_]'],
    toAST: function (parsedNode) {
        return {
            type: "ArrayExpression",
            elements: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[1])
        };
    }
});

rules.push({
    target: 'array_item_list',
    elements: ['exp'],
    toASTChain: function (parsedNode) {
        return [(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])];
    }
});

rules.push({
    target: 'array_item_list',
    elements: ['array_item_list', '_,', 'exp'],
    longestOnly: true,
    ident: 'array_item_list_rec',
    toASTChain: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[0]).concat([(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])]);
    }
});


/**********************************************************************************************************************/
/**************FOR QUICK PARSING***********************/

rules.push({
    target: 'exp',
    elements: ['.constance'],
    toAST: function (parsedNode) {
        return parsedNode.children[0]
    },
    toASTChain: function (parsedNode) {
        return [parsedNode.children[0]];
    }
});


/***********************************************************************************************************************/

rules.push({
    target: 'generic_type',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return {
            type: 'GenericType',
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])
        }
    }
});

rules.push({
    target: 'linked_type',
    elements: ['_linktype', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'LinkedType',
            address: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1])
        }
    }
});


rules.push({
    target: 'var_type',
    elements: ['generic_type'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])
    }
});

rules.push({
    target: 'var_type',
    elements: ['linked_type'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(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 (parsedNode) {
        return {
            type: 'TypeAnnotation',
            typeAnnotation: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1])
        }
    }
});


/**********************************************************************************************************************/
/*
@decrepted ast
rules.push({
    target: 'variable_declaration',
    elements: ['_var', 'ident', 'type_annotation', '_;'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableDeclaration',
            id: parsedNodeToAST(parsedNode.children[1]),
            typeAnnotation: parsedNodeToAST(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'variable_declaration',
    elements: ['_var', 'ident', '_;'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableDeclaration',
            id: parsedNodeToAST(parsedNode.children[1]),
        }
    }
});

rules.push({
    target: 'variable_declaration',
    elements: ['_var', 'ident', '_=', 'exp', '_;'],
    toAST: function (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 (parsedNode) {
        return {
            type: 'VariableDeclaration',
            id: parsedNodeToAST(parsedNode.children[1]),
            typeAnnotation: parsedNodeToAST(parsedNode.children[2]),
            init: parsedNodeToAST(parsedNode.children[4]),
            kind: 'var'
        }

    }
});
*/

rules.push({
    target: 'variable_declarator',
    elements: ['ident', '_=', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableDeclarator',
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            init: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        }
    }
});

rules.push({
    target: 'variable_declarator',
    elements: ['ident', 'type_annotation' ,'_=', 'exp'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableDeclarator',
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            typeAnnotation: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            init: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[3])
        }
    }
});

rules.push({
    target: 'variable_declarator',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableDeclarator',
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            init: null
        }
    }
});


rules.push({
    target: 'variable_declarator',
    elements: ['ident', 'type_annotation'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableDeclarator',
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            typeAnnotation: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            init: null
        }
    }
});

rules.push({
    target: 'variable_declarator_sequence',
    elements: ['variable_declarator'],
    toASTChain: function (parsedNode) {
        return [(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])];
    }
});

rules.push({
    target: 'variable_declarator_sequence',
    elements: ['variable_declarator_sequence', '_,', 'variable_declarator'],
    toASTChain: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[0]).concat([(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])]);
    }
});



rules.push({
    target: 'variable_declaration',
    elements: ['_var', 'variable_declarator_sequence', '_;'],
    toAST: function (parsedNode) {
        return {
            type: 'VariableDeclaration',
            declarations: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[1]),
            kind: 'var'
        }
    }
});



//todo
rules.push({
    target: 'expression_statement',
    elements: ['function_call', '_;'],
    toAST: function (parsedNode) {
        return {
            type: 'ExpressionStatement',
            expression: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])
        }
    }
});


/**********************************************************************************************************************/

rules.push({
    target: 'assign_expression',
    elements: ['ident', '_=', 'exp'],
    toAST: function (parseNode) {
        return {
            type: 'AssignmentExpression',
            left: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parseNode.children[0]),
            right: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parseNode.children[2])
        }
    }
});


rules.push({
    target: 'assign_expression',
    elements: ['mem_exp', '_=', 'exp'],
    toAST: function (parseNode) {
        return {
            type: 'AssignmentExpression',
            left: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parseNode.children[0]),
            right: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parseNode.children[2])
        }
    }
});

rules.push({
    target: 'expression_statement',
    elements: ['assign_expression', '_;'],
    toAST: function (parsedNode) {
        return {
            type: 'ExpressionStatement',
            expression: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])
        }
    }
});



/**********************************************************************************************************************/
rules.push({
    target: 'if_statement_1',
    elements: ['_if', '_(', 'exp', '_)', 'statement'],
    toAST: function (parsedNode) {
        return {
            type: 'IfStatement',
            test: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2]),
            consequent: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[4])
        }
    }
});

rules.push({
    target: 'if_statement_2',
    elements: ['if_statement_1', '_else', 'statement'],
    toAST: function (parsedNode) {
        var ast = (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
        ast.alternate = (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2]);
        return ast;
    }
});


rules.push({
    target: 'statement',
    elements: ['if_statement_1'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'statement',
    elements: ['if_statement_2'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


/**********************************************************************************************************************/

rules.push({
    target: 'for_count_statement',
    elements: ['_for', 'ident', '_from', 'exp', '_to', 'exp', 'block_statement'],
    toAST: function (parsedNode) {
        return {
            type: 'ForCountStatement',
            for: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            from: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[3]),
            to: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[5]),
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[6])
        };
    }
});

rules.push({
    target: 'for_of_statement',
    elements: ['_for', 'ident', '_of', 'exp', 'block_statement'],
    toAST: function (parsedNode) {
        return {
            type: 'ForOfStatement',
            for: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            of: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[3]),
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[4])
        };
    }
});

rules.push({
    target: 'for_in_statement',
    elements: ['_for', 'ident', '_in', 'exp', 'block_statement'],
    toAST: function (parsedNode) {
        return {
            type: 'ForInStatement',
            for: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            in: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[3]),
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(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: 'for_statement',
    elements: ['_for', 'bracket_group', 'statement'],
})

/**********************************************************************************************************************/

rules.push({
    target: 'while_statement',
    elements: ['_while', 'bracket_group', 'statement'],
    toAST: function (parsedNode) {
        return {
            type: 'WhileStatement',
            test: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])
        };
    }
});

rules.push({
    target: 'statement',
    elements: ['while_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

/**********************************************************************************************************************/

rules.push({
    target: 'do_while_statement',
    elements: ['_do', 'statement', '_while', 'bracket_group', '_;'],
    toAST: function (parsedNode) {
        return {
            type: 'DoWhileStatement',
            test: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[3]),
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1])
        };
    }
});

rules.push({
    target: 'statement',
    elements: ['do_while_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

/**********************************************************************************************************************/

rules.push({
    target: 'break_statement',
    elements: ['_break', '_;'],
    toAST: function (parsedNode) {
        return {
            type: 'BreakStatement'
        };
    }
});

rules.push({
    target: 'statement',
    elements: ['break_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

/**********************************************************************************************************************/


rules.push({
    target: 'block_statement',
    elements: ['_{', '_}'],
    toAST: function (parsedNode) {
        return {
            type: 'BlockStatement',
            body: []
        }
    }
});


rules.push({
    target: 'block_statement',
    elements: ['_{', 'statement_arr', '_}'],
    toAST: function (parsedNode) {
        return {
            type: 'BlockStatement',
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[1])
        };
    }
});


rules.push({
    target: 'statement',
    elements: ['variable_declaration'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'statement',
    elements: ['block_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'statement',
    elements: ['expression_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'statement',
    elements: ['for_count_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'statement',
    elements: ['for_in_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'statement',
    elements: ['for_of_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});

rules.push({
    target: 'statement',
    elements: ['assign_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'statement_arr',
    elements: ['statement'],
    toASTChain: function (parsedNode) {
        return [(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])];
    }
});


rules.push({
    target: 'statement_arr',
    elements: ['statement_arr', 'statement'],
    longestOnly: true,
    toASTChain: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[0]).concat([(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1])]);
    }
});


/**********************************************************************************************************************/

rules.push({
    target: 'function_arguments_declaration',
    elements: ['_(', '_)'],
    toASTChain: function (parsedNode) {
        return [];
    }
});

rules.push({
    target: 'function_arguments_declaration',
    elements: ['_(', 'argument_declaration_list', '_)'],
    toASTChain: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[1]);
    }
});

rules.push({
    target: 'argument_declaration',
    elements: ['ident', 'type_annotation'],
    toAST: function (parsedNode) {
        return {
            type: "ArgumentDeclaration",
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]),
            typeAnnotation: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1])
        }
    }
});

rules.push({
    target: 'argument_declaration',
    elements: ['ident'],
    toAST: function (parsedNode) {
        return {
            type: "ArgumentDeclaration",
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])
        }
    }
});


rules.push({
    target: 'argument_declaration_list',
    elements: ['argument_declaration'],
    toASTChain: function (parsedNode) {
        return [(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0])]
    }
});

rules.push({
    target: 'argument_declaration_list',
    elements: ['argument_declaration_list', '_,', 'argument_declaration'],
    toASTChain: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[0]).concat([(0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[2])])
    }
});


/**********************************************************************************************************************/

rules.push({
    target: 'return_statement',
    elements: ['_return', 'exp', '_;'],
    toAST: function (parsedNode) {
        return {
            type: "ReturnStatement",
            argument: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1])
        };
    }
});

rules.push({
    target: 'return_statement',
    elements: ['_return', '_;'],
    toAST: function (parsedNode) {
        return {
            type: "ReturnStatement"
        };
    }
});

rules.push({
    target: 'statement',
    elements: ['return_statement'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


/**********************************************************************************************************************/


rules.push({
    target: 'function_declare',
    elements: ['_function', 'ident', 'function_arguments_declaration', 'type_annotation', 'block_statement'],
    toAST: function (parsedNode) {
        return {
            type: 'FunctionDeclaration',
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            params: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[2]),
            returnType: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[3]),
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[4])
        };
    }
});

rules.push({
    target: 'function_declare',
    elements: ['_function', 'ident', 'function_arguments_declaration', 'block_statement'],
    toAST: function (parsedNode) {
        return {
            type: 'FunctionDeclaration',
            id: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[1]),
            params: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[2]),
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[3])
        };
    }
});


rules.push({
    target: 'statement',
    elements: ['function_declare'],
    toAST: function (parsedNode) {
        return (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToAST */ .Hg)(parsedNode.children[0]);
    }
});


rules.push({
    target: 'program',
    elements: ['statement_arr'],
    toAST: function (parsedNode) {
        return {
            type: "Program",
            body: (0,_Pharse_DPParseInstance__WEBPACK_IMPORTED_MODULE_0__/* .parsedNodeToASTChain */ .xI)(parsedNode.children[0])
        }
    }
});


/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
    elementRegexes: elementRegexes,
    rules: rules,
    operatorOrder: operatorOrder
});

/***/ }),

/***/ 6382:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "wrapToLines": () => (/* binding */ wrapToLines),
/* harmony export */   "nonAccentVietnamese": () => (/* binding */ nonAccentVietnamese),
/* harmony export */   "pascalCaseToCamelCase": () => (/* binding */ pascalCaseToCamelCase),
/* harmony export */   "kebabCaseToCamelCase": () => (/* binding */ kebabCaseToCamelCase),
/* harmony export */   "underScoreToCamelCase": () => (/* binding */ underScoreToCamelCase),
/* harmony export */   "camelCaseToPascalCase": () => (/* binding */ camelCaseToPascalCase),
/* harmony export */   "underScoreToPascalCase": () => (/* binding */ underScoreToPascalCase),
/* harmony export */   "kebabCaseToPascalCase": () => (/* binding */ kebabCaseToPascalCase),
/* harmony export */   "pascalCaseToKebabCase": () => (/* binding */ pascalCaseToKebabCase),
/* harmony export */   "camelCaseToKebabCase": () => (/* binding */ camelCaseToKebabCase),
/* harmony export */   "underScoreToKebabCase": () => (/* binding */ underScoreToKebabCase),
/* harmony export */   "pascalCaseToUnderScore": () => (/* binding */ pascalCaseToUnderScore),
/* harmony export */   "pascalCaseToUpperUnderScore": () => (/* binding */ pascalCaseToUpperUnderScore),
/* harmony export */   "camelCaseToUnderScore": () => (/* binding */ camelCaseToUnderScore),
/* harmony export */   "camelCaseToUpperUnderScore": () => (/* binding */ camelCaseToUpperUnderScore),
/* harmony export */   "kebabCaseToUnderScore": () => (/* binding */ kebabCaseToUnderScore),
/* harmony export */   "kebabCaseToUpperUnderScore": () => (/* binding */ kebabCaseToUpperUnderScore),
/* harmony export */   "normalizeIdent": () => (/* binding */ normalizeIdent),
/* harmony export */   "breakTextToLineByLength": () => (/* binding */ breakTextToLineByLength)
/* harmony export */ });
/**
 *
 * @param {String} s
 * @param {Number} maxLength
 */
function wrapToLines(s, maxLength) {
    var res = [];
    var currentWord = '';
    var currentLine = '';
    for (var i = 0; i < s.length; ++i) {
        if (s[i].match(/\s/)) {
            if (currentWord.length + currentLine.length >= maxLength) {
                if (currentLine.length > 0) {
                    res.push(currentLine.trim());
                    currentLine = '';
                    currentWord = currentWord.trimLeft() + s[i];
                }
                else {
                    currentLine = currentLine + currentWord;
                    res.push(currentLine.trim());
                    currentLine = '';
                    currentWord = '';

                }
            }
            else {
                currentLine = currentLine + currentWord;
                currentWord = s[i];
            }
        }
        else {
            currentWord = currentWord + s[i];
        }
    }
    currentLine = (currentLine + currentWord).trim();
    if (currentLine.length > 0) res.push(currentLine);
    return res;
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function nonAccentVietnamese(s) {
    return s.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a")
        .replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A")
        .replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e")
        .replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E")
        .replace(/ì|í|ị|ỉ|ĩ/g, "i")
        .replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I")
        .replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o")
        .replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O")
        .replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u")
        .replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U")
        .replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y")
        .replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y")
        .replace(/đ/g, "d")
        .replace(/Đ/g, "D")
        .replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "")
        .replace(/\u02C6|\u0306|\u031B/g, "");
}




/**
 *
 * @param {String} s
 * @returns {String}
 */
function pascalCaseToCamelCase(s) {
    return s.substr(0, 1).toLowerCase() + s.substr(1);
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function kebabCaseToCamelCase(s) {
    return s.replace(/-+([^-])/g, function (full, c) {
        return c.toUpperCase();
    });
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function underScoreToCamelCase(s) {
    return s.replace(/(_+)?([^_]+)/g, function (full, underscore, word) {
        if (underscore) {
            if (word) {
                return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
            }
            else return '';
        }
        else {
            return word.toLowerCase();
        }
    });
}


/**
 *
 * @param {String} s
 * @returns {String}
 */
function camelCaseToPascalCase(s) {
    return s.substr(0, 1).toUpperCase() + s.substr(1);
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function underScoreToPascalCase(s) {
    return s.replace(/(_+|^)?([^_]+)/g, function (full, underscore, word) {
        return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
    });
}


/**
 *
 * @param {String} s
 * @returns {String}
 */
function kebabCaseToPascalCase(s) {
    return s.replace(/(-+|^)([^-])/g, function (full, u, c) {
        return c.toUpperCase();
    });
}


/**
 *
 * @param {String} s
 * @returns {String}
 */
function pascalCaseToKebabCase(s) {
    return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '-' + full.toLowerCase()
    });
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function camelCaseToKebabCase(s) {
    return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '-' + full.toLowerCase()
    });
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function underScoreToKebabCase(s) {
    return s.replace(/(^|_+)([^_]+)/g, function (full, score, word, index) {
        if (index == 0)
            return word.toLowerCase();
        return '-' + word.toLowerCase()
    });
}


/**
 *
 * @param {String} s
 * @returns {String}
 */
function pascalCaseToUnderScore(s) {
    return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '_' + full.toLowerCase()
    });
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function pascalCaseToUpperUnderScore(s) {
    return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toUpperCase();
        return '_' + full.toUpperCase()
    });
}


/**
 *
 * @param {String} s
 * @returns {String}
 */
function camelCaseToUnderScore(s) {
    return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '_' + full.toLowerCase()
    });
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function camelCaseToUpperUnderScore(s) {
    return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toUpperCase();
        return '_' + full.toUpperCase()
    });
}

/**
 *
 * @param {String} s
 * @returns {String}
 */
function kebabCaseToUnderScore(s) {
    return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) {
        if (index == 0) return word.toLowerCase();
        return '_' + word.toLowerCase()
    });
}


/**
 *
 * @param {String} s
 * @returns {String}
 */
function kebabCaseToUpperUnderScore(s) {
    return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) {
        if (index == 0) return word.toUpperCase();
        return '_' + word.toUpperCase()
    });
}


/***
 *
 * @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 = 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 (spaces) {
        res = res.replace(new RegExp(`([${spaces}]+)`, 'g'), spaces);
    }

    if (symbols && symbols !== spaces) {
        res = res.replace(new RegExp(`([${symbols}]+)`, 'g'), spaces);
    }

    if (spaces) {
        res = res.replace(new RegExp(`([${spaces}]+$)|(^[${spaces}]+)`, 'g'), '');
    }

    if (symbols && symbols !== spaces) {
        res = res.replace(new RegExp(`([${symbols}]+$)|(^[${symbols}]+$)`, 'g'), '');
    }


    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 = line => {
        var testLine = 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(line => 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 = nonAccentVietnamese;

String.prototype.nonAccentVietnamese = function () {
    return String.nonAccentVietnamese(this);
};

/***/ }),

/***/ 1334:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "identCharacters": () => (/* binding */ identCharacters),
/* harmony export */   "randomIdent": () => (/* binding */ randomIdent),
/* harmony export */   "parallelMatch": () => (/* binding */ parallelMatch),
/* harmony export */   "ipsumLoremWord": () => (/* binding */ ipsumLoremWord),
/* harmony export */   "randomWord": () => (/* binding */ randomWord),
/* harmony export */   "randomPhrase": () => (/* binding */ randomPhrase),
/* harmony export */   "randomSentence": () => (/* binding */ randomSentence),
/* harmony export */   "randomParagraph": () => (/* binding */ randomParagraph)
/* harmony export */ });
/* harmony import */ var _Math_random__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7848);


var identCharacters = function () {
    var chars = 'qwertyuiopasdfghjklzxcvbnm';
    chars = chars + chars.toUpperCase();
    var num = '0123456789';
    var spect = '_';
    return (chars + spect + num).split('');

}();


function randomIdent(length) {
    if (!(length > 0)) length = 4;
    var factor = identCharacters;
    return [factor[(Math.random() * (factor.length - 10)) >> 0]].concat(Array(length - 1).fill('').map(function () {
        return factor[(Math.random() * factor.length) >> 0];
    })).join('');
}

function parallelMatch(a, b) {
    var l = Math.min(a.length, b.length);
    var res = 0;
    for (var i = 0; i < l; ++i) {
        if (a[i] == b[i]) ++res;
    }
    return res;
}

var ipsumLoremWord = ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'sed', 'do',
    'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua', 'enim', 'ad', 'minim',
    'veniam', 'quis', 'nostrud', 'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea', 'commodo',
    'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit', 'voluptate', 'velit', 'esse', 'cillum',
    'eu', 'fugiat', 'nulla', 'pariatur', 'excepteur', 'sint', 'occaecat', 'cupidatat', 'non', 'proident',
    'sunt', 'culpa', 'qui', 'officia', 'deserunt', 'mollit', 'anim', 'id', 'est', 'laborum', 'perspiciatis',
    'unde', 'omnis', 'iste', 'natus', 'error', 'voluptatem', 'accusantium', 'doloremque', 'laudantium',
    'totam', 'rem', 'aperiam', 'eaque', 'ipsa', 'quae', 'ab', 'illo', 'inventore', 'veritatis', 'quasi', 'architecto',
    'beatae', 'vitae', 'dicta', 'explicabo', 'nemo', 'ipsam', 'quia', 'voluptas', 'aspernatur', 'aut', 'odit',
    'fugit', 'consequuntur', 'magni', 'dolores', 'eos', 'ratione', 'sequi', 'nesciunt', 'neque', 'porro',
    'quisquam', 'dolorem', 'adipisci', 'numquam', 'eius', 'modi', 'tempora', 'incidunt', 'magnam', 'aliquam',
    'quaerat', 'minima', 'nostrum', 'exercitationem', 'ullam', 'corporis', 'suscipit', 'laboriosam', 'aliquid',
    'commodi', 'consequatur', 'autem', 'vel', 'eum', 'iure', 'quam', 'nihil', 'molestiae', 'illum', 'quo',
    'at', 'vero', 'accusamus', 'iusto', 'odio', 'dignissimos', 'ducimus', 'blanditiis', 'praesentium', 'voluptatum',
    'deleniti', 'atque', 'corrupti', 'quos', 'quas', 'molestias', 'excepturi', 'occaecati', 'cupiditate',
    'provident', 'similique', 'mollitia', 'animi', 'dolorum', 'fuga', 'harum', 'quidem', 'rerum', 'facilis',
    'expedita', 'distinctio', 'nam', 'libero', 'tempore', 'sum', 'soluta', 'nobis', 'eligendi', 'optio',
    'cumque', 'impedit', 'minus', 'quod', 'maxime', 'placeat', 'facere', 'possimus', 'assumenda', 'repellendus',
    'temporibus', 'quibusdam', 'officiis', 'debitis', 'necessitatibus', 'saepe', 'eveniet', 'voluptates',
    'repudiandae', 'recusandae', 'itaque', 'earum', 'hic', 'tenetur', 'a', 'sapiente', 'delectus', 'reiciendis',
    'voluptatibus', 'maiores', 'alias', 'perferendis', 'doloribus', 'asperiores', 'repellat', 'integer',
    'nec', 'praesent', 'cursus', 'ante', 'dapibus', 'diam', 'sem', 'nibh', 'elementum', 'imperdiet', 'sagittis',
    'mauris', 'fusce', 'tellus', 'augue', 'semper', 'porta', 'massa', 'vestibulum', 'lacinia', 'arcu', 'eget',
    'class', 'aptent', 'taciti', 'sociosqu', 'litora', 'torquent', 'per', 'conubia', 'nostra', 'inceptos',
    'himenaeos', 'curabitur', 'sodales', 'ligula', 'dignissim', 'nunc', 'tortor', 'pellentesque', 'aenean',
    'scelerisque', 'maecenas', 'mattis', 'convallis', 'tristique', 'proin', 'egestas', 'porttitor', 'morbi',
    'lectus', 'risus', 'iaculis', 'luctus', 'ac', 'turpis', 'aliquet', 'metus', 'ullamcorper', 'tincidunt',
    'euismod', 'quisque', 'volutpat', 'condimentum', 'urna', 'facilisi', 'fringilla', 'suspendisse', 'potenti',
    'feugiat', 'mi', 'sapien', 'etiam', 'ultrices', 'justo', 'lacus', 'pharetra', 'auctor', 'interdum', 'primis',
    'faucibus', 'orci', 'posuere', 'cubilia', 'curae', 'molestie', 'dui', 'blandit', 'congue', 'pede', 'facilisis',
    'laoreet', 'donec', 'viverra', 'malesuada', 'pulvinar', 'sollicitudin', 'cras', 'nisl', 'felis', 'venenatis',
    'ultricies', 'accumsan', 'pretium', 'fermentum', 'nullam', 'purus', 'mollis', 'vivamus', 'consectetuer'
];


function randomWord() {
    var arr = ipsumLoremWord;
    var idx = (0,_Math_random__WEBPACK_IMPORTED_MODULE_0__/* .randomInt */ .Iy)(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(' ');
}

/***/ }),

/***/ 991:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "wordLike": () => (/* binding */ wordLike),
/* harmony export */   "wordsMatch": () => (/* binding */ wordsMatch),
/* harmony export */   "phraseMatch": () => (/* binding */ phraseMatch),
/* harmony export */   "phraseLike": () => (/* binding */ phraseLike),
/* harmony export */   "exportStringMatchingCode": () => (/* binding */ exportStringMatchingCode)
/* harmony export */ });
/* harmony import */ var _Math_int__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7988);
/**
 *
 * @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)] / (0,_Math_int__WEBPACK_IMPORTED_MODULE_0__.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 (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((0,_Math_int__WEBPACK_IMPORTED_MODULE_0__.harmonicMean)(m, n), 1);
};

function phraseLike(a, b, matchWordPow) {
    matchWordPow = matchWordPow || 1;
    var spliter = /[\s,-\.+?\_]+/;
    var notEmp = function (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((0,_Math_int__WEBPACK_IMPORTED_MODULE_0__.harmonicMean)(m, n), 1);
}

function exportStringMatchingCode() {
    return [_Math_int__WEBPACK_IMPORTED_MODULE_0__.harmonicMean, phraseLike, phraseMatch, wordLike, wordsMatch].map(f => f + '').join('\n')
        +'\nvar _stringFormat = {harmonicMean, phraseLike, wordLike, wordsMatch};';
}


/***/ }),

/***/ 2973:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "$": () => (/* binding */ stringHashCode)
/* harmony export */ });
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;
}


/***/ }),

/***/ 7807:
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "MILLIS_PER_DAY": () => (/* binding */ MILLIS_PER_DAY),
/* harmony export */   "MILLIS_PER_HOUR": () => (/* binding */ MILLIS_PER_HOUR),
/* harmony export */   "MILLIS_PER_MINUTE": () => (/* binding */ MILLIS_PER_MINUTE),
/* harmony export */   "getDefaultFirstDayOfWeek": () => (/* binding */ getDefaultFirstDayOfWeek),
/* harmony export */   "setDefaultFirstDayOfWeek": () => (/* binding */ setDefaultFirstDayOfWeek),
/* harmony export */   "ddmmyyyy": () => (/* binding */ ddmmyyyy),
/* harmony export */   "language2LocalDateFormat": () => (/* binding */ language2LocalDateFormat),
/* harmony export */   "dateFormat2LocationList": () => (/* binding */ dateFormat2LocationList),
/* harmony export */   "dateFormatList": () => (/* binding */ dateFormatList),
/* harmony export */   "yyymmdd": () => (/* binding */ yyymmdd),
/* harmony export */   "dayNames": () => (/* binding */ dayNames),
/* harmony export */   "shortDayNames": () => (/* binding */ shortDayNames),
/* harmony export */   "monthNames": () => (/* binding */ monthNames),
/* harmony export */   "shortMonthNames": () => (/* binding */ shortMonthNames),
/* harmony export */   "formatTokenRegex": () => (/* binding */ formatTokenRegex),
/* harmony export */   "DATE_TIME_TOKEN_RGX": () => (/* binding */ DATE_TIME_TOKEN_RGX),
/* harmony export */   "formatDateString": () => (/* binding */ formatDateString),
/* harmony export */   "LOCAL_DATE_FORMAT": () => (/* binding */ LOCAL_DATE_FORMAT),
/* harmony export */   "LOCAL_DATE_TIME_FORMAT": () => (/* binding */ LOCAL_DATE_TIME_FORMAT),
/* harmony export */   "formartDateString": () => (/* binding */ formartDateString),
/* harmony export */   "parseDateString": () => (/* binding */ parseDateString),
/* harmony export */   "addDate": () => (/* binding */ addDate),
/* harmony export */   "prevDate": () => (/* binding */ prevDate),
/* harmony export */   "nextDate": () => (/* binding */ nextDate),
/* harmony export */   "weekIndexOf": () => (/* binding */ weekIndexOf),
/* harmony export */   "weekInYear": () => (/* binding */ weekInYear),
/* harmony export */   "beginOfSecond": () => (/* binding */ beginOfSecond),
/* harmony export */   "beginOfMinute": () => (/* binding */ beginOfMinute),
/* harmony export */   "beginOfDay": () => (/* binding */ beginOfDay),
/* harmony export */   "beginOfHour": () => (/* binding */ beginOfHour),
/* harmony export */   "beginOfWeek": () => (/* binding */ beginOfWeek),
/* harmony export */   "addWeek": () => (/* binding */ addWeek),
/* harmony export */   "nextWeek": () => (/* binding */ nextWeek),
/* harmony export */   "prevWeek": () => (/* binding */ prevWeek),
/* harmony export */   "beginOfMonth": () => (/* binding */ beginOfMonth),
/* harmony export */   "beginOfQuarter": () => (/* binding */ beginOfQuarter),
/* harmony export */   "addQuarter": () => (/* binding */ addQuarter),
/* harmony export */   "nextQuarter": () => (/* binding */ nextQuarter),
/* harmony export */   "prevQuarter": () => (/* binding */ prevQuarter),
/* harmony export */   "beginOfYear": () => (/* binding */ beginOfYear),
/* harmony export */   "addYear": () => (/* binding */ addYear),
/* harmony export */   "nextYear": () => (/* binding */ nextYear),
/* harmony export */   "prevYear": () => (/* binding */ prevYear),
/* harmony export */   "compareDate": () => (/* binding */ compareDate),
/* harmony export */   "compareMonth": () => (/* binding */ compareMonth),
/* harmony export */   "compareYear": () => (/* binding */ compareYear),
/* harmony export */   "addMonth": () => (/* binding */ addMonth),
/* harmony export */   "addMonthKeepDate": () => (/* binding */ addMonthKeepDate),
/* harmony export */   "addMonthKeepDateTime": () => (/* binding */ addMonthKeepDateTime),
/* harmony export */   "nextMonth": () => (/* binding */ nextMonth),
/* harmony export */   "prevMonth": () => (/* binding */ prevMonth),
/* harmony export */   "monthOfTwoDate": () => (/* binding */ monthOfTwoDate),
/* harmony export */   "daysInMonth": () => (/* binding */ daysInMonth),
/* harmony export */   "parseDateTime": () => (/* binding */ parseDateTime),
/* harmony export */   "formatDateTime": () => (/* binding */ formatDateTime),
/* harmony export */   "implicitDate": () => (/* binding */ implicitDate),
/* harmony export */   "formatTimeRange24": () => (/* binding */ formatTimeRange24),
/* harmony export */   "getTimeRangeFromStep": () => (/* binding */ getTimeRangeFromStep)
/* harmony export */ });
/* harmony import */ var _String_stringFormat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6382);
/* harmony import */ var _Math_int__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7988);



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 = (0,_String_stringFormat__WEBPACK_IMPORTED_MODULE_0__.nonAccentVietnamese)(text).toLowerCase();
    format = (0,_String_stringFormat__WEBPACK_IMPORTED_MODULE_0__.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);
    return Math.floor(compareDate(date, byw, gmt) / 7) ;
}


/***
 *
 * @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, 0, 0, 0, 0);
    if (gmt) bg.setUTCHours(0);
    var byw = beginOfWeek(bg, gmt, startDayOfWeek);
    if (weekIdx === 0) return bg;
    return new Date(byw.getTime() +  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 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 = 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 = beginOfMonth(nextMonth(date0));
        res += 2 * (compareDate(nextMD0, date0) + compareDate(date1, 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 = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(date.getDate(), s.length);
                break;
            case 'w':
            case 'ww':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(weekIndexOf(date, false, opt.startDayOfWeek || getDefaultFirstDayOfWeek()) + 1, s.length);
                break;
            case 'M':
            case 'MM':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.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 = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(date.getFullYear(), s.length);
                break;
            case 'yy':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(date.getFullYear() % 100, s.length);
                break;
            case 'a':
                res = date.getHours() < 12 ? "AM" : "PM";
                break;
            case "H":
            case 'HH':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(date.getHours(), s.length);
                break;
            case 'h':
            case 'hh':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(1 + (date.getHours() - 1) % 12, s.length);
                break;
            case 'm':
            case 'mm':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(date.getMinutes(), s.length);
                break;
            case 's':
            case 'ss':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(date.getSeconds(), s.length);
                break;
            case 'Q':
            case 'QQ':
                res = (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(Math.floor(date.getMonth() / 3) + 1, s.length)
                break;
        }
        return res;
    });
}


var number = [/[+-]?\d+$/, matched => new Date(parseInt(matched[0]))];
var reISO = [/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*))(?:Z|(\+|-)([\d|:]*))?$/, matched => new Date(matched[0])];
var reMsAjax = [/^\/Date\((d|-|.*)\)[\/|\\]$/, matched => 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*\([^)]+\)$/, matched => 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(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 + ':' + (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.integerZeroPadding)(m0, 2) + ' - ' + h1 + ':' + (0,_Math_int__WEBPACK_IMPORTED_MODULE_1__.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: x => beginOfMonth(x),
        quarter: x => beginOfQuarter(x),
        year: x => beginOfYear(x)
    }

    var addHandlers = {
        month: (x, d) => addMonth(x, d),
        quarter: (x, d) => addQuarter(x, d),
        year: (x, d) => addYear(x, d)
    }


    startDate = initHandlers[type](addHandlers[type](date, n));
    expiredDate = addHandlers[type](startDate, 1);

    return {
        startdate: startDate, expireddate: expiredDate
    };
}

/***/ }),

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

/* module decorator */ module = __webpack_require__.nmd(module);
(function (w) {
  "use strict";

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


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

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

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

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

  if (( true) && module && module.exports) {
    module.exports = atobBest;
  }
}(window));


/***/ }),

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

(function () {
  "use strict";

  function btoa(str) {
    var buffer;

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

    return buffer.toString('base64');
  }

  module.exports = btoa;
}());


/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}\r\n\r\n.as-multi-select-menu-item-ctn:empty::before {\r\n    position: absolute;\r\n    left: 0;\r\n    top: calc(50% - 1em);\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    padding: 0 5px;\r\n    line-height: 2;\r\n}\r\n\r\n.as-multi-select-menu-item-ctn:not(:empty):before,\r\n.as-multi-select-menu.as-read-only .as-multi-select-menu-item-ctn::before,\r\n.as-multi-select-menu.as-disabled .as-multi-select-menu-item-ctn::before {\r\n    display: none;\r\n}\r\n\r\n.as-multi-select-menu-item-ctn[data-placeholder]:empty::before {\r\n    content: attr(data-placeholder);\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.as-check-tree-item.as-check-unsafe-tree-item {\r\n    padding-right: 45px;\r\n}\r\n\r\n.as-check-unsafe-tree-item .as-check-unsafe-tree-item-action-ctn {\r\n    display: none;\r\n    position: absolute;\r\n    height: 20px;\r\n    right: 5px;\r\n    top: calc(50% - 10px);\r\n    --as-transparent-button-text-color: rgba(107, 107, 108, 0.3);\r\n}\r\n\r\n/*.as-check-unsafe-tree-item.status-close .as-check-unsafe-tree-item-action-ctn,*/\r\n/*.as-check-unsafe-tree-item.status-open .as-check-unsafe-tree-item-action-ctn*/\r\n/*{*/\r\n/*    display: block;*/\r\n/*}*/\r\n\r\n\r\n.as-check-unsafe-tree-item-action-ctn >button{\r\n    width: 25px;\r\n    height: 20px;\r\n}\r\n\r\n/*.as-check-unsafe-tree-item-action-ctn >button:not(:first-child) {*/\r\n/*    margin-left: 5px;*/\r\n/*}*/\r\n\r\n.absol-checkbox.as-no-select {\r\n    visibility: hidden;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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-title::after {\r\n    content: \"\\25BC\";\r\n}\r\n\r\n.absol-chrome-calendar[data-view=\"era\"] .absol-chrome-calendar-title::after {\r\n    content: \"\";\r\n}\r\n\r\n.absol-chrome-calendar-title > span {\r\n    line-height: 1.5em;\r\n    min-width: 5em;\r\n    display: inline-block;\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-month.as-animation {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    width: 100%;\r\n    margin: 0;\r\n    z-index: 8;\r\n    transition: top 0.2s;\r\n    /*opacity: 0.5;*/\r\n}\r\n\r\n.absol-chrome-calendar-month.as-animation div {\r\n    pointer-events: none;\r\n    transition: color 0.2s;\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-week-in-month > div::before {\r\n    content: attr(data-date);\r\n}\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    box-sizing: border-box;\r\n    width: calc(100% / 7);\r\n}\r\n\r\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-week-in-month > div {\r\n    width: calc(100% / 8);\r\n}\r\n\r\n\r\n.absol-chrome-calendar[data-level=\"day\"] .absol-chrome-calendar-week-in-month > div:hover,\r\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-week-in-month.as-hover-in-year > div:not(.as-not-in-year),\r\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-week-in-month.as-hover-in-year::before,\r\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-week-in-month.as-hover-not-in-year > .as-not-in-year\r\n{\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:not(.as-disabled),\r\n.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-not-in-month:not(.as-disabled) {\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.absol-chrome-calendar[data-level=\"week\"] .absol-chrome-calendar-week-in-month.as-selected::before\r\n{\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    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: 1;\r\n}\r\n\r\n.absol-chrome-calendar:not([data-view=\"year\"]) .absol-chrome-calendar-years {\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    box-sizing: border-box;\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: calc(6em + 1px);\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-year-row-months {\r\n    display: table-row;\r\n    line-height: 1.5;\r\n    height: 2em;\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-years-content[data-hover-quarter=\"0\"] .absol-chrome-calendar-year-month[data-quarter=\"0\"],\r\n.absol-chrome-calendar[data-level=\"quarter\"] .absol-chrome-calendar-years-content[data-hover-quarter=\"1\"] .absol-chrome-calendar-year-month[data-quarter=\"1\"],\r\n.absol-chrome-calendar[data-level=\"quarter\"] .absol-chrome-calendar-years-content[data-hover-quarter=\"2\"] .absol-chrome-calendar-year-month[data-quarter=\"2\"],\r\n.absol-chrome-calendar[data-level=\"quarter\"] .absol-chrome-calendar-years-content[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-week-in-month > div.as-disabled,\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-view=\"era\"] .absol-chrome-calendar-era {\r\n    display: block;\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*/", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".ac-time-input.as-time-24-input {\r\n    width: 13em;\r\n}\r\n\r\n.as-chrome-time-24-picker {\r\n    --next-day-h24-width : 120px;\r\n    --minute-width: 60px;\r\n    font-size: 14px;\r\n\r\n}\r\n\r\n.as-chrome-time-24-picker .as-chrome-time-picker-h24 {\r\n    width: var(--next-day-h24-width);\r\n}\r\n\r\n.as-chrome-time-24-picker .as-chrome-time-picker-list.as-chrome-time-picker-m60 {\r\n    width: var(--minute-width);\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    -webkit-user-select: none; /* Safari */\r\n    -moz-user-select: none; /* Firefox */\r\n    -ms-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.as-chrome-time-picker-m60,\r\n.as-chrome-time-picker-list.as-chrome-time-picker-h24 {\r\n    width: 120px;\r\n    overflow: hidden;\r\n    position: relative;\r\n}\r\n\r\n.as-chrome-time-picker-list.as-chrome-time-picker-m60>button,\r\n.as-chrome-time-picker-list.as-chrome-time-picker-h24>button{\r\n    display: block;\r\n    position: absolute;\r\n    left: 0;\r\n    width: 100%;\r\n    font-size: inherit;\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:disabled {\r\n    color: #dddddd;\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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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\r\n\r\n.as-mdi-picker {\r\n    background-color: white;\r\n    border: 1px solid #dddddd;\r\n    padding: 10px 0  10px 10px;\r\n    min-width: 267px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-mdi-picker-body {\r\n    max-height: 40vh;\r\n    overflow-y: auto;\r\n    margin-top: 10px;\r\n}\r\n\r\n.as-mdi-picker button {\r\n    width: 30px;\r\n    height: 30px;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-form-cmd-tool-window .absol-onscreen-window-body-container {\r\n    overflow-y: auto;\r\n}\r\n\r\n\r\n.as-from-tool-button:not(:disabled) > span.mdi-delete-variant {\r\n    color: red;\r\n}\r\n\r\n.as-from-tool-button:disabled > span {\r\n    color: #c4c4c4 !important;\r\n}\r\n\r\n.as-from-tool-button:disabled > svg > path {\r\n    fill: #c4c4c4;\r\n}\r\n\r\n.as-form-cmd-tool .as-from-tool-ribbon-button,\r\n.bsc-white .as-form-cmd-tool .as-from-tool-ribbon-button,\r\n.as-form-cmd-tool .as-from-tool-ribbon-button {\r\n    font-size: 12px;\r\n    height: 2em;\r\n    width: 3em;\r\n    padding-right: 0.2em;\r\n    /**override theme*/\r\n    min-width: unset !important;\r\n    white-space: nowrap;\r\n    border: none !important;\r\n    background-color: transparent;\r\n}\r\n\r\n.as-form-cmd-tool .as-ribbon-button,\r\n.as-form-cmd-tool .as-ribbon-split-button {\r\n    font-size: 12px;\r\n    width: 6.5em;\r\n    vertical-align: top;\r\n}\r\n\r\n\r\n.as-form-cmd-tool .as-ribbon-button.as-checked.as-type-toggle-switch,\r\n.as-form-cmd-tool .as-ribbon-button.as-checked.as-type-color {\r\n    -webkit-box-shadow: inset 0px 0px 2px 0px rgba(0, 0, 0, 0.6);\r\n    box-shadow: inset 0px 0px 2px 0px rgba(0, 0, 0, 0.6);\r\n    background-color: rgba(0, 0, 0, 0.05);\r\n    color: #1e65ea;\r\n}\r\n\r\n\r\n.as-from-tool-group-buttons {\r\n    margin-right: 2px;\r\n\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-from-tool-group-buttons .as-from-tool-group-buttons:not(:last-child) {\r\n    border-right: 0.5px solid #ddd;\r\n}\r\n\r\n.as-from-tool-group-buttons .as-from-tool-group-buttons:not(:first-child) {\r\n    border-left: 0.5px solid #ddd;\r\n}\r\n\r\n.absol-tooltip-root {\r\n    z-index: 100;\r\n}\r\n\r\n.as-from-tool-group-buttons:empty {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-form-cmd-tool-menu-trigger {\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    color: #ddd;\r\n}\r\n\r\n.as-form-cmd-tool-window .absol-onscreen-window-head-bar-button-dock {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-form-cmd-tool-window .as-form-cmd-tool-menu-trigger {\r\n    display: none;\r\n}\r\n\r\n.as-cmd-tool-group-x2 {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    position: relative;\r\n}\r\n\r\n.as-cmd-tool-tab .as-cmd-tool-group-x2 {\r\n    min-height: 60px;\r\n}\r\n\r\n\r\n.as-cmd-tool-group-x2::before {\r\n    content: '';\r\n    display: block;\r\n    position: absolute;\r\n    top: 0;\r\n    bottom: 0;\r\n    left: -1px;\r\n    border: 1px solid #ddd;\r\n}\r\n\r\n.as-cmd-tool-tab {\r\n    overflow: hidden;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-collapsible-tree-navigator {\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n    border-bottom: 1px solid #aaaaaa;\r\n    /*border-left: 1px solid #aaaaaa;*/\r\n    user-select: none;\r\n    padding-right: 4px;\r\n    position: relative;\r\n    box-sizing: border-box;\r\n    --node-content-height: 30px;\r\n    --level: 0;\r\n    --selected-y: 0;\r\n}\r\n\r\n.as-collapsible-tree-navigator::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    transition: top 0.2s;\r\n    top: var(--selected-y);\r\n    height: var(--node-content-height);\r\n    border-right: 4px solid rgb(20, 100, 246);\r\n    right: 0;\r\n}\r\n\r\n\r\n.as-ctn-collapse-node {\r\n    --children-height: 1000px;\r\n}\r\n\r\n\r\n.as-ctn-right > span.mdi {\r\n    font-size: 20px;\r\n    vertical-align: middle;\r\n    transition: transform 0.2s ease-in-out;\r\n    transform: rotate(0deg);\r\n    visibility: hidden;\r\n    display: inline-block;\r\n}\r\n\r\n.as-ctn-collapse-node.as-close .as-ctn-right > span.mdi-chevron-right {\r\n    visibility: visible;\r\n}\r\n\r\n.as-ctn-collapse-node.as-open .as-ctn-right > span.mdi-chevron-right {\r\n    visibility: visible;\r\n    transform: rotate(90deg);\r\n}\r\n\r\n.as-ctn-collapse-node-content {\r\n    height: calc(var(--node-content-height) + 1px);\r\n    box-sizing: border-box;\r\n    padding: 0 50px 0 8px;\r\n    position: relative;\r\n    background-color: rgb(240, 240, 242);\r\n    border-top: 1px solid #aaaaaa;\r\n    /*border-right: 1px solid #aaaaaa;*/\r\n}\r\n\r\n\r\n.as-ctn-collapse-node-content:hover::after,\r\n.as-ctn-node-content:hover::after {\r\n    content: \"\";\r\n    pointer-events: 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: 5;\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.as-ctn-collapse-node-content::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-ctn-collapse-node.as-open .as-ctn-collapse-node-children-ctn {\r\n    /*max-height: calc(var(--children-height) + 1px);*/\r\n}\r\n\r\n\r\n.as-ctn-collapse-node.as-close .as-ctn-collapse-node-children-ctn,\r\n.as-ctn-node.as-close .as-ctn-node-children-ctn {\r\n    /*max-height: 0;*/\r\n    display: none;\r\n}\r\n\r\n\r\n.as-ctn-collapse-node-children-ctn,\r\n.as-ctn-node-children-ctn {\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n.as-ctn-collapse-node.as-open .as-ctn-collapse-node-content,\r\n.as-ctn-collapse-node:not(:last-child) {\r\n    /*border-bottom: 1px solid rgb(60, 60, 62);*/\r\n}\r\n\r\n.as-ctn-right {\r\n    position: absolute;\r\n    right: 10px;\r\n    top: 0;\r\n    height: 100%;\r\n}\r\n\r\n.as-ctn-right > button {\r\n    width: 30px;\r\n    height: 30px;\r\n\r\n}\r\n\r\n.as-ctn-right > button * {\r\n    font-size: 20px;\r\n}\r\n\r\n\r\n.as-ctn-right::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-ctn-right > button:hover {\r\n    background-color: var(--icon-background-cover-hover);\r\n\r\n}\r\n\r\n.as-ctn-text {\r\n    margin-left: 7px;\r\n}\r\n\r\n.as-ctn-icon-ctn:empty {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-ctn-icon-ctn > * {\r\n    font-size: 1.5em;\r\n}\r\n\r\n.as-ctn-icon-ctn > img,\r\n.as-ctn-icon-ctn > svg {\r\n    width: 1em;\r\n    height: 1em;\r\n}\r\n\r\n\r\n.as-ctn-text, .as-ctn-icon-ctn {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-ctn-count {\r\n    font-size: 14px;\r\n    box-sizing: border-box;\r\n    text-align: center;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    background-color: rgb(113, 148, 169);\r\n    line-height: 20px;\r\n    min-width: 20px;\r\n    padding-left: 5px;\r\n    padding-right: 5px;\r\n    height: 20px;\r\n    border-radius: 10px;\r\n    margin-left: 5px;\r\n    color: white;\r\n}\r\n\r\n\r\n.as-ctn-node {\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-ctn-node-children-ctn:empty,\r\n.as-ctn-node-children-ctn:empty {\r\n    display: none;\r\n}\r\n\r\n.as-ctn-node-children-ctn .as-ctn-node:first-child::before {\r\n    top: -15px;\r\n    height: 30px;\r\n}\r\n\r\n.as-ctn-node:not(:last-child)::before {\r\n    height: 100%;\r\n}\r\n\r\n\r\n.as-ctn-node-content {\r\n    position: relative;\r\n    height: var(--node-content-height);\r\n    padding-right: 10px;\r\n    box-sizing: border-box;\r\n    padding-left: calc(25px * var(--level) - 20px); /*5 is padding in level 0*/\r\n}\r\n\r\n\r\n.as-ctn-node-content::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-ctn-node-children-ctn {\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n\r\n.as-ctn-collapse-node.as-selected > .as-ctn-collapse-node-content .as-ctn-text,\r\n.as-ctn-node.as-selected > .as-ctn-node-content .as-ctn-text {\r\n    text-shadow: 1px 0 0 currentColor;\r\n}\r\n\r\n\r\n.as-ctn-collapse-node-content .toggler-ico,\r\n.as-ctn-node-content .toggler-ico {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    width: 1em;\r\n    height: 1em;\r\n}\r\n\r\n.as-ctn-collapse-node-content .toggler-ico g,\r\n.as-ctn-node-content .toggler-ico g {\r\n    visibility: hidden;\r\n}\r\n\r\n.as-ctn-collapse-node.as-open > .as-ctn-collapse-node-content .toggler-ico .toggle-open,\r\n.as-ctn-collapse-node.as-close > .as-ctn-collapse-node-content .toggler-ico .toggle-close,\r\n.as-ctn-node.as-open > .as-ctn-node-content .toggler-ico .toggle-open,\r\n.as-ctn-node.as-close > .as-ctn-node-content .toggler-ico .toggle-close {\r\n    visibility: visible;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.as-color-picker-button.as-border-none{\r\n    border: none;\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    font-weight: inherit;\r\n    font-style: inherit;\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-clone-var {\r\n    box-shadow: 0px 0px 0px 4px rgba(70, 70, 90, 0.95) !important;\r\n    background-color: rgba(255, 255, 255, 0.7);\r\n    color: rgba(0, 0, 0, 0.7);\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.as-cdg-table > thead {\r\n    background-color: #e3e2e2;\r\n}\r\n\r\n.as-cdg-table > thead.as-hidden {\r\n    display: none;\r\n}\r\n\r\n.as-cdg-table > thead th {\r\n    border-color: #aaaaaa;\r\n    height: 40px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-cdg-table > thead pre{\r\n    white-space: pre-wrap;\r\n    font-family: inherit;\r\n    outline: none;\r\n    line-height: 1.5;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-cdg-table > thead pre:focus {\r\n    background-color: rgba(255, 255, 255, 0.5);\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-cdg-table > tbody .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    border: 1px solid #dddddd;\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.as-ca-cell.as-drag-over.as-bf {\r\n    --hover-x: 20px;\r\n\r\n}\r\n\r\n.as-ca-cell.as-drag-over.as-bf::after {\r\n    content: \"\";\r\n    position: absolute;\r\n    top: 4px;\r\n    bottom: 4px;\r\n    width: 6px;\r\n    border-radius: 3px;\r\n    background-color: #0a90eb;\r\n    left: calc(var(--hover-x) - 8px);\r\n    animation-name: as_ca_bf_blink;\r\n    animation-duration: 0.5s;\r\n    animation-iteration-count: infinite;\r\n}\r\n\r\n\r\n@keyframes as_ca_bf_blink {\r\n    0% {\r\n        background-color: #0a90eb;\r\n    }\r\n    50% {\r\n        background-color: transparent;\r\n    }\r\n    100% {\r\n        background-color: #0a90eb;\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\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}\r\n\r\n\r\n.as-compact-data-grid-editor-body {\r\n    overflow: auto;\r\n}\r\n\r\n.as-compact-data-grid-editor .as-table-of-text-input-tool .as-ribbon-button {\r\n    width: 80px;\r\n}\r\n\r\n.as-compact-data-grid-editor .as-table-of-text-input-tool .as-ribbon-button svg {\r\n    width: 24px;\r\n    height: 24px;\r\n}\r\n\r\n.as-toggle-header-ico:not(.as-show-header) .as-icon-add {\r\n    display: none;\r\n}\r\n\r\n.as-toggle-header-ico .as-icon-minus {\r\n    stroke: red !important;\r\n}\r\n\r\n.as-toggle-header-ico.as-show-header .as-icon-minus,\r\n.as-toggle-header-ico.as-show-header .as-icon-add {\r\n    stroke: blue !important;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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: 1000000000;\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: 1000000000 !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.absol-context-menu-anchor .absol-dropright > .absol-dropright-content {\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: 800000000;\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    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    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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-countdown-text {\r\n\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-cpu-viewer{\r\n    position: fixed;\r\n    bottom: 5px;\r\n    right: 5px;\r\n    box-sizing: border-box;\r\n    z-index: 1000000000;\r\n    border: 1px solid black;\r\n    display: inline-block;\r\n}\r\n\r\n.as-cpu-viewer canvas{\r\n    display: block;\r\n}\r\n\r\n.as-pending-attachhook-count{\r\n    padding: 10px;\r\n    border-radius: 4px;\r\n    position: fixed;\r\n    z-index: 1000000;\r\n    right: 10px;\r\n    top: 10px;\r\n    background: white;\r\n    border: 1px solid red;\r\n    opacity: 0.5;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-pending-attachhook-count:hover {\r\n    opacity: 0.0;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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[data-format] {\r\n    --format-width: 8.5em;\r\n    width: calc(var(--format-width) + 2em + 1em);\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    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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}\r\n\r\n.as-date-time-input[data-text].as-read-only.as-border-none input {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-date-time-input[data-text].as-read-only.as-border-none {\r\n    width: auto;\r\n}\r\n\r\n.as-date-time-input[data-text].as-read-only.as-border-none::before {\r\n    content: attr(data-text);\r\n    line-height: 30px;\r\n}\r\n\r\n\r\n.as-relative-time-text[data-time-text]::after {\r\n    content: attr(data-time-text);\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}\r\n\r\n.as-debug-device-info {\r\n    position: fixed;\r\n    left: 0;\r\n    top: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: 999999;\r\n    display: grid;\r\n    grid-template-rows: auto 1fr;\r\n    background: white;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n}\r\n\r\n.as-debug-device-info .as-header-bar-notification-action {\r\n    display: none;\r\n}\r\n\r\n.as-debug-device-info-header {\r\n\r\n}\r\n\r\n.as-debug-device-info-body {\r\n    overflow: auto;\r\n}\r\n\r\n\r\n.as-debug-device-info-content {\r\n    align-content: start;\r\n    padding: 10px;\r\n    display: grid;\r\n    grid-template-columns: auto auto;\r\n    column-gap: 20px;\r\n    row-gap: 10px;\r\n    overflow: auto;\r\n}\r\n\r\n.as-debug-device-info-section {\r\n    grid-column: span 2;\r\n    font-weight: bold;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.25);\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    --as-list-item-hover-background-color: #efefef;\r\n    --as-list-item-selected-background-color: #dfdfdf;\r\n\r\n\r\n    --modal-margin-top: 10vh;\r\n    --icon-font-size: 1.42857142857rem;\r\n}\r\n\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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/*}*/", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    table-layout: auto;\r\n}\r\n\r\n.as-efficient-table-wrapper.as-headless .as-dynamic-table {\r\n    table-layout: fixed;\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: calc(var(--dt-content-height) + 1px);\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.as-dynamic-table-wrapper.as-has-fixed-col.as-overflow-y {\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-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.as-dynamic-table-wrapper.as-overflow-y.as-width-auto {\r\n    /*max-width: calc(var(--dt-content-width) + var(--dt-scroll-bar-width)); disable for resizer testing*/\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.as-dynamic-table-wrapper.as-adapt-infinity-grow.as-auto-height {\r\n    height: calc(var(--dt-content-height) + 1px) !important;\r\n}\r\n\r\n.as-dynamic-table-wrapper.as-adapt-infinity-grow {\r\n    max-height: unset !important;\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: -3px;\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 6px;\r\n    /*border-right: 6px 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-up,\r\n.as-dt-header-cell[data-sort-order=\"descending\"] .as-dt-sort-btn .mdi-menu-down {\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{\r\n    user-select: none;\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) - 2px);\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) - 2px);\r\n}\r\n\r\n\r\n.as-dynamic-table-wrapper tr.as-dragged,\r\n.as-dynamic-table-wrapper tr.as-dragging{\r\n    background-color: #FFF9C4;\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) - 2px);*/\r\n/*} try remove this*/\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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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: Consolas, monospace;\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    line-height: 2;\r\n    background-color: white;\r\n}\r\n\r\n.as-expression-input.as-disabled {\r\n    background-color: var(--as-disabled-background-color);\r\n    color: var(--as-disabled-text-color);\r\n    pointer-events: none;\r\n}\r\n\r\n.as-expression-input.as-border-none {\r\n    border: none;\r\n}\r\n\r\n.as-expression-input:not(.as-read-only):not(.as-disabled){\r\n    user-select: none;\r\n}\r\n\r\n.as-expression-input-range-ctn {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: 9;\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n.as-expression-input-range {\r\n    position: absolute;\r\n    background-color: rgba(19, 176, 233, 0.4);\r\n}\r\n\r\n\r\n.as-expression-input-content {\r\n    min-height: 28px;\r\n    outline: none;\r\n    line-height: inherit;\r\n    white-space: pre-wrap;\r\n    padding-left: var(--as-input-horizontal-padding);\r\n}\r\n\r\n.as-expression-input-range-ctn {\r\n    left: var(--as-input-horizontal-padding);\r\n\r\n}\r\n\r\n.as-expression-input.as-has-icon .as-expression-input-content {\r\n    padding-left: calc(18px + var(--as-input-horizontal-padding));\r\n}\r\n\r\n.as-expression-input.as-has-icon .as-expression-input-range-ctn {\r\n    left: calc(18px + var(--as-input-horizontal-padding));\r\n}\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-content .as-token[data-ex-type=\"boolean\"] {\r\n    color: #f6a128;\r\n}\r\n\r\n\r\n.as-expression-input-content .as-token[data-ex-type=\"function\"] {\r\n    color: #2419c8\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    display: none;\r\n}\r\n\r\n\r\n.as-expression-input.as-has-icon .as-expression-input-icon-ctn {\r\n    display: block;\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.as-expression-input-autocomplete {\r\n    min-width: 10em;\r\n    position: fixed;\r\n    z-index: 1000;\r\n}\r\n\r\n.as-expression-input-autocomplete .absol-selectlist-item {\r\n    padding-right: 0.3em;\r\n}\r\n\r\n.as-ei-suggestion-list-item {\r\n    --level: 0;\r\n    height: 30px;\r\n    padding-right: 1em;\r\n    min-width: 10em;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-ei-suggestion-list-item:hover {\r\n    background-color: var(--as-list-item-hover-background-color);\r\n}\r\n\r\n.as-ei-suggestion-list-item.as-selected {\r\n    background-color: var(--as-list-item-selected-background-color);\r\n}\r\n\r\n\r\n.as-ei-suggestion-list-item::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.as-ei-suggestion-list-item > *,\r\n.as-ei-suggestion-list-item::before\r\n{\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-ei-suggestion-list-item:not(.as-status-open):not(.as-status-close)  .as-eisli-toggler{\r\n    visibility: hidden;\r\n}\r\n\r\n.as-ei-suggestion-list-item.as-status-open .toggle-close,\r\n.as-ei-suggestion-list-item.as-status-close .toggle-open\r\n{\r\n    display: none;\r\n}\r\n\r\n\r\n\r\n.as-eisli-toggler {\r\n    text-align: right;\r\n    width: calc(1em * var(--level) + 1.5em);\r\n    padding-right: 0.5em;\r\n}\r\n\r\n.as-ei-suggestion-list {\r\n    max-height: calc(100vh - 100px);\r\n    overflow-y:auto ;\r\n}\r\n\r\n.as-ei-suggestion-list .mdi {\r\n    width: 30px;\r\n    text-align: center;\r\n    font-size: 1em;\r\n}\r\n\r\n.as-ei-suggestion-list .mdi.mdi-function {\r\n    color: #2419c8;\r\n}\r\n\r\n.as-ei-suggestion-list .mdi.mdi-variable {\r\n    color: #5b5d42;\r\n}\r\n\r\n.as-ei-suggestion-list .am-select-tree-leaf-item-icon-ctn {\r\n    left: calc(2em * var(--level) - 14px)\r\n}\r\n\r\n.as-expression-input-real-input {\r\n    position: absolute;\r\n    z-index: 10;\r\n    right: 0;\r\n    top: 0;\r\n    width: 100px;\r\n    height: 100px;\r\n    opacity: 0.5;\r\n    /*visibility: hidden;*/\r\n}\r\n\r\n.as-expression-input-foreground {\r\n    position: absolute;\r\n    z-index: 8;\r\n    top: 0;\r\n    left: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n\r\n}\r\n\r\n.as-ei-command-tool {\r\n    background: white;\r\n    border: 1px solid #e0e0e0;\r\n    border-radius: 3px;\r\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\r\n    padding: 0 3px;\r\n    box-sizing: border-box;\r\n    height: 31px;\r\n}\r\n\r\n.as-ei-command-tool::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-ei-command-tool button {\r\n    font-size: 14px;\r\n    width: 25px;\r\n    height: 25px;\r\n    padding: 0;\r\n    box-sizing: border-box;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-ei-command-tool button:hover {\r\n    background-color: #f0f0f0;\r\n}\r\n\r\n.as-ei-command-tool button:not(:last-child) {\r\n    margin-right: 3px;\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    cursor: pointer;\r\n    color: black;\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    text-align: inherit;\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 {\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-font-input {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: calc(2em + 2px);\r\n    width: 12em;\r\n    border-radius: 3px;\r\n    border: 1px solid #ddd;\r\n\r\n}\r\n\r\n.as-font-input-family {\r\n\r\n}\r\n\r\n.as-font-input-size {\r\n\r\n}\r\n\r\n\r\n\r\n.as-font-family-select-list {\r\n    font-size: 16px;\r\n    cursor: default;\r\n    user-select: none;\r\n    min-width: 12em;\r\n    padding-top: 40px;\r\n\r\n}\r\n\r\n.as-font-family-select-list-header{\r\n    padding: 5px;\r\n    position: absolute;\r\n    left: 0;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    height: 40px;\r\n    top: 0;\r\n}\r\n\r\n.as-font-family-select-list-content {\r\n    overflow-y: auto;\r\n}\r\n\r\n.as-font-family-select-item {\r\n    height: 2em;\r\n    line-height: 2em;\r\n    padding: 0 20px 0 10px;\r\n\r\n}\r\n\r\n.as-font-family-select-item:hover {\r\n    background-color: var(--as-list-item-hover-background-color);\r\n}\r\n\r\n.as-font-family-select-item:active {\r\n    /*background-color: var(--as-list-item-active-background-color);*/\r\n}\r\n\r\n.as-font-family-select-item.as-selected {\r\n    background-color: var(--as-list-item-selected-background-color);\r\n}", ""]);



/***/ }),

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

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



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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} ", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "/****Adapt icon************/\r\n.fa-close:before {\r\n    content: \"\\f00d\";\r\n}\r\n\r\n\r\n.kv-document-2-site {\r\n    display: flex;\r\n    align-content: stretch;\r\n}\r\n\r\n.kv-document-2-site-left {\r\n\r\n    background-color: rgb(61, 29, 154);\r\n}\r\n\r\n.kv-document-2-site-right {\r\n    flex-grow: 1;\r\n\r\n}\r\n\r\n.kv-document-2-site-left-header {\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    padding: 25px 20px;\r\n\r\n}\r\n\r\n.kv-document-2-site-left-header-logo {\r\n    height: 65px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.kv-document-2-site-left-header-text {\r\n    font-weight: bold;\r\n    font-size: 25px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    color: #26afa8;\r\n}\r\n\r\n.kv-document-2-site-left .as-vertical-timeline {\r\n    padding: 5px 20px;\r\n}\r\n\r\n\r\n/* For Document page */\r\n.kv-document-page {\r\n    flex-direction: column;\r\n    display: flex;\r\n}\r\n\r\ndiv.kv-document-page.absol-frame {\r\n    display: flex;\r\n}\r\n\r\n.kv-document-page-header {\r\n    position: relative;\r\n    text-align: left;\r\n    padding: 10px 10px 10px 10px;\r\n}\r\n\r\n.kv-document-page-title {\r\n    font-size: 18px;\r\n    font-weight: bold;\r\n    line-height: 30px;\r\n}\r\n\r\n.kv-document-page-close-btn {\r\n    float: right;\r\n}\r\n\r\n.kv-document-transparent-btn {\r\n    background-color: transparent;\r\n    border-radius: 50%;\r\n    height: 30px;\r\n    width: 30px;\r\n    padding: 0;\r\n    color: var(--as-transparent-button-text-color);\r\n    font-size: 20px;\r\n    border: none;\r\n}\r\n\r\n.kv-document-transparent-btn:hover {\r\n    color: var(--as-transparent-button-text-hover-color);\r\n}\r\n\r\n.kv-document-transparent-btn:active {\r\n    color: var(--as-transparent-button-text-active-color);\r\n}\r\n\r\n\r\n.kv-document-page-content {\r\n    flex-grow: 1;\r\n    overflow: auto;\r\n    padding: 10px 20px 10px 20px;\r\n}\r\n\r\n.kv-document-page-footer {\r\n    display: flex;\r\n    position: relative;\r\n    padding: 30px 20px 10px 20px;\r\n}\r\n\r\n.kv-document-page-footer .as-flexicon-button {\r\n    min-width: 110px;\r\n    height: 30px;\r\n}\r\n\r\n.kv-document-page-footer-left {\r\n    flex-grow: 1;\r\n}\r\n\r\n.kv-document-page-footer-left > *:not(:first-child) {\r\n    margin-left: 20px;\r\n}\r\n\r\n.kv-document-page-footer-right {\r\n    text-align: right;\r\n}\r\n\r\n\r\n.kv-document-page-footer-right > *:not(:last-child) {\r\n    margin-right: 20px;\r\n}\r\n\r\n.kv-document-link {\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n    color: black;\r\n    cursor: pointer;\r\n    height: 30px;\r\n    padding: 0 20px;\r\n    white-space: normal;\r\n    border-radius: 3px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.kv-document-link:hover {\r\n    color: rgb(20, 100, 246);\r\n}\r\n\r\n\r\n.kv-document-link > span,\r\n.kv-document-link::before {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.kv-document-link::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n\r\n.kv-document-link.kv-variant-primary {\r\n    color: white;\r\n    background-color: rgb(26, 146, 255);\r\n}\r\n\r\n\r\n/*************************************************************/\r\n\r\n.as-message-input-body .as-message-input-text-input {\r\n    padding-left: var(--control-horizontal-distance-2);\r\n    padding-top: var(--control-verticle-distance-1);\r\n    padding-bottom: var(--control-verticle-distance-1);\r\n    padding-right: var(--control-horizontal-distance-2);\r\n    min-height: 40px;\r\n}\r\n\r\n/*TODO: find usage*/\r\n.bsc-white .absol-selectmenu-anchor-content-container {\r\n    z-index: 200001;\r\n}\r\n\r\n.bsc-white .absol-context-menu-anchor {\r\n    font-size: var(--font-size-right-mouse-menu);\r\n}\r\n\r\n.card-mobile-content > div:not([class]):first-child:last-child .as-dynamic-table-wrapper.as-overflow-y {\r\n    height: 100%;\r\n}\r\n\r\n/* todo: normalize for all module\r\n.absol-selectmenu-holder-item .absol-selectlist-item-text,\r\n.absol-selectmenu-holder-item .absol-selectlist-item-desc {\r\n    line-height: calc(var(--control-height) - 10px);\r\n}\r\n\r\n.bsc-white .absol-selectmenu {\r\n    height: var(--control-height);\r\n    font-size: var(--font-size-text-input);\r\n}\r\n\r\n.bsc-white .absol-selectlist .absol-selectlist-item {\r\n    font-size: var(--font-size-text-input);\r\n    height: 1.42857142857em;\r\n}\r\n\r\n.bsc-white .absol-selectlist .absol-selectlist-item>span {\r\n    line-height: 1.42857142857;\r\n}\r\n\r\n.bsc-white .absol-search-text-input {\r\n    font-size: var(--font-size-text-input);\r\n}\r\n\r\n */\r\n\r\n.absol-single-page.as-has-footer-margin > .absol-single-page-scroller{\r\n   padding-bottom:  var(--footer-margin);\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".kv-overview-widget {\r\n    background-color: rgb(212, 227, 252);\r\n    padding: 0 5px 5px 5px;\r\n    border-radius: 3px;\r\n    box-sizing: border-box;\r\n    display: inline-block;\r\n    width: 25em;\r\n    height: 40em;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 1rem;\r\n    position: fixed;\r\n    --x: 0;\r\n    --y: 0;\r\n    left: var(--x);\r\n    top: var(--y);\r\n    z-index: 3000000;\r\n}\r\n\r\n.kv-overview-widget-header {\r\n    height: 2em;\r\n    padding-left: calc(10em / 14);\r\n    user-select: none;\r\n    position: relative;\r\n}\r\n\r\n.kv-overview-widget-header-window-action {\r\n    position: absolute;\r\n    right: 5px;\r\n    top: calc(50% - 10em / 14);\r\n    height: calc(20em / 14);\r\n    display: inline-block;\r\n}\r\n\r\n.kv-overview-widget-header-window-action button {\r\n    background-color: transparent;\r\n    border-radius: 3px;\r\n    padding: 0;\r\n    border: none;\r\n    width: 20px;\r\n    height: 20px;\r\n    color: rgb(69, 69, 70);\r\n}\r\n\r\n.kv-overview-widget-header-window-action button:hover {\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.kv-overview-widget-header-window-action button:hover {\r\n    background-color: var(--as-transparent-button-active-color);\r\n}\r\n\r\n.kv-overview-widget-title {\r\n    font-weight: bold;\r\n    display: inline-block;\r\n    line-height: 2em;\r\n}\r\n\r\n.kv-overview-widget-body {\r\n    box-sizing: border-box;\r\n    padding-top: 5px;\r\n    background-color: white;\r\n    height: calc(100% - 2em);\r\n    position: relative;\r\n}\r\n\r\n.kv-overview-widget-body > .absol-tabview > .absol-tabbar .absol-hscroller-viewport {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.kv-overview-widget-body > .absol-tabview > .absol-tabbar .absol-hscroller-viewport {\r\n    padding-left: 5px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.kv-overview-widget-body > .absol-tabview > .absol-tabbar .as-tab-bar-button-ext-icon-ctn {\r\n    margin: 0;\r\n}\r\n\r\n.kv-overview-widget-page > div {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.kv-overview-widget-tab-view .absol-tabbar-button > .absol-tabbar-button-icon-container {\r\n    display: none;\r\n}\r\n\r\n.kv-overview-widget-tab-view .absol-tabbar-button {\r\n    min-width: 70px;\r\n    text-align: left;\r\n}\r\n\r\n.kv-overview-widget-tab-view {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.kv-overview-widget-bubble {\r\n    position: fixed;\r\n    z-index: 3000000;\r\n    width: 54px;\r\n    height: 54px;\r\n    border-radius: 50%;\r\n    background-color: white;\r\n    box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.75);\r\n    -webkit-box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.75);\r\n    -moz-box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.75);\r\n    user-select: none;\r\n}\r\n\r\n.kv-overview-widget-bubble:hover {\r\n    background-color: rgb(240, 240, 250);\r\n\r\n}\r\n\r\n.kv-overview-widget-bubble:active {\r\n    box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.75);\r\n    -webkit-box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.75);\r\n    -moz-box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.75);\r\n}\r\n\r\n.kv-overview-widget-bubble-background {\r\n    position: absolute;\r\n    left: 20%;\r\n    top: 20%;\r\n    width: 60%;\r\n    height: 60%;\r\n    pointer-events: none;\r\n}\r\n\r\n.kv-overview-widget-bubble-badge {\r\n    position: absolute;\r\n    left: calc(85% - 10px);\r\n    bottom: calc(85% - 10px);\r\n    text-align: center;\r\n    padding:0 3px ;\r\n    background-color: rgba(255,  0, 0, 0.7);\r\n    color: white;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    font-size: 14px;\r\n    height: 30px;\r\n    min-width: 30px;\r\n    white-space: nowrap;\r\n    border-radius: 15px;\r\n    box-sizing: border-box;\r\n\r\n}\r\n\r\n.kv-overview-widget-bubble-badge span,\r\n.kv-overview-widget-bubble-badge::before {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.kv-overview-widget-bubble-badge::before{\r\n    content:\"\" ;\r\n    height: 100%;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".kv-ow-modal-manager {\r\n    position: absolute;\r\n    z-index: 3000010;\r\n    width: 100%;\r\n    height: 100%;\r\n    left: 0;\r\n    top: 0;\r\n    font-size: 14px;\r\n    font-family: Arial, Helvetica, sans-serif;\r\n    background-color: rgba(0, 0, 0, 0.502);\r\n    box-sizing: border-box;\r\n    overflow: auto;\r\n    padding-top: 10px;\r\n    padding-bottom: 10px;\r\n}\r\n\r\n.kv-ow-modal-manager:empty {\r\n    display: none;\r\n}\r\n\r\n.kv-ow-modal {\r\n    white-space: nowrap;\r\n    text-align: center;\r\n    position: absolute;\r\n    z-index: 1;\r\n    left: 0;\r\n    right: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    box-sizing: border-box;\r\n    padding: 60px 20px 10px 20px;\r\n}\r\n\r\n.kv-ow-modal::before {\r\n    content: \"\";\r\n    height: 66%;\r\n}\r\n\r\n.kv-ow-modal::before,\r\n.kv-ow-modal-window {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.kv-ow-modal-window {\r\n    background-color: white;\r\n    white-space: normal;\r\n    text-align: left;\r\n    -webkit-box-shadow: 2px 2px 6px 0 rgba(0, 0, 90, 0.55);\r\n    -moz-box-shadow: 2px 2px 6px 0 rgba(0, 0, 90, 0.55);\r\n    box-shadow: 2px 2px 6px 0 rgba(0, 0, 90, 0.55);\r\n    border-radius: 4px;\r\n    max-width: 100%;\r\n    max-height: 100%;\r\n    overflow: hidden;\r\n    box-sizing: border-box;\r\n    display: inline-flex;\r\n    flex-direction: column;\r\n    align-items: stretch;\r\n}\r\n\r\n.kv-ow-modal-title {\r\n    font-size: 14px;\r\n    line-height: 1.5;\r\n    font-weight: bold;\r\n}\r\n\r\n.kv-ow-modal-header {\r\n    padding: 10px 10px 5px 10px;\r\n}\r\n\r\n.kv-ow-modal-body {\r\n    flex-grow: 1;\r\n    overflow-y: auto;\r\n    padding: 10px 10px;\r\n}\r\n\r\n.kv-ow-modal-footer {\r\n    padding: 10px 10px;\r\n    text-align: center;\r\n}\r\n\r\n.kv-ow-modal-header:empty,\r\n.kv-ow-modal-body:empty,\r\n.kv-ow-modal-footer:empty {\r\n    display: none;\r\n}\r\n\r\n.kv-ow-modal-footer > button {\r\n    height: 30px;\r\n    min-width: 110px;\r\n}\r\n\r\n\r\n.kv-ow-modal-footer > button:not(:last-child) {\r\n    margin-right: 20px;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-list-compare-tool {\r\n    border: 1px solid #ddd;\r\n    box-sizing: border-box;\r\n    font-size: 14px;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n\r\n    --item-min-width: 10px;\r\n    min-width: calc(var(--item-min-width) + var(--item-min-width) + 122px + 44px);\r\n    overflow: hidden;\r\n    --list-max-height: auto;\r\n    position: relative;\r\n}\r\n\r\n.as-remove-line-tool-active .as-list-compare-tool-body,\r\n.as-remove-line-tool-active .as-lct-item {\r\n    cursor: none;\r\n}\r\n\r\n.as-lct-cursor {\r\n    position: absolute;\r\n    pointer-events: none;\r\n    z-index: 1e9;\r\n    top: -100px;\r\n    left: -100px;\r\n    font-size: 25px;\r\n    width: 30px;\r\n    height: 30px;\r\n    color: rgba(0, 0, 0, 0.75);\r\n}\r\n\r\n.as-list-compare-tool-header {\r\n    padding-bottom: 5px;\r\n    border-bottom: 1px solid #ddd;\r\n}\r\n\r\n.as-list-compare-tool-header .as-form-cmd-tool,\r\n.as-list-compare-tool-check-ctn {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n}\r\n\r\n.as-list-compare-tool-header .as-cmd-tool-group-x2::before {\r\n    display: none;\r\n}\r\n\r\n.as-list-compare-tool-body {\r\n    width: 100%;\r\n    white-space: nowrap;\r\n    position: relative;\r\n    padding: 30px 10px 10px 10px;\r\n    box-sizing: border-box;\r\n    overflow: hidden;\r\n}\r\n\r\n.as-list-compare-tool-before-title,\r\n.as-list-compare-tool-after-title{\r\n    position: absolute;\r\n    top: 5px;\r\n    line-height: 20px;\r\n    background-color: white;\r\n    z-index: 11;\r\n}\r\n\r\n.as-list-compare-tool-before-title {\r\n    left: 10px;\r\n    line-height: 20px;\r\n}\r\n\r\n.as-list-compare-tool-after-title {\r\n    left: calc(50% + 60px);\r\n}\r\n\r\n.as-list-compare-tool-before-title::before {\r\n    content: \"Form cũ\";\r\n}\r\n\r\n\r\n.as-list-compare-tool-after-title::before {\r\n    content: \"Form mới\";\r\n}\r\n\r\n/*.as-list-compare-tool.as-display-inline {*/\r\n/*    display: inline-block;*/\r\n/*}*/\r\n\r\n.as-list-compare-tool-before,\r\n.as-list-compare-tool-after,\r\n.as-list-compare-tool-spacing {\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    position: relative;\r\n\r\n}\r\n\r\n\r\n.as-list-compare-tool-before,\r\n.as-list-compare-tool-after {\r\n    border: 1px solid #ddd;\r\n    box-sizing: border-box;\r\n    width: calc(50% - 60px);\r\n    max-height: var(--list-max-height);\r\n    overflow-block: auto;\r\n}\r\n\r\n\r\n.as-list-compare-tool-before .as-lct-item:not(:last-child),\r\n.as-list-compare-tool-after .as-lct-item:not(:last-child) {\r\n    border-bottom: 1px solid #ddd;\r\n    height: 29px;\r\n}\r\n\r\n\r\n.as-list-compare-tool-spacing {\r\n    width: 120px;\r\n    height: 30px;\r\n}\r\n\r\n.as-list-compare-tool-operators > svg {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.as-list-compare-tool-operators {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    pointer-events: none;\r\n    z-index: 10;\r\n}\r\n\r\n.as-list-compare-tool-operators > svg .as-lct-line-group:not(.as-same-value) .as-lct-line-hit-box {\r\n    pointer-events: all;\r\n}\r\n\r\n.as-list-compare-tool.as-view-changed {\r\n\r\n}\r\n\r\n\r\n.as-list-compare-tool.as-view-unchanged {\r\n\r\n}\r\n\r\n\r\n.as-list-compare-tool.as-remove-line-tool-active .as-lct-line-group:hover:not(.as-same-value) .as-lct-line-hit-box {\r\n    stroke: rgba(255, 100, 0, 0.5);\r\n}\r\n\r\n\r\n.as-lct-line {\r\n    fill: none;\r\n    stroke: blue;\r\n}\r\n\r\n.as-lct-line-hit-box {\r\n    stroke-width: 8px;\r\n    stroke: transparent;\r\n}\r\n\r\n.as-lct-line-group.as-same-value .as-lct-line {\r\n    stroke: #9cf6b6;\r\n}\r\n\r\n.as-lct-line.as-new-line {\r\n    stroke: #c07777;\r\n}\r\n\r\n.as-lct-arrow {\r\n    fill: blue;\r\n    stroke: none;\r\n}\r\n\r\n.as-lct-same-value-arrow {\r\n    fill: #9cf6b6;\r\n    stroke: none;\r\n}\r\n\r\n.as-lct-new-line-arrow {\r\n    stroke: none;\r\n    fill: #c07777;\r\n}\r\n\r\n\r\n.as-lct-item {\r\n    white-space: nowrap;\r\n    height: 28px;\r\n    box-sizing: border-box;\r\n    padding-right: 10px;\r\n    position: relative;\r\n    overflow: visible;\r\n    padding-left: 10px;\r\n}\r\n\r\n\r\n.as-list-compare-tool.as-view-changed-only .as-lct-item:not(.as-mapped):not(.as-removed):not(.as-added) {\r\n    display: none;\r\n}\r\n\r\n.as-lct-item.as-removed {\r\n    background-color: #fbcece;\r\n}\r\n\r\n.as-lct-item.as-added {\r\n    background-color: #cedbfb;\r\n}\r\n\r\n\r\n.as-lct-item:hover {\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.as-lct-item.as-active {\r\n    background-color: var(--as-transparent-button-active-color);\r\n}\r\n\r\n.as-lct-item::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-lct-item::after {\r\n    content: \"\";\r\n    display: block;\r\n    position: absolute;\r\n    z-index: 5;\r\n    top: calc(50% - 5px);\r\n    right: 5px;\r\n    width: 10px;\r\n    height: 10px;\r\n    background-color: #cdcdcd;\r\n    border-radius: 50%;\r\n}\r\n\r\n\r\n.as-lct-item.as-removed,\r\n.as-lct-item.as-added {\r\n    cursor: pointer;\r\n}\r\n\r\n.as-lct-item.as-removed::after,\r\n.as-lct-item.as-added::after {\r\n    background-color: #37e0e0;\r\n\r\n}\r\n\r\n\r\n\r\n.as-list-compare-tool-after .as-lct-item::after {\r\n    left: 5px;\r\n}\r\n\r\n.as-list-compare-tool-after .as-lct-item {\r\n    padding-left: 15px;\r\n}\r\n\r\n\r\n.as-lct-item-text {\r\n    padding-right: 20px;\r\n}\r\n\r\n.as-lct-item-text,\r\n.as-lct-item-icon-ctn {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-lct-item-icon-ctn {\r\n    width: 25px;\r\n    height: 20px;\r\n    text-align: left;\r\n}\r\n\r\n.as-lct-item-icon-ctn > * {\r\n    font-size: 20px;\r\n    display: block;\r\n}\r\n\r\n.as-lct-item-text::before {\r\n    content: attr(data-text);\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-location-input-modal {\r\n    z-index: 800001;\r\n    background-color: rgb(0, 0, 0, 0.1);\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    padding-right: 4px;\r\n    box-sizing: border-box;\r\n    --max-text-width: 10px;\r\n    min-width: calc(var(--max-text-width) + 96px);\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: 0px;\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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\r\n.as-header-bar-notification-action {\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-header-bar-notification-action-count {\r\n    position: relative;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-header-bar-notification-action-count::before {\r\n        display: none;\r\n        content: \"0\";\r\n        position: absolute;\r\n        font-size: 12px;\r\n        line-height: 18px;\r\n        bottom: 5px;\r\n        right: -8px;\r\n        background-color: rgb(221, 35, 52);\r\n        color: white;\r\n        text-align: center;\r\n        min-width: 18px;\r\n        height: 18px;\r\n        padding-left: 2px;\r\n        padding-right: 2px;\r\n        box-sizing: border-box;\r\n        border-radius: 9px;\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: 10px 18px 15px 18px;\r\n    position: relative;\r\n    user-select: none;\r\n    box-sizing: border-box;\r\n    width: var(--item-width);\r\n    outline: none;\r\n}\r\n\r\n.am-explore-item-block.as-hidden {\r\n    display: none;\r\n}\r\n\r\n.am-explore-item-block:active::after,\r\n.am-explore-item-block:hover::after,\r\n.am-explore-item-block:focus::after {\r\n    display: block;\r\n    position: absolute;\r\n    left: 10px;\r\n    right: 10px;\r\n    top: 0;\r\n    bottom: 0;\r\n    z-index: 2;\r\n    border-radius: 5px;\r\n}\r\n\r\n.am-explore-item-block:active::after {\r\n    content: \"\";\r\n    background-color: var(--as-transparent-button-active-color);\r\n}\r\n\r\n.am-explore-item-block:focus::after {\r\n    content: \"\";\r\n    border: 1px solid #a9a9a9;\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.am-explore-item-block-icon {\r\n    display: block;\r\n    box-sizing: border-box;\r\n    width: 100%;\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    line-height: 1;\r\n}\r\n\r\n.am-explore-item-block-icon > svg {\r\n    width: 50px;\r\n    height: 50px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.am-explore-item-block-name {\r\n    width: 100%;\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.am-explore-group.as-hidden {\r\n    display: none;\r\n}\r\n\r\n/******************************/\r\n.am-springboard-menu {\r\n    --item-width: 150px;\r\n    outline: none;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\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\r\n.am-springboard-menu.as-style-desktop .am-explore-section-break-name {\r\n    background-color: white;\r\n    color: black;\r\n    font-weight: bold;\r\n    font-size: 14px;\r\n}\r\n\r\n.am-springboard-menu.as-style-desktop .am-explore-item-block:hover .am-explore-item-block-icon {\r\n    color: var(--as-transparent-button-text-hover-color);\r\n}\r\n\r\n.am-springboard-menu.as-style-desktop .am-explore-item-block:hover::after {\r\n    content: \"\";\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.am-springboard-menu.as-style-desktop .am-explore-item-block:active::after {\r\n    content: \"\";\r\n    background-color: var(--as-transparent-button-active-color);\r\n}\r\n\r\n.am-springboard-menu > .absol-search-text-input {\r\n    margin: 10px;\r\n    max-width: 400px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.am-springboard-menu::before {\r\n    content: \"\";\r\n    display: block;\r\n    height: 1px;\r\n}\r\n\r\n/*justify-content: space-between;*/\r\n\r\n\r\n.am-springboard-menu.as-searching .am-explore-group:not(.as-search-result),\r\n.am-springboard-menu:not(.as-searching) .am-explore-group.as-search-result {\r\n    display: none;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.as-multi-select-menu-item-ctn.as-has-more {\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-multi-select-menu-item-ctn.as-has-more::after {\r\n    content: \"...\";\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    font-weight: bold;\r\n    font-size: 1.5em;\r\n    color: rgb(57, 57, 58);\r\n    box-sizing: border-box;\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}\r\n\r\n\r\n.as-multi-select-menu.as-has-max-width {\r\n    --max-width: 1024px;\r\n    max-width: var(--max-width);\r\n    min-width: 100px !important;\r\n}\r\n\r\n.as-multi-select-menu.as-has-max-width  .absol-selectbox-item-text span{\r\n    max-width: calc(var(--max-width) - 85px);\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ":root {\r\n    --np-item-width: 370px;\r\n}\r\n\r\n\r\n.as-mobile-notification-virtual-dropdown {\r\n    --np-item-width: auto;\r\n}\r\n\r\n.as-notification-panel {\r\n    padding: 5px 10px;\r\n    text-align: center;\r\n    display: inline-block;\r\n    vertical-align: top;\r\n    font-size: 14px;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n}\r\n\r\n\r\n.as-notification-panel > .as-np-dropdown-button:not(:last-child) {\r\n    margin-right: 10px;\r\n}\r\n\r\n\r\n.as-np-dropdown-button {\r\n    display: inline-block;\r\n    vertical-align: center;\r\n}\r\n\r\n.as-np-db-btn {\r\n    width: 40px;\r\n    height: 40px;\r\n    border: none;\r\n    background-color: rgba(169, 169, 171, 0.2);\r\n    border-radius: 50%;\r\n    position: relative;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-np-db-btn:hover {\r\n    background-color: rgba(169, 169, 171, 0.4);\r\n}\r\n\r\n.as-np-db-icon-ctn, .as-np-db-count {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-np-dropdown-button.as-active > .as-np-db-btn {\r\n    background-color: rgba(169, 169, 220, 0.4);\r\n}\r\n\r\n\r\n.as-np-dropdown-button.as-active .as-np-db-icon-ctn {\r\n    color: #0866ff;\r\n}\r\n\r\n.as-np-db-count:not([data-count]) {\r\n    display: none;\r\n}\r\n\r\n.as-np-db-count {\r\n    position: relative;\r\n    overflow: visible;\r\n}\r\n\r\n\r\n.as-np-db-count::before {\r\n    content: attr(data-count);\r\n    position: absolute;\r\n    font-size: 12px;\r\n    line-height: 18px;\r\n    bottom: 5px;\r\n    left: -5px;\r\n    background-color: rgb(221, 35, 52);\r\n    color: white;\r\n    border-radius: 9px;\r\n    text-align: center;\r\n    min-width: 18px;\r\n    height: 18px;\r\n    padding-left: 2px;\r\n    padding-right: 2px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n\r\n.as-np-db-icon-ctn > span,\r\n.as-np-db-icon-ctn > i,\r\n.as-np-db-icon-ctn > svg {\r\n    font-size: 20px;\r\n    color: currentColor;\r\n}\r\n\r\n\r\n.as-np-db-dropdown {\r\n    position: fixed;\r\n    right: 20px;\r\n\r\n    background-color: white;\r\n    visibility: hidden;\r\n    opacity: 0;\r\n    --max-height: calc(90vh - 160px);\r\n    max-height: var(--max-height);\r\n    z-index: -1000;\r\n    text-align: left;\r\n}\r\n\r\n.as-np-db-dropdown::before {\r\n    content: \"\";\r\n    display: block;\r\n    height: 0;\r\n}\r\n\r\n\r\n.as-np-db-dropdown:empty {\r\n    display: none;\r\n}\r\n\r\n.as-np-db-dropdown-quick-menu-ctn {\r\n    position: absolute;\r\n    z-index: 9;\r\n    left: calc(var(--np-item-width) - 30px);\r\n    top: 2px;\r\n}\r\n\r\n.as-np-db-quick-menu-btn {\r\n    width: 30px;\r\n    height: 30px;\r\n}\r\n\r\n.as-np-db-quick-menu-btn:hover {\r\n    background-color: var(--icon-background-cover-hover);\r\n}\r\n\r\n.as-np-dropdown-button.as-active .as-np-db-dropdown {\r\n    z-index: 10;\r\n    visibility: visible;\r\n    opacity: 1;\r\n}\r\n\r\n.as-np-db-dropdown-body > h3 {\r\n    font-size: 16px;\r\n    margin: 0;\r\n    padding: 0 10px;\r\n    text-align: left;\r\n    color: rgb(169, 169, 170);\r\n    line-height: 34px;\r\n\r\n}\r\n\r\n.as-np-db-dropdown-body > h4 {\r\n    font-size: 14px;\r\n    margin: 0;\r\n    padding: 0 20px;\r\n    text-align: left;\r\n    color: rgb(69, 69, 70);\r\n}\r\n\r\n\r\n.as-np-section-header {\r\n    padding: 5px 20px;\r\n    display: flex;\r\n}\r\n\r\n.as-np-section-name {\r\n    font-size: 14px;\r\n    font-weight: bold;\r\n    flex-grow: 1;\r\n    line-height: 20px;\r\n}\r\n\r\n.as-np-section-name::before {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: 1.5;\r\n    content: attr(data-name);\r\n}\r\n\r\n.as-np-section-action {\r\n    cursor: pointer;\r\n    color: var(--variant-color-link);\r\n    padding: 0 5px;\r\n    line-height: 20px;\r\n}\r\n\r\n.as-np-section-action:hover {\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.as-np-section-action:not([data-text]) {\r\n    display: none;\r\n}\r\n\r\n.as-np-section-action::before {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    line-height: 1.5;\r\n    content: attr(data-text);\r\n}\r\n\r\n\r\n.as-np-list {\r\n    overflow-y: auto;\r\n    max-height: calc(var(--max-height) - 100px);\r\n}\r\n\r\n.as-np-db-dropdown.as-has-quick-menu > .as-np-db-dropdown-body > .as-np-list:first-child {\r\n    margin-top: 30px;\r\n}\r\n\r\n.as-np-list-more-ctn {\r\n    padding: 10px 0;\r\n    text-align: center;\r\n}\r\n\r\n.as-np-list-more-btn {\r\n    width: calc(100% - 20px);\r\n    height: 30px;\r\n}\r\n\r\n.as-np-item {\r\n    box-sizing: border-box;\r\n    position: relative;\r\n    cursor: pointer;\r\n    border-bottom: 1px solid #dddddd;\r\n    width: var(--np-item-width);\r\n}\r\n\r\n.as-np-item-body {\r\n    padding-right: 26px;\r\n    min-height: 52px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-np-item-body[data-time-text]::after {\r\n    display: block;\r\n    font-size: 12px;\r\n    color: #1da1ff;\r\n    padding-left: 10px;\r\n}\r\n\r\n\r\n.as-np-item-body:hover {\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n\r\n.as-np-item-unread-btn::after {\r\n    content: \"\";\r\n    background-color: rgb(107, 176, 255);\r\n    width: 12px;\r\n    height: 12px;\r\n    border-radius: 50%;\r\n    display: inline-block;\r\n}\r\n\r\n.as-np-item-unread-btn {\r\n    position: absolute;\r\n    right: 0;\r\n    top: calc(50% - 13px);\r\n    width: 26px;\r\n    height: 26px;\r\n    padding: 0;\r\n    background-color: transparent;\r\n    outline: none;\r\n    box-sizing: border-box;\r\n    cursor: pointer;\r\n    border: none;\r\n}\r\n\r\n.as-np-item-pin-btn {\r\n    position: absolute;\r\n    right: 0px;\r\n    top: 0;\r\n    width: 26px;\r\n    height: 26px;\r\n    padding: 0;\r\n    background-color: transparent;\r\n    outline: none;\r\n    box-sizing: border-box;\r\n    cursor: pointer;\r\n    border: none;\r\n}\r\n\r\n.as-np-item-pin-btn > span {\r\n    color: #aaaaaa;\r\n    font-size: 20px;\r\n    display: inline-block;\r\n}\r\n\r\n.as-np-item-pin-btn:hover > span {\r\n    color: #dddddd;\r\n}\r\n\r\n\r\n.as-np-item.as-pin .as-np-item-unread-btn {\r\n    top: calc(50% - 7px);\r\n}\r\n\r\n\r\n.as-np-item:not(.as-unread) .as-np-item-unread-btn,\r\n.as-np-item:not(.as-pin) .as-np-item-pin-btn {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-np-item-quick-menu-ctn {\r\n    position: absolute;\r\n    z-index: 1;\r\n    right: 30px;\r\n    top: calc(50% - 15px);\r\n    visibility: hidden;\r\n\r\n}\r\n\r\n.as-np-item:hover .as-np-item-quick-menu-ctn {\r\n    visibility: visible;\r\n}\r\n\r\n.as-np-item-quick-menu-btn {\r\n    background-color: rgb(230, 230, 230);\r\n    box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);\r\n    width: 30px;\r\n    height: 30px;\r\n    border-radius: 50%;\r\n    border: none;\r\n    font-size: 20px;\r\n    cursor: pointer;\r\n    padding: 0;\r\n}\r\n\r\n.as-np-item-quick-menu-btn:active {\r\n    box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n\r\n.as-mb-vd-header-bar .as-header-bar-notification-action {\r\n    display: none;\r\n}\r\n\r\n\r\n.as-mobile-notification-virtual-dropdown {\r\n    position: fixed;\r\n    right: 0;\r\n    top: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    background-color: white;\r\n    overflow: hidden;\r\n    z-index: 1005;\r\n}\r\n\r\n\r\n.as-mobile-notification-virtual-dropdown.as-hidden {\r\n    visibility: hidden;\r\n    opacity: 0;\r\n    z-index: -1000;\r\n}\r\n\r\n.as-mb-vd-body {\r\n    height: calc(100% - 3em);\r\n    overflow: auto;\r\n}\r\n\r\n.as-mb-vd-body .as-np-item-body {\r\n    padding-right: 56px;\r\n}\r\n\r\n.as-mb-vd-body .as-np-item-quick-menu-ctn {\r\n    visibility: visible;\r\n}\r\n\r\n.as-mb-vd-body .as-np-item-quick-menu-btn {\r\n    background-color: transparent;\r\n    box-shadow: none !important;\r\n}\r\n\r\n.as-mb-vd-body .as-np-item-quick-menu-btn:active {\r\n    background-color: var(--as-transparent-button-active-color);\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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) + 1em);\r\n}\r\n\r\n.absol-number-input.as-has-stepper.as-width-auto {\r\n    width: calc(var(--text-width) + 2.2em);\r\n}\r\n\r\n.absol-number-input-text-container {\r\n    right: 0;\r\n    left: 0em;\r\n    top: 0;\r\n    bottom: 0;\r\n    position: absolute;\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.absol-number-input-button-up-container,\r\n.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.as-has-stepper .absol-number-input-button-up-container,\r\n.absol-number-input.as-has-stepper .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    overflow: hidden;\r\n    display: block;\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.as-has-stepper .absol-number-input-text-container {\r\n    right: 1.2em;\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.35em;\r\n    box-sizing: border-box;\r\n    font: inherit;\r\n}\r\n\r\n.absol-number-input.as-has-stepper .absol-number-input-text-container > input[type=\"text\"] {\r\n    padding: 0 0.2em;\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}\r\n\r\nbody.as-number-input-force-dragging {\r\n    user-select: none;\r\n    pointer-events: none;\r\n}\r\n\r\n.as-number-input-mouse-line {\r\n    border: 1px dashed #bfc1c2;\r\n    position: fixed;\r\n    z-index: 1e8;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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: 14px;\r\n    font-family: Arial, Helvetica, sans-serif;\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    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    color: 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: var(--icon-background-cover-hover);\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}\r\n\r\n.absol-page-selector.as-simple-mode .absol-page-number,\r\n.absol-page-selector.as-simple-mode .page-first,\r\n.absol-page-selector.as-simple-mode  .page-last{\r\n    display: none;\r\n}\r\n\r\n.absol-page-selector.as-simple-mode  .mdi{\r\n    font-size: 20px;\r\n    line-height: 1.5;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}\r\n\r\n\r\n.as-path-view {\r\n    white-space: nowrap;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    font-size: 1em;\r\n    height: calc(2em + 2px);\r\n}\r\n\r\n.as-path-view-item {\r\n    display: inline-block;\r\n    white-space: nowrap;\r\n    background: transparent;\r\n    border: 1px solid transparent;\r\n    box-sizing: border-box;\r\n    height: 100%;\r\n    position: relative;\r\n    padding-left: 0.5em;\r\n    padding-right: 0;\r\n    cursor: pointer;\r\n    font-size: inherit;\r\n}\r\n\r\n.as-path-view-item:last-child {\r\n    padding-right: 0.5em;\r\n}\r\n\r\n.as-path-view-item:hover {\r\n    border-color: #dddddd;\r\n}\r\n\r\n.as-path-view-item::before{\r\n    content: \"\";\r\n    position: absolute;\r\n    left: 0;\r\n    right: 1em;\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.as-path-view-item:last-child::before{\r\n    right: 0;\r\n}\r\n\r\n.as-path-view-item:hover::before {\r\n    background-color: rgba(169, 169, 169, 0.15);\r\n}\r\n\r\n.as-path-view-item:active::before {\r\n    background-color: rgba(169, 169, 169, 0.3);\r\n}\r\n\r\n.as-path-view-item-icon {\r\n    margin-right: 0.5em;\r\n}\r\n\r\nspan.as-path-view-item-icon,\r\ni.as-path-view-item-icon {\r\n    font-size: 1.5em;\r\n    line-height: 1;\r\n    text-align: center;\r\n}\r\n\r\nsvg.as-path-view-item-icon,\r\nimg.as-path-view-item-icon {\r\n    width: 1.5em;\r\n    height: 1.5em;\r\n}\r\n\r\n\r\n\r\n.as-path-view-item-text {\r\n    padding-right: 0.2em;\r\n}\r\n\r\n\r\n.as-path-view-item-arrow {\r\n    width: 1em;\r\n    text-align: center;\r\n}\r\n\r\n.as-path-view-item-icon,\r\n.as-path-view-item-text,\r\n.as-path-view-item-arrow {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-path-view-item:last-child .as-path-view-item-arrow {\r\n    display: none;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-picking-list {\r\n    font-size: 14px;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n}\r\n\r\n\r\n.as-picking-list-item {\r\n    height: 30px;\r\n    position: relative;\r\n    padding-right: 40px;\r\n    padding-left: 10px;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-picking-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.as-picking-list-item-text {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.as-picking-list-item:hover {\r\n    background-color: var(--as-transparent-button-hover-color);\r\n}\r\n\r\n.as-picking-list-item:active {\r\n    background-color: var(--as-transparent-button-active-color);\r\n}\r\n\r\n.as-picking-list-item-checked {\r\n    position: absolute;\r\n    right: 5px;\r\n    top: 0;\r\n    bottom: 0;\r\n    font-size: 20px;\r\n}\r\n\r\n.as-picking-list-item-checked::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.as-picking-list-item-checked::before,\r\n.as-picking-list-item-checked span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    font-size: inherit;\r\n}\r\n\r\n.as-picking-list-item:not(.as-checked) .as-picking-list-item-checked {\r\n    display: none;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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:disabled .as-ribbon-button-icon {\r\n    color: rgba(16, 16, 16, 0.3) !important;\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 .as-ribbon-dropdown-icon {\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    display: block;\r\n    margin-left: auto;\r\n    margin-right: auto;\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    width: 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\r\n\r\n.as-select-ribbon-menu {\r\n    color: #007bff;\r\n}\r\n\r\n.as-ribbon-selected {\r\n    background-color: #dfdfdf;\r\n}\r\n\r\n.as-mobile-ribbon-list > button {\r\n    font-size: 12px;\r\n}\r\n\r\n@media screen and (min-width: 350px) {\r\n    .as-mobile-ribbon-list .as-ribbon-button.as-big {\r\n        width: 25%;\r\n    }\r\n}\r\n\r\n\r\n@media screen and (max-width: 350px) {\r\n    .as-mobile-ribbon-list .as-ribbon-button.as-big {\r\n        width: 33%;\r\n    }\r\n}\r\n\r\n.as-mobile-ribbon-list .as-ribbon-button {\r\n    vertical-align: top;\r\n    font-size: 13px;\r\n}\r\n\r\n.as-mobile-ribbon-list .as-ribbon-button.as-big span.as-ribbon-button-icon {\r\n    font-size: 20px;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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-dropdown-icon{\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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: rgb(113, 148, 169);\r\n    border-color: rgb(121, 165, 192);\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: white;\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:hover {\r\n    color: var(--as-transparent-button-text-hover-color);\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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 #aaaaaa;\r\n    position: absolute;\r\n    left: 0.2em;\r\n    right: 0.2em;\r\n    bottom: -0.5px;\r\n    z-index: 20;\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.am-list-modal-v2 {\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.am-list-modal-v2 > 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    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.am-list-modal-v2.as-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.am-check-list-page {\r\n    overflow: hidden;\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.am-selectlist-item-desc {\r\n    font-style: italic;\r\n    line-height: 20px;\r\n    color: rgb(80, 80, 82);\r\n    white-space: pre;\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}\r\n\r\n.am-check-list-scroller {\r\n    max-height: calc(100vh - var(--modal-margin-top) - 200px);\r\n    overflow-y: auto;\r\n    overflow-x: hidden;\r\n}\r\n\r\n.am-check-list-modal {\r\n    --col1-width: 100px;\r\n    --col2-width: 100px;\r\n}\r\n\r\n.am-check-list-modal .am-list-popup-content {\r\n    width: calc(var(--col1-width) + var(--col2-width));\r\n    min-width: 300px;\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item {\r\n    position: relative;\r\n    min-height: 30px;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item-desc-ctn {\r\n    position: absolute;\r\n    width: var(--col2-width);\r\n    right: 0;\r\n    height: 100%;\r\n    white-space: nowrap;\r\n\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item-text,\r\n.am-check-list-modal .am-selectlist-item-desc {\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n    line-height: 20px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    white-space: pre;\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item-text-ctn {\r\n    position: absolute;\r\n    right: var(--col2-width);\r\n    left: calc(var(--level) * 12px + 30px);\r\n    height: 100%;\r\n    white-space: nowrap;\r\n}\r\n\r\n\r\n.am-check-list-modal .am-selectlist-item-check-ctn {\r\n    position: absolute;\r\n    top: 0;\r\n    left: calc(var(--level) * 12px + 5px);\r\n    height: 100%;\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item-check-ctn::before,\r\n.am-check-list-modal .am-selectlist-item-check-ctn > *,\r\n.am-check-list-modal .am-selectlist-item-text-ctn::before,\r\n.am-check-list-modal .am-selectlist-item-desc-ctn::before,\r\n.am-check-list-modal .am-selectlist-item-text-ctn > span {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item-check-ctn::before,\r\n.am-check-list-modal .am-selectlist-item-text-ctn::before,\r\n.am-check-list-modal .am-selectlist-item-desc-ctn::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n\r\n.am-check-list-modal .am-selectlist-item-text-ctn {\r\n    white-space: nowrap;\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item-text {\r\n    max-height: 100%;\r\n    line-height: 20px;\r\n    white-space: pre;\r\n    width: calc(var(--col1-width) - 12px * var(--level) - 30px - 21px - 10px);\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n}\r\n\r\n.am-list-modal-v2 {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    height: 100%;\r\n    width: 100%;\r\n    box-sizing: border-box;\r\n    font-size: 14px;\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n}\r\n\r\n.am-list-modal-v2 .am-list-popup-list-scroller {\r\n    max-height: calc(100vh - var(--modal-margin-top) - 200px);\r\n}\r\n\r\n.am-list-modal-v2 .am-list-popup-content {\r\n    width: calc(var(--col1-width) + var(--col2-width));\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item-text-ctn {\r\n    padding-left: 10px;\r\n    white-space: nowrap;\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item-text-ctn::before,\r\n.am-list-modal-v2 .am-selectlist-item-desc-ctn::before {\r\n    content: \"\";\r\n    height: 100%;\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item-text-ctn::before,\r\n.am-list-modal-v2 .am-selectlist-item-desc-ctn::before,\r\n.am-list-modal-v2 .am-selectlist-item-text,\r\n.am-list-modal-v2 .am-selectlist-item-desc {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.am-selectlist-item-text {\r\n    white-space: pre;\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item {\r\n    position: relative;\r\n    height: 30px;\r\n    line-height: 20px;\r\n}\r\n\r\n\r\n.am-list-modal-v2 .am-selectlist-item::after {\r\n    content: \"\";\r\n    display: block;\r\n    position: absolute;\r\n    bottom: 0;\r\n    left: 0;\r\n    right: 0;\r\n    border-bottom: 1px solid #eee;\r\n}\r\n\r\n.am-check-list-modal .am-selectlist-item.as-last-in-group::after{\r\n    content: \"\";\r\n    display: block;\r\n    position: absolute;\r\n    bottom: 0;\r\n    left: 0;\r\n    right: 0;\r\n    border-bottom: 1px solid #aaa;\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item.as-selected {\r\n    background-color: #dfdfdf;\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item-text-ctn,\r\n.am-list-modal-v2 .am-selectlist-item-desc-ctn {\r\n    box-sizing: border-box;\r\n    overflow: hidden;\r\n    height: 100%;\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item {\r\n    white-space: nowrap;\r\n}\r\n\r\n\r\n.am-list-modal-v2 .am-selectlist-item-text-ctn {\r\n    width: var(--col1-width);\r\n}\r\n\r\n.am-list-modal-v2 .am-selectlist-item-desc-ctn {\r\n    width: var(--col2-width);\r\n}\r\n\r\n.am-list-modal-v2 .am-list-popup-header {\r\n    height: auto;\r\n    min-height: calc(2em + 10px);\r\n}\r\n\r\n.am-selectlist-item.as-disabled .as-checkbox-input{\r\n    visibility: hidden;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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\n.as-select-list-box.as-text-align-center .absol-selectlist-item {\r\n    text-align: center;\r\n}\r\n\r\n.as-select-list-box.as-text-align-center .absol-selectlist-item-text {\r\n    padding-right: calc(0.35em + 28px);\r\n}\r\n\r\n.as-select-menu.as-text-align-center {\r\n    text-align: center;\r\n}\r\n\r\n.as-select-menu.as-text-align-center .absol-selectlist-item,\r\n.as-select-list-box.as-text-align-center .absol-selectlist-item {\r\n    padding-left: 0.35em;\r\n    padding-right: calc(0.35em + 28px);\r\n}\r\n\r\n.as-select-menu.as-text-align-center .absol-selectlist-item-text,\r\n.as-select-list-box.as-text-align-center .absol-selectlist-item-text {\r\n    padding: 0;\r\n}\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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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 {}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".absol-single-page {\r\n    position: relative;\r\n    overflow: hidden;\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: relative;\r\n    overflow-y: auto;\r\n}\r\n\r\n.absol-single-page.as-has-header {\r\n    display: grid;\r\n    grid-template-rows: auto 1fr;\r\n}\r\n\r\n.absol-single-page:not(.as-has-header) .absol-single-page-scroller{\r\n    width: 100%;\r\n    height: 100%;\r\n    box-sizing: border-box;\r\n}\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.as-table-of-text-input-tool-group > 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-group {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    white-space: nowrap;\r\n}\r\n\r\n.as-table-of-text-input-tool-group:not(:last-child) {\r\n    border-right: 1px solid #dddddd;\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    box-shadow: inset gray 0px 0px 4px -2px;\r\n}\r\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    overflow: hidden;\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-y-header,\r\n.as-table-scroller-fixed-xy-header {\r\n    table-layout: fixed;\r\n}\r\n\r\n.as-table-scroller-fixed-y-header td,\r\n.as-table-scroller-fixed-y-header tr,\r\n.as-table-scroller-fixed-y-header th,\r\n.as-table-scroller-fixed-xy-header td,\r\n.as-table-scroller-fixed-xy-header tr,\r\n.as-table-scroller-fixed-xy-header th {\r\n    box-sizing: border-box;\r\n}\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.as-mobile-theme .as-table-scroller-fixed-y-header-scroller::-webkit-scrollbar,\r\n.as-mobile-theme .absol-table-scroller-header-hscroller-viewport::-webkit-scrollbar {\r\n    display: none;\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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.as-tabview-title {\r\n    padding: 10px 10px;\r\n    font-weight: bold;\r\n    font-size: 14px;\r\n    color: rgb(230, 230, 205);\r\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.bsc-white .as-tabview-title,\r\n.bsc-white .as-np-db-btn{\r\n    color: var(--tab-button-font-color-hover);\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}\r\n\r\n.as-tabview-right-ctn {\r\n    position: absolute;\r\n    z-index: 150;\r\n    right: 0;\r\n    top: 0;\r\n}\r\n\r\n\r\n\r\n.bsc-white .as-tabview-right-ctn {\r\n    top: -10px;\r\n}\r\n\r\n.as-tabview-right-ctn> div{\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.bsc-white .as-tabview-right-ctn::before {\r\n    content: \"\";\r\n    height: 50px;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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/*}*/", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.as-read-only.as-border-none {\r\n    min-width: unset;\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    width: 24px;\r\n    height: 24px;\r\n    vertical-align: middle;\r\n}\r\n\r\n.as-toast-close-btn:hover {\r\n    color: black;\r\n    background-color: var(--icon-background-cover-hover);\r\n}\r\n\r\n.as-toast-close-btn span {\r\n    /*font-size: 1.5em;*/\r\n    font-size: 20px;\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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.28em;\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.28em;\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.38em;\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.38em;\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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    -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    white-space: nowrap;\r\n}\r\n\r\n.absol-trackbar::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-trackbar-line {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    width: 100%;\r\n    position: relative;\r\n    height: 0.4em;\r\n    box-sizing: border-box;\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    width: 1.2em;\r\n    margin-left: -0.6em ;\r\n    background: rgb(245, 245, 245);\r\n    border-radius: 50%;\r\n    border: solid 1px rgb(139, 139, 139);\r\n    box-sizing: border-box;\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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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    page-break-inside: avoid;\r\n    break-inside: avoid;\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    page-break-inside: avoid;\r\n    break-inside: avoid;\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}\r\n\r\n.as-tree-table-cell>span:first-child:last-child{\r\n    page-break-inside: avoid;\r\n    break-inside: avoid;\r\n}\r\n\r\n@media print {\r\n    div[align=\"center\"]> .as-tree-table{\r\n        display: block !important;\r\n    }\r\n    /*trick avoid break row*/\r\n    .as-tree-table tbody tr td:before,\r\n    .as-tree-table tbody tr td:after {\r\n        content: \"\";\r\n        height: 4px;\r\n        display: block;\r\n    }\r\n\r\n    .as-tree-table-head {\r\n        display: table-header-group  !important;\r\n    }\r\n\r\n    .as-tree-table-head + tbody tr:first-child th {\r\n        display: none;\r\n    }\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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*/", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(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 */", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-assessment-chart {\n    /*border: 1px solid red;*/\n}\n\n\n.vc-assessment-chart.simple-mode .vc-assessment-chart-area,\n.vc-assessment-chart.vc-simple-mode .vc-assessment-chart-area {\n    fill: none !important;\n}\n\n.vc-assessment-chart.simple-mode .vc-assessment-chart-level:not(.last),\n.vc-assessment-chart.vc-simple-mode .vc-assessment-chart-level:not(:last-child) {\n    display: none;\n}\n\n.vc-assessment-chart:not(.show-range-segment) .vc-assessment-chart-range-segment {\n    display: none;\n}\n\n.vc-assessment-chart-area {\n    stroke-width: 3;\n}\n\n\n.vc-assessment-chart-level {\n    fill: none;\n    stroke-width: 1;\n    stroke: rgba(12, 30, 49, 0.333)\n}\n\n\n.vc-assessment-chart-level-value text,\n.vc-assessment-chart-level-value {\n    font-size: 10px;\n}\n\n.vc-assessment-chart-level-value rect {\n    fill: rgba(255, 255, 255, 0.5);\n    stroke: rgba(60, 60, 70, 0.6);\n    stroke-width: 1;\n}\n\n.vc-assessment-chart-range-plot {\n    fill: #155757d8;\n}\n\n.vc-assessment-chart-range-line {\n    stroke: #155757d8;\n    stroke-width: 3;\n}\n\n.vc-assessment-chart-range-area {\n    fill: rgba(200, 200, 0, 0.3);\n    stroke: none;\n}\n\n.vc-assessment-chart-range-area-stroke {\n    fill: none;\n    stroke: rgb(255, 150, 0);\n    stroke-width: 1.5;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-bar-stack-chart {\n\n}\n\n\n.vc-bar-stack-note-name {\n    font-weight: bold;\n    font-size: 16px;\n}\n\n.vc-bar-stack-block-value {\n    font-size: 25px;\n    text-anchor: middle;\n}\n\n.vc-bar-stack-block-percent {\n    text-anchor: middle;\n    font-size: 20px;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-title {\n    font-weight: bold;\n    font-size: 1.125em;\n    text-anchor: middle;\n}\n\n\n.vc-chart {\n    font-family: \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n    font-size: 14px;\n    background-color: white;\n    --vc-require-width: 100px;\n    --vc-require-height: 200px;\n    min-width: var(--vc-require-width);\n    min-height: var(--vc-require-height);\n}\n\n.vc-oxy {\n    fill: none;\n    stroke: rgb(68, 114, 196);\n    stroke-width: 1;\n}\n\n.vc-oxy-arrow {\n    fill: rgb(68, 114, 196);\n    stroke: none;\n}\n\n.vc-simple-ox {\n    stroke-width: 1;\n}\n\n.vc-oy-value {\n    text-anchor: end;\n}\n\n.vc-ox-label {\n    text-anchor: middle;\n}\n\n.vc-white-mask {\n    fill: white;\n}\n\n.vc-value-name,\n.vc-key-name {\n    text-anchor: end;\n    font-style: italic;\n}\n\n.vc-note {\n    cursor: default;\n}\n\n.vc-note:hover text {\n    fill: rgb(130, 135, 180);\n}\n\n.vc-value-text {\n    text-anchor: middle;\n    fill: currentColor;\n}\n\n.vc-grid {\n    fill: none;\n    stroke: #ddd;\n    pointer-events: none;\n}\n\n@media print {\n    .as-resize-box {\n        display: none;\n    }\n\n    .vc-chart {\n        max-width: 600px; /*a4 with 2in margin both*/\n        height: auto;\n    }\n\n}\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vchart-hidden{\n    display: none;\n}\n\n.base-chart:not(:hover) .vchart-vscrollbar {\n    display: none;\n}\n\n.vchart-hitbox{\n    fill: rgba(0, 0, 0, 0);\n    /* stroke: none; */\n}\n\n\n.vchart-debug .vchart-hitbox{\n    fill: rgba(22, 129, 216, 0.247);\n    stroke: rgba(22, 129, 216, 0.87);\n}\n\n\n.vchart-base{\n    font-size: 14px;\n    font-family: Arial;\n}\n\n\n.vchart-stroke-note-line {\n    stroke-width: 2;\n}\n\n.vchart-stroke-note-text,\n.vchart-rect-note-text\n{\n    font-size: 14px;\n}\n\n.vchart-rect-note-rect{\n    stroke:none;\n}\n\nrect.vchart-node-grid-box{\n    fill: burlywood;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".as-resize-box.vc-chart-resize-box {\n    position: fixed;\n    z-index: 8000000;\n    user-select: none;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "\n.vc-column rect {\n    fill: rgb(123, 192, 247);\n}\n\n.column-chart:not(.vchart-show-inline-value) .column-chart-column text {\n    display: none;\n}\n\n.vc-column.vc-value-zero text,\n.vc-chart:not(.vc-show-inline-value) .vc-column text {\n    display: none;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".av-funnel-chart {\n\n}\n\n.av-funnel {\n\n}\n\n.av-funnel-item-block {\n\n}\n\n.av-funnel-note-name {\n    font-weight: bold;\n    font-size: 16px;\n    text-transform: uppercase;\n}\n\n.av-funnel-block-shape {\n    stroke: white;\n    stroke-width: 2;\n}\n\n.av-funnel-block-value {\n    text-anchor: middle;\n    font-size: 30px;\n}\n\n.av-funnel-block-percent{\n    text-anchor: middle;\n    font-size: 25px;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".grank-chart {\n    font-size: 12px;\n    font-family: Arial;\n}\n\n.grank-chart-plot {\n    fill: rgb(145, 228, 251);\n    stroke-width: 1;\n    stroke: black;\n}\n\n.grank-chart-group-rect {\n    stroke: black;\n    fill: none;\n    stroke-width: 1;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-horizontal-bar-chart {\n    border: 1px solid black;\n    font-size: 14px;\n}\n\n.vc-horizontal-bar-chart .base-chart-white-mask {\n    /* fill: rgba(255, 0, 0, 0.4); */\n}\n\ng.vc-horizontal-bar-one-bar-note-container .vc-horizontal-bar-chart-bar {\n    stroke: rgb(47, 82, 143);\n    stroke-width: 1;\n    fill: white;\n}\n\ng.vc-horizontal-bar-one-bar-note-container .vc-horizontal-bar-chart-range {\n    stroke: rgb(47, 82, 143);\n    stroke-width: 1;\n    fill: rgb(157, 195, 230);\n}\n\ng.vc-horizontal-bar-one-bar-note-container {}\n\ng.vc-horizontal-bar-one-bar-note-container .vc-horizontal-bar-chart-range-min-line,\ng.vc-horizontal-bar-one-bar-note-container .vc-horizontal-bar-chart-range-max-line {\n    stroke: rgb(47, 82, 143);\n    stroke-width: 1px;\n    stroke-dasharray: 2;\n}\n\n.vc-horizontal-bar-chart-key {\n    text-anchor: end;\n}\n\ng.vc-horizontal-bar-keys-note-container {}\n\ng.vc-horizontal-bar-key-note {}\n\n\n\n.vc-horizontal-bar-chart-segment-text {\n    text-anchor: middle;\n}\n\n\n.vc-horizontal-bar-chart-range {\n    stroke: rgb(47, 82, 143);\n    stroke-width: 1;\n}\n\n\ntext.vc-horizontal-bar-title {\n    font-size: 15px;\n    font-weight: bold;\n    text-anchor: middle;\n}\n\n\n.vc-horizontal-bar-vline {\n    stroke-width: 1;\n}\n\n\n.vc-horizontal-bar-chart-value-line {\n    stroke: darkgray;\n    stroke-width: 0.5;\n}\n\n.vc-horizontal-bar-vline-note>path {\n    stroke-width: 2;\n}\n\n\n.vc-horizontal-bar-vline-note-box {\n    stroke-width: 1;\n    stroke: black;\n    fill: none;\n}\n\n.vc-horizontal-bar-vline-container>path {\n    stroke-width: 2;\n    stroke: black;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".image-chart text{\n    font-size: 14px;\n}\n\n.image-chart-ox {\n    fill: none;\n    stroke: #4472c4;\n    stroke-width: 1;\n}\n\n.image-chart-base{\n    fill:#7bc0f7;\n    stroke: none;\n}\n\n.image-chart-bonus{\n    fill:#ffcc7f;\n    stroke: none;\n}\n\n.image-chart-range{\n    stroke: black;\n    stroke-width:1; \n}\n\n.image-chart-range-limit{\n    fill: none;\n    stroke: #000000;\n    stroke-width: 1;\n}\n\n\n.image-chart.as-bonus-under-100-percent .image-chart-bonus {\n    fill: #ff927f;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "\n.line-chart-line {\n    stroke-width: 2;\n    fill: none;\n}\n\n.line-chart-plot {\n    stroke: none;\n}\n\n.vc-line-chart.vc-small-col .vc-key {\n    visibility: hidden;\n}\n\n.vc-line-chart .vc-plot {\n    fill: var(--color);\n}\n\n.vc-line-path {\n    stroke: var(--color);\n    stroke-width: 2;\n    fill: none;\n}\n\n.vc-line-hit-path {\n    stroke-width: 6;\n    fill: none;\n    stroke: transparent;\n}\n\n.vc-line:hover .vc-line-hit-path{\n    stroke: var(--lighter-color);\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".mapping-chart{\n    border: solid 1px gray;\n    background-color: aliceblue;\n}\n\n.mapping-chart-map-line-hitbox.vchart-hitbox{\n    stroke-width: 8;\n    stroke: transparent;\n    cursor: pointer;\n}\n\n.mapping-chart-range-text{\n    stroke: none;\n    fill: blue;\n    font-size: 14px;\n}\n\n.mapping-chart-range-plot{\n    fill:none;\n    stroke: black;\n    stroke-width: 2px;\n}\n\n.mapping-chart-line-plot{\n    fill:green;\n    stroke: red;\n    stroke-width: 0.54;\n    cursor: pointer;\n}\n\n.mapping-chart-title{\n    font-size: 20px;\n    fill: black;\n    stroke: none;\n}\n\n.mapping-chart-range-line{\n    stroke: black;\n    stroke-width: 2px;\n}\n\n.mapping-chart-marker{\n    font-size: 14px;\n    /* cursor: pointer; */\n}\n\n.mapping-chart-marker:hover .mapping-chart-marker-box{\n    /* fill: rgba(17, 230, 88, 0.788); */\n}\n\n.mapping-chart-marker-box{\n    /* fill: rgba(17, 187, 230, 0.788); */\n    fill: none;\n    stroke: none;\n}\n\n\n\nsvg:not(.mapping-chart-hover-bot) .mapping-chart-marker.bot{\n    visibility: hidden;\n}\n\n.mapping-chart-marker.bot:hover .mapping-chart-marker-box,\n.mapping-chart-marker.top:hover .mapping-chart-marker-box\n{\n    /* fill: rgba(17, 187, 230, 0.788); */\n}\n\nsvg:not(.mapping-chart-hover-top)  .mapping-chart-marker.top{\n    visibility: hidden;\n}\n\n.mapping-chart-map-line{\n    stroke: black;\n    stroke-width: 2;\n}\n\n.mapping-chart-map-line.selected-line{\n    stroke: red;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vchart-vscrollbar-bar{\n    fill: rgba(0, 0, 0, 0.07); \n}\n\n.vchart-vscrollbar-button{\n    fill:rgba(0, 0, 0, 0.1); ;\n}\n\n\n.vchart-segment-line,\n.vchart-axis,\n.vchart-line-arrow {\n    stroke-width: 1;\n    stroke: rgb(68, 114, 196);\n    fill: rgb(68, 114, 196);\n}\n\n.vchart-scroll-arrow {\n    touch-action: none;\n    user-select: none;\n    opacity: 0.2;\n}\n\n.vchart-scroll-arrow:hover {\n    opacity: 0.6;\n}\n", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-note{\n\n}\n\n.vc-note-rect {\n    stroke: none;\n}\n\n.vc-note-hit {\n    fill: transparent;\n    stroke: none;\n}\n\n.vc-note-line {\n    stroke-width: 2;\n}\n\n.vc-note-text {\n    font-size: 1em;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-piece{\n    stroke-width: 1;\n    stroke: white;\n}\n\n.vc-piece-value{\n    font-size: 16px;\n    text-anchor: middle;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-range-chart {\n    box-sizing: border-box;\n}\n\n.base-chart,\n.range-chart {\n    font-size: 12px;\n    font-family: Arial, Helvetica, sans-serif;\n}\n\n\n.base-chart-title {\n    font-size: 15px;\n}\n\n\n.range-chart:not(:hover) .vchart-vscrollbar {\n    display: none;\n}\n\n.base-chart-title {\n    font-size: 15px;\n    font-weight: bold;\n}\n\n.base-chart-oxy-text {\n    font-style: italic;\n    fill: rgb(70, 70, 70);\n    stroke: none;\n}\n\n.range-chart-value-plot {\n    fill: #f7941d;\n    stroke: none;\n}\n\n.range-chart-limit-line {\n    stroke-width: 4;\n    fill: none;\n}\n\n.range-chart-range-line {\n    stroke-width: 1;\n    fill: none;\n    stroke: black;\n}\n\n.range-chart-limit-line.max {\n    stroke: #2C82FF;\n}\n\n.range-chart-limit-line.mid {\n    stroke: #58EBF4;\n}\n\n.range-chart-limit-line.min {\n    stroke: #ED1C24;\n}\n\n.range-chart:not(.show-inline-value) .range-chart-inline-value {\n    display: none;\n}\n\n/* .show-inline-value .range-chart-note, */\n\n.show-inline-value .range-char-note-value {\n    display: none;\n}\n\n.vc-range-chart-label-full,\n.vc-range-chart-label-line,\n.vc-range-chart-label {\n    text-anchor: middle;\n}\n\n.vc-range-chart.vc-ox-label-wrap .vc-range-chart-label-full,\n.vc-range-chart:not(.vc-ox-label-wrap) .vc-range-chart-label-line {\n    display: none;\n}\n\n.vc-ox-value-ctn {\n    text-anchor: end;\n}\n\n.vc-range-rect {\n    fill: rgba(200, 230, 255, 0.5);\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "\n.range-group-chart-limit-line {\n    stroke-width: 5;\n    fill: none;\n}\n\n.range-group-chart-limit-line.max {\n    stroke: rgb(230, 22, 16);\n}\n\n.range-group-chart-limit-line.min {\n    stroke: rgb(20, 100, 246);\n}\n\n.range-group-chart-limit-line.normal {\n    stroke: rgb(255, 218, 216);\n}\n\n.range-group-chart-plot {\n    fill: rgb(145, 228, 251);\n    stroke-width: 1;\n    stroke: hsla(0, 90%, 48%, 0.685);\n}\n\n.range-group-chart-range-line {\n    stroke-width: 1;\n    fill: none;\n    stroke: black;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "\n.rank-chart-plot {\n    stroke: black;\n    stroke-width: 1;\n}\n\n.rank-chart-plot-text{\n    cursor: default;\n}\n\n.rank-chart-position-rect,\n.vc-rank-position-list-rect {\n    stroke: none;\n    fill: rgba(0, 247, 255, 0.139);\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vchart-resizable-div {\n    position: relative;\n    box-sizing: border-box;\n}\n\n.vchart-resizable-div .as-resize-box {\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    display: none;\n}\n\n.vchart-resizable-div.vchart-resizable-div-active .as-resize-box {\n    display: block;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-scroll-arrow-icon {\n    fill: #00a5d6;\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.vc-scroll-arrow-hit-box {\n    fill: rgba(0, 0, 255, 0.03);\n}\n\n.vc-scroll-arrow:active .vc-scroll-arrow-hit-box {\n    fill: rgba(0, 0, 255, 0.1);\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".correlation-chart-plot {\n    stroke: rgba(0, 0, 0, 0.3);\n    stroke-width: 1;\n}\n\n.correlation-chart-line {\n    fill: none;\n    stroke-width: 3;\n}\n\n.correlation-chart-normal-line {\n    fill: none;\n    stroke-width: 1;\n}\n\n.correlation-chart-plot.static {\n    fill: rgba(85, 141, 218, 1);\n}\n\n.correlation-chart-line.static {\n    stroke: rgba(85, 141, 218, 0.7);\n}\n\n.correlation-chart-normal-line.static {\n    stroke: rgba(85, 141, 218, 0.5);\n}\n\n.correlation-chart-plot.dynamic {\n    fill: rgba(255, 0, 0, 1);\n}\n\n.correlation-chart-line.dynamic {\n    stroke: rgba(255, 0, 0, 0.7);\n}\n\n.correlation-chart-normal-line.dynamic {\n    stroke: rgba(255, 0, 0, 0.7);\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-stacked-horizontal-bar-chart {\r\n    min-width: var(--vc-require-width);\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "\n.sunburst-chart .base-chart-title circle {\n    fill: rgb(245, 203, 153);\n    stroke: none;\n}\n\n.sunburst-chart-node-shape {\n    fill: white;\n    stroke-width: 2;\n    stroke: rgb(247, 205, 155);\n}\n\n.vc-sunburst-node-name {\n    font-size: 14px;\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, ".vc-tiny-circle-blank {\r\n    fill: rgb(168, 168, 168);\r\n    stroke-width: 2;\r\n    stroke: white;\r\n    fill-rule: evenodd;\r\n}\r\n\r\n.vc-chart.vc-tiny-circle-chart {\r\n    min-width: 250px;\r\n    min-height: 100px;\r\n    font-size: 1rem;\r\n}\r\n\r\n.vc-arc {\r\n    stroke: white;\r\n    stroke-width: 1;\r\n}", ""]);



/***/ }),

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

exports = module.exports = __webpack_require__(3645)(false);
// Module
exports.push([module.id, "\n.vchart-tooltip-container {\n    background-color: rgba(20, 20, 22, 1);\n    color: rgb(231, 230, 157);\n    position: absolute;\n    white-space: nowrap;\n    padding: 5px;\n    line-height: 1.5;\n    border-radius: 4px;\n    bottom: 0;\n    left: 0;\n}\n\n.vchart-tooltip-anchor {\n    position: fixed;\n    z-index: 9999999;\n    pointer-events: none;\n}\n", ""]);



/***/ }),

/***/ 3645:
/***/ ((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 + ' */';
}

/***/ }),

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

// Expose `IntlPolyfill` as global to add locale data into runtime later on.
__webpack_require__.g.IntlPolyfill = __webpack_require__(8659);

// Require all locale data for `Intl`. This module will be
// ignored when bundling for the browser with Browserify/Webpack.
__webpack_require__(2482);

// hack to export the polyfill as global Intl if needed
if (!__webpack_require__.g.Intl) {
    __webpack_require__.g.Intl = __webpack_require__.g.IntlPolyfill;
    __webpack_require__.g.IntlPolyfill.__applyLocaleSensitivePrototypes();
}

// providing an idiomatic api for the nodejs version of this module
module.exports = __webpack_require__.g.IntlPolyfill;


/***/ }),

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

"use strict";


var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
  return typeof obj;
} : function (obj) {
  return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj;
};

var jsx = function () {
  var REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7;
  return function createRawReactElement(type, props, key, children) {
    var defaultProps = type && type.defaultProps;
    var childrenLength = arguments.length - 3;

    if (!props && childrenLength !== 0) {
      props = {};
    }

    if (props && defaultProps) {
      for (var propName in defaultProps) {
        if (props[propName] === void 0) {
          props[propName] = defaultProps[propName];
        }
      }
    } else if (!props) {
      props = defaultProps || {};
    }

    if (childrenLength === 1) {
      props.children = children;
    } else if (childrenLength > 1) {
      var childArray = Array(childrenLength);

      for (var i = 0; i < childrenLength; i++) {
        childArray[i] = arguments[i + 3];
      }

      props.children = childArray;
    }

    return {
      $$typeof: REACT_ELEMENT_TYPE,
      type: type,
      key: key === undefined ? null : '' + key,
      ref: null,
      props: props,
      _owner: null
    };
  };
}();

var asyncToGenerator = function (fn) {
  return function () {
    var gen = fn.apply(this, arguments);
    return new Promise(function (resolve, reject) {
      function step(key, arg) {
        try {
          var info = gen[key](arg);
          var value = info.value;
        } catch (error) {
          reject(error);
          return;
        }

        if (info.done) {
          resolve(value);
        } else {
          return Promise.resolve(value).then(function (value) {
            return step("next", value);
          }, function (err) {
            return step("throw", err);
          });
        }
      }

      return step("next");
    });
  };
};

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

var createClass = 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);
    }
  }

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

var defineEnumerableProperties = function (obj, descs) {
  for (var key in descs) {
    var desc = descs[key];
    desc.configurable = desc.enumerable = true;
    if ("value" in desc) desc.writable = true;
    Object.defineProperty(obj, key, desc);
  }

  return obj;
};

var defaults = function (obj, defaults) {
  var keys = Object.getOwnPropertyNames(defaults);

  for (var i = 0; i < keys.length; i++) {
    var key = keys[i];
    var value = Object.getOwnPropertyDescriptor(defaults, key);

    if (value && value.configurable && obj[key] === undefined) {
      Object.defineProperty(obj, key, value);
    }
  }

  return obj;
};

var defineProperty$1 = function (obj, key, value) {
  if (key in obj) {
    Object.defineProperty(obj, key, {
      value: value,
      enumerable: true,
      configurable: true,
      writable: true
    });
  } else {
    obj[key] = value;
  }

  return obj;
};

var _extends = Object.assign || function (target) {
  for (var i = 1; i < arguments.length; i++) {
    var source = arguments[i];

    for (var key in source) {
      if (Object.prototype.hasOwnProperty.call(source, key)) {
        target[key] = source[key];
      }
    }
  }

  return target;
};

var get = function get(object, property, receiver) {
  if (object === null) object = Function.prototype;
  var desc = Object.getOwnPropertyDescriptor(object, property);

  if (desc === undefined) {
    var parent = Object.getPrototypeOf(object);

    if (parent === null) {
      return undefined;
    } else {
      return get(parent, property, receiver);
    }
  } else if ("value" in desc) {
    return desc.value;
  } else {
    var getter = desc.get;

    if (getter === undefined) {
      return undefined;
    }

    return getter.call(receiver);
  }
};

var inherits = function (subClass, superClass) {
  if (typeof superClass !== "function" && superClass !== null) {
    throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
  }

  subClass.prototype = Object.create(superClass && superClass.prototype, {
    constructor: {
      value: subClass,
      enumerable: false,
      writable: true,
      configurable: true
    }
  });
  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
};

var _instanceof = function (left, right) {
  if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
    return right[Symbol.hasInstance](left);
  } else {
    return left instanceof right;
  }
};

var interopRequireDefault = function (obj) {
  return obj && obj.__esModule ? obj : {
    default: obj
  };
};

var interopRequireWildcard = function (obj) {
  if (obj && obj.__esModule) {
    return obj;
  } else {
    var newObj = {};

    if (obj != null) {
      for (var key in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
      }
    }

    newObj.default = obj;
    return newObj;
  }
};

var newArrowCheck = function (innerThis, boundThis) {
  if (innerThis !== boundThis) {
    throw new TypeError("Cannot instantiate an arrow function");
  }
};

var objectDestructuringEmpty = function (obj) {
  if (obj == null) throw new TypeError("Cannot destructure undefined");
};

var objectWithoutProperties = function (obj, keys) {
  var target = {};

  for (var i in obj) {
    if (keys.indexOf(i) >= 0) continue;
    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;
    target[i] = obj[i];
  }

  return target;
};

var possibleConstructorReturn = function (self, call) {
  if (!self) {
    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
  }

  return call && (typeof call === "object" || typeof call === "function") ? call : self;
};

var selfGlobal = typeof __webpack_require__.g === "undefined" ? self : __webpack_require__.g;

var set = function set(object, property, value, receiver) {
  var desc = Object.getOwnPropertyDescriptor(object, property);

  if (desc === undefined) {
    var parent = Object.getPrototypeOf(object);

    if (parent !== null) {
      set(parent, property, value, receiver);
    }
  } else if ("value" in desc && desc.writable) {
    desc.value = value;
  } else {
    var setter = desc.set;

    if (setter !== undefined) {
      setter.call(receiver, value);
    }
  }

  return value;
};

var slicedToArray = function () {
  function sliceIterator(arr, i) {
    var _arr = [];
    var _n = true;
    var _d = false;
    var _e = undefined;

    try {
      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
        _arr.push(_s.value);

        if (i && _arr.length === i) break;
      }
    } catch (err) {
      _d = true;
      _e = err;
    } finally {
      try {
        if (!_n && _i["return"]) _i["return"]();
      } finally {
        if (_d) throw _e;
      }
    }

    return _arr;
  }

  return function (arr, i) {
    if (Array.isArray(arr)) {
      return arr;
    } else if (Symbol.iterator in Object(arr)) {
      return sliceIterator(arr, i);
    } else {
      throw new TypeError("Invalid attempt to destructure non-iterable instance");
    }
  };
}();

var slicedToArrayLoose = function (arr, i) {
  if (Array.isArray(arr)) {
    return arr;
  } else if (Symbol.iterator in Object(arr)) {
    var _arr = [];

    for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {
      _arr.push(_step.value);

      if (i && _arr.length === i) break;
    }

    return _arr;
  } else {
    throw new TypeError("Invalid attempt to destructure non-iterable instance");
  }
};

var taggedTemplateLiteral = function (strings, raw) {
  return Object.freeze(Object.defineProperties(strings, {
    raw: {
      value: Object.freeze(raw)
    }
  }));
};

var taggedTemplateLiteralLoose = function (strings, raw) {
  strings.raw = raw;
  return strings;
};

var temporalRef = function (val, name, undef) {
  if (val === undef) {
    throw new ReferenceError(name + " is not defined - temporal dead zone");
  } else {
    return val;
  }
};

var temporalUndefined = {};

var toArray = function (arr) {
  return Array.isArray(arr) ? arr : Array.from(arr);
};

var toConsumableArray = function (arr) {
  if (Array.isArray(arr)) {
    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];

    return arr2;
  } else {
    return Array.from(arr);
  }
};



var babelHelpers$1 = Object.freeze({
  jsx: jsx,
  asyncToGenerator: asyncToGenerator,
  classCallCheck: classCallCheck,
  createClass: createClass,
  defineEnumerableProperties: defineEnumerableProperties,
  defaults: defaults,
  defineProperty: defineProperty$1,
  get: get,
  inherits: inherits,
  interopRequireDefault: interopRequireDefault,
  interopRequireWildcard: interopRequireWildcard,
  newArrowCheck: newArrowCheck,
  objectDestructuringEmpty: objectDestructuringEmpty,
  objectWithoutProperties: objectWithoutProperties,
  possibleConstructorReturn: possibleConstructorReturn,
  selfGlobal: selfGlobal,
  set: set,
  slicedToArray: slicedToArray,
  slicedToArrayLoose: slicedToArrayLoose,
  taggedTemplateLiteral: taggedTemplateLiteral,
  taggedTemplateLiteralLoose: taggedTemplateLiteralLoose,
  temporalRef: temporalRef,
  temporalUndefined: temporalUndefined,
  toArray: toArray,
  toConsumableArray: toConsumableArray,
  typeof: _typeof,
  extends: _extends,
  instanceof: _instanceof
});

var realDefineProp = function () {
    var sentinel = function sentinel() {};
    try {
        Object.defineProperty(sentinel, 'a', {
            get: function get() {
                return 1;
            }
        });
        Object.defineProperty(sentinel, 'prototype', { writable: false });
        return sentinel.a === 1 && sentinel.prototype instanceof Object;
    } catch (e) {
        return false;
    }
}();

// Need a workaround for getters in ES3
var es3 = !realDefineProp && !Object.prototype.__defineGetter__;

// We use this a lot (and need it for proto-less objects)
var hop = Object.prototype.hasOwnProperty;

// Naive defineProperty for compatibility
var defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {
    if ('get' in desc && obj.__defineGetter__) obj.__defineGetter__(name, desc.get);else if (!hop.call(obj, name) || 'value' in desc) obj[name] = desc.value;
};

// Array.prototype.indexOf, as good as we need it to be
var arrIndexOf = Array.prototype.indexOf || function (search) {
    /*jshint validthis:true */
    var t = this;
    if (!t.length) return -1;

    for (var i = arguments[1] || 0, max = t.length; i < max; i++) {
        if (t[i] === search) return i;
    }

    return -1;
};

// Create an object with the specified prototype (2nd arg required for Record)
var objCreate = Object.create || function (proto, props) {
    var obj = void 0;

    function F() {}
    F.prototype = proto;
    obj = new F();

    for (var k in props) {
        if (hop.call(props, k)) defineProperty(obj, k, props[k]);
    }

    return obj;
};

// Snapshot some (hopefully still) native built-ins
var arrSlice = Array.prototype.slice;
var arrConcat = Array.prototype.concat;
var arrPush = Array.prototype.push;
var arrJoin = Array.prototype.join;
var arrShift = Array.prototype.shift;

// Naive Function.prototype.bind for compatibility
var fnBind = Function.prototype.bind || function (thisObj) {
    var fn = this,
        args = arrSlice.call(arguments, 1);

    // All our (presently) bound functions have either 1 or 0 arguments. By returning
    // different function signatures, we can pass some tests in ES3 environments
    if (fn.length === 1) {
        return function () {
            return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));
        };
    }
    return function () {
        return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));
    };
};

// Object housing internal properties for constructors
var internals = objCreate(null);

// Keep internal properties internal
var secret = Math.random();

// Helper functions
// ================

/**
 * A function to deal with the inaccuracy of calculating log10 in pre-ES6
 * JavaScript environments. Math.log(num) / Math.LN10 was responsible for
 * causing issue #62.
 */
function log10Floor(n) {
    // ES6 provides the more accurate Math.log10
    if (typeof Math.log10 === 'function') return Math.floor(Math.log10(n));

    var x = Math.round(Math.log(n) * Math.LOG10E);
    return x - (Number('1e' + x) > n);
}

/**
 * A map that doesn't contain Object in its prototype chain
 */
function Record(obj) {
    // Copy only own properties over unless this object is already a Record instance
    for (var k in obj) {
        if (obj instanceof Record || hop.call(obj, k)) defineProperty(this, k, { value: obj[k], enumerable: true, writable: true, configurable: true });
    }
}
Record.prototype = objCreate(null);

/**
 * An ordered list
 */
function List() {
    defineProperty(this, 'length', { writable: true, value: 0 });

    if (arguments.length) arrPush.apply(this, arrSlice.call(arguments));
}
List.prototype = objCreate(null);

/**
 * Constructs a regular expression to restore tainted RegExp properties
 */
function createRegExpRestore() {
    if (internals.disableRegExpRestore) {
        return function () {/* no-op */};
    }

    var regExpCache = {
        lastMatch: RegExp.lastMatch || '',
        leftContext: RegExp.leftContext,
        multiline: RegExp.multiline,
        input: RegExp.input
    },
        has = false;

    // Create a snapshot of all the 'captured' properties
    for (var i = 1; i <= 9; i++) {
        has = (regExpCache['$' + i] = RegExp['$' + i]) || has;
    }return function () {
        // Now we've snapshotted some properties, escape the lastMatch string
        var esc = /[.?*+^$[\]\\(){}|-]/g,
            lm = regExpCache.lastMatch.replace(esc, '\\$&'),
            reg = new List();

        // If any of the captured strings were non-empty, iterate over them all
        if (has) {
            for (var _i = 1; _i <= 9; _i++) {
                var m = regExpCache['$' + _i];

                // If it's empty, add an empty capturing group
                if (!m) lm = '()' + lm;

                // Else find the string in lm and escape & wrap it to capture it
                else {
                        m = m.replace(esc, '\\$&');
                        lm = lm.replace(m, '(' + m + ')');
                    }

                // Push it to the reg and chop lm to make sure further groups come after
                arrPush.call(reg, lm.slice(0, lm.indexOf('(') + 1));
                lm = lm.slice(lm.indexOf('(') + 1);
            }
        }

        var exprStr = arrJoin.call(reg, '') + lm;

        // Shorten the regex by replacing each part of the expression with a match
        // for a string of that exact length.  This is safe for the type of
        // expressions generated above, because the expression matches the whole
        // match string, so we know each group and each segment between capturing
        // groups can be matched by its length alone.
        exprStr = exprStr.replace(/(\\\(|\\\)|[^()])+/g, function (match) {
            return '[\\s\\S]{' + match.replace('\\', '').length + '}';
        });

        // Create the regular expression that will reconstruct the RegExp properties
        var expr = new RegExp(exprStr, regExpCache.multiline ? 'gm' : 'g');

        // Set the lastIndex of the generated expression to ensure that the match
        // is found in the correct index.
        expr.lastIndex = regExpCache.leftContext.length;

        expr.exec(regExpCache.input);
    };
}

/**
 * Mimics ES5's abstract ToObject() function
 */
function toObject(arg) {
    if (arg === null) throw new TypeError('Cannot convert null or undefined to object');

    if ((typeof arg === 'undefined' ? 'undefined' : babelHelpers$1['typeof'](arg)) === 'object') return arg;
    return Object(arg);
}

function toNumber(arg) {
    if (typeof arg === 'number') return arg;
    return Number(arg);
}

function toInteger(arg) {
    var number = toNumber(arg);
    if (isNaN(number)) return 0;
    if (number === +0 || number === -0 || number === +Infinity || number === -Infinity) return number;
    if (number < 0) return Math.floor(Math.abs(number)) * -1;
    return Math.floor(Math.abs(number));
}

function toLength(arg) {
    var len = toInteger(arg);
    if (len <= 0) return 0;
    if (len === Infinity) return Math.pow(2, 53) - 1;
    return Math.min(len, Math.pow(2, 53) - 1);
}

/**
 * Returns "internal" properties for an object
 */
function getInternalProperties(obj) {
    if (hop.call(obj, '__getInternalProperties')) return obj.__getInternalProperties(secret);

    return objCreate(null);
}

/**
* Defines regular expressions for various operations related to the BCP 47 syntax,
* as defined at http://tools.ietf.org/html/bcp47#section-2.1
*/

// extlang       = 3ALPHA              ; selected ISO 639 codes
//                 *2("-" 3ALPHA)      ; permanently reserved
var extlang = '[a-z]{3}(?:-[a-z]{3}){0,2}';

// language      = 2*3ALPHA            ; shortest ISO 639 code
//                 ["-" extlang]       ; sometimes followed by
//                                     ; extended language subtags
//               / 4ALPHA              ; or reserved for future use
//               / 5*8ALPHA            ; or registered language subtag
var language = '(?:[a-z]{2,3}(?:-' + extlang + ')?|[a-z]{4}|[a-z]{5,8})';

// script        = 4ALPHA              ; ISO 15924 code
var script = '[a-z]{4}';

// region        = 2ALPHA              ; ISO 3166-1 code
//               / 3DIGIT              ; UN M.49 code
var region = '(?:[a-z]{2}|\\d{3})';

// variant       = 5*8alphanum         ; registered variants
//               / (DIGIT 3alphanum)
var variant = '(?:[a-z0-9]{5,8}|\\d[a-z0-9]{3})';

//                                     ; Single alphanumerics
//                                     ; "x" reserved for private use
// singleton     = DIGIT               ; 0 - 9
//               / %x41-57             ; A - W
//               / %x59-5A             ; Y - Z
//               / %x61-77             ; a - w
//               / %x79-7A             ; y - z
var singleton = '[0-9a-wy-z]';

// extension     = singleton 1*("-" (2*8alphanum))
var extension = singleton + '(?:-[a-z0-9]{2,8})+';

// privateuse    = "x" 1*("-" (1*8alphanum))
var privateuse = 'x(?:-[a-z0-9]{1,8})+';

// irregular     = "en-GB-oed"         ; irregular tags do not match
//               / "i-ami"             ; the 'langtag' production and
//               / "i-bnn"             ; would not otherwise be
//               / "i-default"         ; considered 'well-formed'
//               / "i-enochian"        ; These tags are all valid,
//               / "i-hak"             ; but most are deprecated
//               / "i-klingon"         ; in favor of more modern
//               / "i-lux"             ; subtags or subtag
//               / "i-mingo"           ; combination
//               / "i-navajo"
//               / "i-pwn"
//               / "i-tao"
//               / "i-tay"
//               / "i-tsu"
//               / "sgn-BE-FR"
//               / "sgn-BE-NL"
//               / "sgn-CH-DE"
var irregular = '(?:en-GB-oed' + '|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)' + '|sgn-(?:BE-FR|BE-NL|CH-DE))';

// regular       = "art-lojban"        ; these tags match the 'langtag'
//               / "cel-gaulish"       ; production, but their subtags
//               / "no-bok"            ; are not extended language
//               / "no-nyn"            ; or variant subtags: their meaning
//               / "zh-guoyu"          ; is defined by their registration
//               / "zh-hakka"          ; and all of these are deprecated
//               / "zh-min"            ; in favor of a more modern
//               / "zh-min-nan"        ; subtag or sequence of subtags
//               / "zh-xiang"
var regular = '(?:art-lojban|cel-gaulish|no-bok|no-nyn' + '|zh-(?:guoyu|hakka|min|min-nan|xiang))';

// grandfathered = irregular           ; non-redundant tags registered
//               / regular             ; during the RFC 3066 era
var grandfathered = '(?:' + irregular + '|' + regular + ')';

// langtag       = language
//                 ["-" script]
//                 ["-" region]
//                 *("-" variant)
//                 *("-" extension)
//                 ["-" privateuse]
var langtag = language + '(?:-' + script + ')?(?:-' + region + ')?(?:-' + variant + ')*(?:-' + extension + ')*(?:-' + privateuse + ')?';

// Language-Tag  = langtag             ; normal language tags
//               / privateuse          ; private use tag
//               / grandfathered       ; grandfathered tags
var expBCP47Syntax = RegExp('^(?:' + langtag + '|' + privateuse + '|' + grandfathered + ')$', 'i');

// Match duplicate variants in a language tag
var expVariantDupes = RegExp('^(?!x).*?-(' + variant + ')-(?:\\w{4,8}-(?!x-))*\\1\\b', 'i');

// Match duplicate singletons in a language tag (except in private use)
var expSingletonDupes = RegExp('^(?!x).*?-(' + singleton + ')-(?:\\w+-(?!x-))*\\1\\b', 'i');

// Match all extension sequences
var expExtSequences = RegExp('-' + extension, 'ig');

// Default locale is the first-added locale data for us
var defaultLocale = void 0;
function setDefaultLocale(locale) {
    defaultLocale = locale;
}

// IANA Subtag Registry redundant tag and subtag maps
var redundantTags = {
    tags: {
        "art-lojban": "jbo",
        "i-ami": "ami",
        "i-bnn": "bnn",
        "i-hak": "hak",
        "i-klingon": "tlh",
        "i-lux": "lb",
        "i-navajo": "nv",
        "i-pwn": "pwn",
        "i-tao": "tao",
        "i-tay": "tay",
        "i-tsu": "tsu",
        "no-bok": "nb",
        "no-nyn": "nn",
        "sgn-BE-FR": "sfb",
        "sgn-BE-NL": "vgt",
        "sgn-CH-DE": "sgg",
        "zh-guoyu": "cmn",
        "zh-hakka": "hak",
        "zh-min-nan": "nan",
        "zh-xiang": "hsn",
        "sgn-BR": "bzs",
        "sgn-CO": "csn",
        "sgn-DE": "gsg",
        "sgn-DK": "dsl",
        "sgn-ES": "ssp",
        "sgn-FR": "fsl",
        "sgn-GB": "bfi",
        "sgn-GR": "gss",
        "sgn-IE": "isg",
        "sgn-IT": "ise",
        "sgn-JP": "jsl",
        "sgn-MX": "mfs",
        "sgn-NI": "ncs",
        "sgn-NL": "dse",
        "sgn-NO": "nsl",
        "sgn-PT": "psr",
        "sgn-SE": "swl",
        "sgn-US": "ase",
        "sgn-ZA": "sfs",
        "zh-cmn": "cmn",
        "zh-cmn-Hans": "cmn-Hans",
        "zh-cmn-Hant": "cmn-Hant",
        "zh-gan": "gan",
        "zh-wuu": "wuu",
        "zh-yue": "yue"
    },
    subtags: {
        BU: "MM",
        DD: "DE",
        FX: "FR",
        TP: "TL",
        YD: "YE",
        ZR: "CD",
        heploc: "alalc97",
        'in': "id",
        iw: "he",
        ji: "yi",
        jw: "jv",
        mo: "ro",
        ayx: "nun",
        bjd: "drl",
        ccq: "rki",
        cjr: "mom",
        cka: "cmr",
        cmk: "xch",
        drh: "khk",
        drw: "prs",
        gav: "dev",
        hrr: "jal",
        ibi: "opa",
        kgh: "kml",
        lcq: "ppr",
        mst: "mry",
        myt: "mry",
        sca: "hle",
        tie: "ras",
        tkk: "twm",
        tlw: "weo",
        tnf: "prs",
        ybd: "rki",
        yma: "lrr"
    },
    extLang: {
        aao: ["aao", "ar"],
        abh: ["abh", "ar"],
        abv: ["abv", "ar"],
        acm: ["acm", "ar"],
        acq: ["acq", "ar"],
        acw: ["acw", "ar"],
        acx: ["acx", "ar"],
        acy: ["acy", "ar"],
        adf: ["adf", "ar"],
        ads: ["ads", "sgn"],
        aeb: ["aeb", "ar"],
        aec: ["aec", "ar"],
        aed: ["aed", "sgn"],
        aen: ["aen", "sgn"],
        afb: ["afb", "ar"],
        afg: ["afg", "sgn"],
        ajp: ["ajp", "ar"],
        apc: ["apc", "ar"],
        apd: ["apd", "ar"],
        arb: ["arb", "ar"],
        arq: ["arq", "ar"],
        ars: ["ars", "ar"],
        ary: ["ary", "ar"],
        arz: ["arz", "ar"],
        ase: ["ase", "sgn"],
        asf: ["asf", "sgn"],
        asp: ["asp", "sgn"],
        asq: ["asq", "sgn"],
        asw: ["asw", "sgn"],
        auz: ["auz", "ar"],
        avl: ["avl", "ar"],
        ayh: ["ayh", "ar"],
        ayl: ["ayl", "ar"],
        ayn: ["ayn", "ar"],
        ayp: ["ayp", "ar"],
        bbz: ["bbz", "ar"],
        bfi: ["bfi", "sgn"],
        bfk: ["bfk", "sgn"],
        bjn: ["bjn", "ms"],
        bog: ["bog", "sgn"],
        bqn: ["bqn", "sgn"],
        bqy: ["bqy", "sgn"],
        btj: ["btj", "ms"],
        bve: ["bve", "ms"],
        bvl: ["bvl", "sgn"],
        bvu: ["bvu", "ms"],
        bzs: ["bzs", "sgn"],
        cdo: ["cdo", "zh"],
        cds: ["cds", "sgn"],
        cjy: ["cjy", "zh"],
        cmn: ["cmn", "zh"],
        coa: ["coa", "ms"],
        cpx: ["cpx", "zh"],
        csc: ["csc", "sgn"],
        csd: ["csd", "sgn"],
        cse: ["cse", "sgn"],
        csf: ["csf", "sgn"],
        csg: ["csg", "sgn"],
        csl: ["csl", "sgn"],
        csn: ["csn", "sgn"],
        csq: ["csq", "sgn"],
        csr: ["csr", "sgn"],
        czh: ["czh", "zh"],
        czo: ["czo", "zh"],
        doq: ["doq", "sgn"],
        dse: ["dse", "sgn"],
        dsl: ["dsl", "sgn"],
        dup: ["dup", "ms"],
        ecs: ["ecs", "sgn"],
        esl: ["esl", "sgn"],
        esn: ["esn", "sgn"],
        eso: ["eso", "sgn"],
        eth: ["eth", "sgn"],
        fcs: ["fcs", "sgn"],
        fse: ["fse", "sgn"],
        fsl: ["fsl", "sgn"],
        fss: ["fss", "sgn"],
        gan: ["gan", "zh"],
        gds: ["gds", "sgn"],
        gom: ["gom", "kok"],
        gse: ["gse", "sgn"],
        gsg: ["gsg", "sgn"],
        gsm: ["gsm", "sgn"],
        gss: ["gss", "sgn"],
        gus: ["gus", "sgn"],
        hab: ["hab", "sgn"],
        haf: ["haf", "sgn"],
        hak: ["hak", "zh"],
        hds: ["hds", "sgn"],
        hji: ["hji", "ms"],
        hks: ["hks", "sgn"],
        hos: ["hos", "sgn"],
        hps: ["hps", "sgn"],
        hsh: ["hsh", "sgn"],
        hsl: ["hsl", "sgn"],
        hsn: ["hsn", "zh"],
        icl: ["icl", "sgn"],
        ils: ["ils", "sgn"],
        inl: ["inl", "sgn"],
        ins: ["ins", "sgn"],
        ise: ["ise", "sgn"],
        isg: ["isg", "sgn"],
        isr: ["isr", "sgn"],
        jak: ["jak", "ms"],
        jax: ["jax", "ms"],
        jcs: ["jcs", "sgn"],
        jhs: ["jhs", "sgn"],
        jls: ["jls", "sgn"],
        jos: ["jos", "sgn"],
        jsl: ["jsl", "sgn"],
        jus: ["jus", "sgn"],
        kgi: ["kgi", "sgn"],
        knn: ["knn", "kok"],
        kvb: ["kvb", "ms"],
        kvk: ["kvk", "sgn"],
        kvr: ["kvr", "ms"],
        kxd: ["kxd", "ms"],
        lbs: ["lbs", "sgn"],
        lce: ["lce", "ms"],
        lcf: ["lcf", "ms"],
        liw: ["liw", "ms"],
        lls: ["lls", "sgn"],
        lsg: ["lsg", "sgn"],
        lsl: ["lsl", "sgn"],
        lso: ["lso", "sgn"],
        lsp: ["lsp", "sgn"],
        lst: ["lst", "sgn"],
        lsy: ["lsy", "sgn"],
        ltg: ["ltg", "lv"],
        lvs: ["lvs", "lv"],
        lzh: ["lzh", "zh"],
        max: ["max", "ms"],
        mdl: ["mdl", "sgn"],
        meo: ["meo", "ms"],
        mfa: ["mfa", "ms"],
        mfb: ["mfb", "ms"],
        mfs: ["mfs", "sgn"],
        min: ["min", "ms"],
        mnp: ["mnp", "zh"],
        mqg: ["mqg", "ms"],
        mre: ["mre", "sgn"],
        msd: ["msd", "sgn"],
        msi: ["msi", "ms"],
        msr: ["msr", "sgn"],
        mui: ["mui", "ms"],
        mzc: ["mzc", "sgn"],
        mzg: ["mzg", "sgn"],
        mzy: ["mzy", "sgn"],
        nan: ["nan", "zh"],
        nbs: ["nbs", "sgn"],
        ncs: ["ncs", "sgn"],
        nsi: ["nsi", "sgn"],
        nsl: ["nsl", "sgn"],
        nsp: ["nsp", "sgn"],
        nsr: ["nsr", "sgn"],
        nzs: ["nzs", "sgn"],
        okl: ["okl", "sgn"],
        orn: ["orn", "ms"],
        ors: ["ors", "ms"],
        pel: ["pel", "ms"],
        pga: ["pga", "ar"],
        pks: ["pks", "sgn"],
        prl: ["prl", "sgn"],
        prz: ["prz", "sgn"],
        psc: ["psc", "sgn"],
        psd: ["psd", "sgn"],
        pse: ["pse", "ms"],
        psg: ["psg", "sgn"],
        psl: ["psl", "sgn"],
        pso: ["pso", "sgn"],
        psp: ["psp", "sgn"],
        psr: ["psr", "sgn"],
        pys: ["pys", "sgn"],
        rms: ["rms", "sgn"],
        rsi: ["rsi", "sgn"],
        rsl: ["rsl", "sgn"],
        sdl: ["sdl", "sgn"],
        sfb: ["sfb", "sgn"],
        sfs: ["sfs", "sgn"],
        sgg: ["sgg", "sgn"],
        sgx: ["sgx", "sgn"],
        shu: ["shu", "ar"],
        slf: ["slf", "sgn"],
        sls: ["sls", "sgn"],
        sqk: ["sqk", "sgn"],
        sqs: ["sqs", "sgn"],
        ssh: ["ssh", "ar"],
        ssp: ["ssp", "sgn"],
        ssr: ["ssr", "sgn"],
        svk: ["svk", "sgn"],
        swc: ["swc", "sw"],
        swh: ["swh", "sw"],
        swl: ["swl", "sgn"],
        syy: ["syy", "sgn"],
        tmw: ["tmw", "ms"],
        tse: ["tse", "sgn"],
        tsm: ["tsm", "sgn"],
        tsq: ["tsq", "sgn"],
        tss: ["tss", "sgn"],
        tsy: ["tsy", "sgn"],
        tza: ["tza", "sgn"],
        ugn: ["ugn", "sgn"],
        ugy: ["ugy", "sgn"],
        ukl: ["ukl", "sgn"],
        uks: ["uks", "sgn"],
        urk: ["urk", "ms"],
        uzn: ["uzn", "uz"],
        uzs: ["uzs", "uz"],
        vgt: ["vgt", "sgn"],
        vkk: ["vkk", "ms"],
        vkt: ["vkt", "ms"],
        vsi: ["vsi", "sgn"],
        vsl: ["vsl", "sgn"],
        vsv: ["vsv", "sgn"],
        wuu: ["wuu", "zh"],
        xki: ["xki", "sgn"],
        xml: ["xml", "sgn"],
        xmm: ["xmm", "ms"],
        xms: ["xms", "sgn"],
        yds: ["yds", "sgn"],
        ysl: ["ysl", "sgn"],
        yue: ["yue", "zh"],
        zib: ["zib", "sgn"],
        zlm: ["zlm", "ms"],
        zmi: ["zmi", "ms"],
        zsl: ["zsl", "sgn"],
        zsm: ["zsm", "ms"]
    }
};

/**
 * Convert only a-z to uppercase as per section 6.1 of the spec
 */
function toLatinUpperCase(str) {
    var i = str.length;

    while (i--) {
        var ch = str.charAt(i);

        if (ch >= "a" && ch <= "z") str = str.slice(0, i) + ch.toUpperCase() + str.slice(i + 1);
    }

    return str;
}

/**
 * The IsStructurallyValidLanguageTag abstract operation verifies that the locale
 * argument (which must be a String value)
 *
 * - represents a well-formed BCP 47 language tag as specified in RFC 5646 section
 *   2.1, or successor,
 * - does not include duplicate variant subtags, and
 * - does not include duplicate singleton subtags.
 *
 * The abstract operation returns true if locale can be generated from the ABNF
 * grammar in section 2.1 of the RFC, starting with Language-Tag, and does not
 * contain duplicate variant or singleton subtags (other than as a private use
 * subtag). It returns false otherwise. Terminal value characters in the grammar are
 * interpreted as the Unicode equivalents of the ASCII octet values given.
 */
function /* 6.2.2 */IsStructurallyValidLanguageTag(locale) {
    // represents a well-formed BCP 47 language tag as specified in RFC 5646
    if (!expBCP47Syntax.test(locale)) return false;

    // does not include duplicate variant subtags, and
    if (expVariantDupes.test(locale)) return false;

    // does not include duplicate singleton subtags.
    if (expSingletonDupes.test(locale)) return false;

    return true;
}

/**
 * The CanonicalizeLanguageTag abstract operation returns the canonical and case-
 * regularized form of the locale argument (which must be a String value that is
 * a structurally valid BCP 47 language tag as verified by the
 * IsStructurallyValidLanguageTag abstract operation). It takes the steps
 * specified in RFC 5646 section 4.5, or successor, to bring the language tag
 * into canonical form, and to regularize the case of the subtags, but does not
 * take the steps to bring a language tag into “extlang form” and to reorder
 * variant subtags.

 * The specifications for extensions to BCP 47 language tags, such as RFC 6067,
 * may include canonicalization rules for the extension subtag sequences they
 * define that go beyond the canonicalization rules of RFC 5646 section 4.5.
 * Implementations are allowed, but not required, to apply these additional rules.
 */
function /* 6.2.3 */CanonicalizeLanguageTag(locale) {
    var match = void 0,
        parts = void 0;

    // A language tag is in 'canonical form' when the tag is well-formed
    // according to the rules in Sections 2.1 and 2.2

    // Section 2.1 says all subtags use lowercase...
    locale = locale.toLowerCase();

    // ...with 2 exceptions: 'two-letter and four-letter subtags that neither
    // appear at the start of the tag nor occur after singletons.  Such two-letter
    // subtags are all uppercase (as in the tags "en-CA-x-ca" or "sgn-BE-FR") and
    // four-letter subtags are titlecase (as in the tag "az-Latn-x-latn").
    parts = locale.split('-');
    for (var i = 1, max = parts.length; i < max; i++) {
        // Two-letter subtags are all uppercase
        if (parts[i].length === 2) parts[i] = parts[i].toUpperCase();

        // Four-letter subtags are titlecase
        else if (parts[i].length === 4) parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1);

            // Is it a singleton?
            else if (parts[i].length === 1 && parts[i] !== 'x') break;
    }
    locale = arrJoin.call(parts, '-');

    // The steps laid out in RFC 5646 section 4.5 are as follows:

    // 1.  Extension sequences are ordered into case-insensitive ASCII order
    //     by singleton subtag.
    if ((match = locale.match(expExtSequences)) && match.length > 1) {
        // The built-in sort() sorts by ASCII order, so use that
        match.sort();

        // Replace all extensions with the joined, sorted array
        locale = locale.replace(RegExp('(?:' + expExtSequences.source + ')+', 'i'), arrJoin.call(match, ''));
    }

    // 2.  Redundant or grandfathered tags are replaced by their 'Preferred-
    //     Value', if there is one.
    if (hop.call(redundantTags.tags, locale)) locale = redundantTags.tags[locale];

    // 3.  Subtags are replaced by their 'Preferred-Value', if there is one.
    //     For extlangs, the original primary language subtag is also
    //     replaced if there is a primary language subtag in the 'Preferred-
    //     Value'.
    parts = locale.split('-');

    for (var _i = 1, _max = parts.length; _i < _max; _i++) {
        if (hop.call(redundantTags.subtags, parts[_i])) parts[_i] = redundantTags.subtags[parts[_i]];else if (hop.call(redundantTags.extLang, parts[_i])) {
            parts[_i] = redundantTags.extLang[parts[_i]][0];

            // For extlang tags, the prefix needs to be removed if it is redundant
            if (_i === 1 && redundantTags.extLang[parts[1]][1] === parts[0]) {
                parts = arrSlice.call(parts, _i++);
                _max -= 1;
            }
        }
    }

    return arrJoin.call(parts, '-');
}

/**
 * The DefaultLocale abstract operation returns a String value representing the
 * structurally valid (6.2.2) and canonicalized (6.2.3) BCP 47 language tag for the
 * host environment’s current locale.
 */
function /* 6.2.4 */DefaultLocale() {
    return defaultLocale;
}

// Sect 6.3 Currency Codes
// =======================

var expCurrencyCode = /^[A-Z]{3}$/;

/**
 * The IsWellFormedCurrencyCode abstract operation verifies that the currency argument
 * (after conversion to a String value) represents a well-formed 3-letter ISO currency
 * code. The following steps are taken:
 */
function /* 6.3.1 */IsWellFormedCurrencyCode(currency) {
    // 1. Let `c` be ToString(currency)
    var c = String(currency);

    // 2. Let `normalized` be the result of mapping c to upper case as described
    //    in 6.1.
    var normalized = toLatinUpperCase(c);

    // 3. If the string length of normalized is not 3, return false.
    // 4. If normalized contains any character that is not in the range "A" to "Z"
    //    (U+0041 to U+005A), return false.
    if (expCurrencyCode.test(normalized) === false) return false;

    // 5. Return true
    return true;
}

var expUnicodeExSeq = /-u(?:-[0-9a-z]{2,8})+/gi; // See `extension` below

function /* 9.2.1 */CanonicalizeLocaleList(locales) {
    // The abstract operation CanonicalizeLocaleList takes the following steps:

    // 1. If locales is undefined, then a. Return a new empty List
    if (locales === undefined) return new List();

    // 2. Let seen be a new empty List.
    var seen = new List();

    // 3. If locales is a String value, then
    //    a. Let locales be a new array created as if by the expression new
    //    Array(locales) where Array is the standard built-in constructor with
    //    that name and locales is the value of locales.
    locales = typeof locales === 'string' ? [locales] : locales;

    // 4. Let O be ToObject(locales).
    var O = toObject(locales);

    // 5. Let lenValue be the result of calling the [[Get]] internal method of
    //    O with the argument "length".
    // 6. Let len be ToUint32(lenValue).
    var len = toLength(O.length);

    // 7. Let k be 0.
    var k = 0;

    // 8. Repeat, while k < len
    while (k < len) {
        // a. Let Pk be ToString(k).
        var Pk = String(k);

        // b. Let kPresent be the result of calling the [[HasProperty]] internal
        //    method of O with argument Pk.
        var kPresent = Pk in O;

        // c. If kPresent is true, then
        if (kPresent) {
            // i. Let kValue be the result of calling the [[Get]] internal
            //     method of O with argument Pk.
            var kValue = O[Pk];

            // ii. If the type of kValue is not String or Object, then throw a
            //     TypeError exception.
            if (kValue === null || typeof kValue !== 'string' && (typeof kValue === "undefined" ? "undefined" : babelHelpers$1["typeof"](kValue)) !== 'object') throw new TypeError('String or Object type expected');

            // iii. Let tag be ToString(kValue).
            var tag = String(kValue);

            // iv. If the result of calling the abstract operation
            //     IsStructurallyValidLanguageTag (defined in 6.2.2), passing tag as
            //     the argument, is false, then throw a RangeError exception.
            if (!IsStructurallyValidLanguageTag(tag)) throw new RangeError("'" + tag + "' is not a structurally valid language tag");

            // v. Let tag be the result of calling the abstract operation
            //    CanonicalizeLanguageTag (defined in 6.2.3), passing tag as the
            //    argument.
            tag = CanonicalizeLanguageTag(tag);

            // vi. If tag is not an element of seen, then append tag as the last
            //     element of seen.
            if (arrIndexOf.call(seen, tag) === -1) arrPush.call(seen, tag);
        }

        // d. Increase k by 1.
        k++;
    }

    // 9. Return seen.
    return seen;
}

/**
 * The BestAvailableLocale abstract operation compares the provided argument
 * locale, which must be a String value with a structurally valid and
 * canonicalized BCP 47 language tag, against the locales in availableLocales and
 * returns either the longest non-empty prefix of locale that is an element of
 * availableLocales, or undefined if there is no such element. It uses the
 * fallback mechanism of RFC 4647, section 3.4. The following steps are taken:
 */
function /* 9.2.2 */BestAvailableLocale(availableLocales, locale) {
    // 1. Let candidate be locale
    var candidate = locale;

    // 2. Repeat
    while (candidate) {
        // a. If availableLocales contains an element equal to candidate, then return
        // candidate.
        if (arrIndexOf.call(availableLocales, candidate) > -1) return candidate;

        // b. Let pos be the character index of the last occurrence of "-"
        // (U+002D) within candidate. If that character does not occur, return
        // undefined.
        var pos = candidate.lastIndexOf('-');

        if (pos < 0) return;

        // c. If pos ≥ 2 and the character "-" occurs at index pos-2 of candidate,
        //    then decrease pos by 2.
        if (pos >= 2 && candidate.charAt(pos - 2) === '-') pos -= 2;

        // d. Let candidate be the substring of candidate from position 0, inclusive,
        //    to position pos, exclusive.
        candidate = candidate.substring(0, pos);
    }
}

/**
 * The LookupMatcher abstract operation compares requestedLocales, which must be
 * a List as returned by CanonicalizeLocaleList, against the locales in
 * availableLocales and determines the best available language to meet the
 * request. The following steps are taken:
 */
function /* 9.2.3 */LookupMatcher(availableLocales, requestedLocales) {
    // 1. Let i be 0.
    var i = 0;

    // 2. Let len be the number of elements in requestedLocales.
    var len = requestedLocales.length;

    // 3. Let availableLocale be undefined.
    var availableLocale = void 0;

    var locale = void 0,
        noExtensionsLocale = void 0;

    // 4. Repeat while i < len and availableLocale is undefined:
    while (i < len && !availableLocale) {
        // a. Let locale be the element of requestedLocales at 0-origined list
        //    position i.
        locale = requestedLocales[i];

        // b. Let noExtensionsLocale be the String value that is locale with all
        //    Unicode locale extension sequences removed.
        noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');

        // c. Let availableLocale be the result of calling the
        //    BestAvailableLocale abstract operation (defined in 9.2.2) with
        //    arguments availableLocales and noExtensionsLocale.
        availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);

        // d. Increase i by 1.
        i++;
    }

    // 5. Let result be a new Record.
    var result = new Record();

    // 6. If availableLocale is not undefined, then
    if (availableLocale !== undefined) {
        // a. Set result.[[locale]] to availableLocale.
        result['[[locale]]'] = availableLocale;

        // b. If locale and noExtensionsLocale are not the same String value, then
        if (String(locale) !== String(noExtensionsLocale)) {
            // i. Let extension be the String value consisting of the first
            //    substring of locale that is a Unicode locale extension sequence.
            var extension = locale.match(expUnicodeExSeq)[0];

            // ii. Let extensionIndex be the character position of the initial
            //     "-" of the first Unicode locale extension sequence within locale.
            var extensionIndex = locale.indexOf('-u-');

            // iii. Set result.[[extension]] to extension.
            result['[[extension]]'] = extension;

            // iv. Set result.[[extensionIndex]] to extensionIndex.
            result['[[extensionIndex]]'] = extensionIndex;
        }
    }
    // 7. Else
    else
        // a. Set result.[[locale]] to the value returned by the DefaultLocale abstract
        //    operation (defined in 6.2.4).
        result['[[locale]]'] = DefaultLocale();

    // 8. Return result
    return result;
}

/**
 * The BestFitMatcher abstract operation compares requestedLocales, which must be
 * a List as returned by CanonicalizeLocaleList, against the locales in
 * availableLocales and determines the best available language to meet the
 * request. The algorithm is implementation dependent, but should produce results
 * that a typical user of the requested locales would perceive as at least as
 * good as those produced by the LookupMatcher abstract operation. Options
 * specified through Unicode locale extension sequences must be ignored by the
 * algorithm. Information about such subsequences is returned separately.
 * The abstract operation returns a record with a [[locale]] field, whose value
 * is the language tag of the selected locale, which must be an element of
 * availableLocales. If the language tag of the request locale that led to the
 * selected locale contained a Unicode locale extension sequence, then the
 * returned record also contains an [[extension]] field whose value is the first
 * Unicode locale extension sequence, and an [[extensionIndex]] field whose value
 * is the index of the first Unicode locale extension sequence within the request
 * locale language tag.
 */
function /* 9.2.4 */BestFitMatcher(availableLocales, requestedLocales) {
    return LookupMatcher(availableLocales, requestedLocales);
}

/**
 * The ResolveLocale abstract operation compares a BCP 47 language priority list
 * requestedLocales against the locales in availableLocales and determines the
 * best available language to meet the request. availableLocales and
 * requestedLocales must be provided as List values, options as a Record.
 */
function /* 9.2.5 */ResolveLocale(availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {
    if (availableLocales.length === 0) {
        throw new ReferenceError('No locale data has been provided for this object yet.');
    }

    // The following steps are taken:
    // 1. Let matcher be the value of options.[[localeMatcher]].
    var matcher = options['[[localeMatcher]]'];

    var r = void 0;

    // 2. If matcher is "lookup", then
    if (matcher === 'lookup')
        // a. Let r be the result of calling the LookupMatcher abstract operation
        //    (defined in 9.2.3) with arguments availableLocales and
        //    requestedLocales.
        r = LookupMatcher(availableLocales, requestedLocales);

        // 3. Else
    else
        // a. Let r be the result of calling the BestFitMatcher abstract
        //    operation (defined in 9.2.4) with arguments availableLocales and
        //    requestedLocales.
        r = BestFitMatcher(availableLocales, requestedLocales);

    // 4. Let foundLocale be the value of r.[[locale]].
    var foundLocale = r['[[locale]]'];

    var extensionSubtags = void 0,
        extensionSubtagsLength = void 0;

    // 5. If r has an [[extension]] field, then
    if (hop.call(r, '[[extension]]')) {
        // a. Let extension be the value of r.[[extension]].
        var extension = r['[[extension]]'];
        // b. Let split be the standard built-in function object defined in ES5,
        //    15.5.4.14.
        var split = String.prototype.split;
        // c. Let extensionSubtags be the result of calling the [[Call]] internal
        //    method of split with extension as the this value and an argument
        //    list containing the single item "-".
        extensionSubtags = split.call(extension, '-');
        // d. Let extensionSubtagsLength be the result of calling the [[Get]]
        //    internal method of extensionSubtags with argument "length".
        extensionSubtagsLength = extensionSubtags.length;
    }

    // 6. Let result be a new Record.
    var result = new Record();

    // 7. Set result.[[dataLocale]] to foundLocale.
    result['[[dataLocale]]'] = foundLocale;

    // 8. Let supportedExtension be "-u".
    var supportedExtension = '-u';
    // 9. Let i be 0.
    var i = 0;
    // 10. Let len be the result of calling the [[Get]] internal method of
    //     relevantExtensionKeys with argument "length".
    var len = relevantExtensionKeys.length;

    // 11 Repeat while i < len:
    while (i < len) {
        // a. Let key be the result of calling the [[Get]] internal method of
        //    relevantExtensionKeys with argument ToString(i).
        var key = relevantExtensionKeys[i];
        // b. Let foundLocaleData be the result of calling the [[Get]] internal
        //    method of localeData with the argument foundLocale.
        var foundLocaleData = localeData[foundLocale];
        // c. Let keyLocaleData be the result of calling the [[Get]] internal
        //    method of foundLocaleData with the argument key.
        var keyLocaleData = foundLocaleData[key];
        // d. Let value be the result of calling the [[Get]] internal method of
        //    keyLocaleData with argument "0".
        var value = keyLocaleData['0'];
        // e. Let supportedExtensionAddition be "".
        var supportedExtensionAddition = '';
        // f. Let indexOf be the standard built-in function object defined in
        //    ES5, 15.4.4.14.
        var indexOf = arrIndexOf;

        // g. If extensionSubtags is not undefined, then
        if (extensionSubtags !== undefined) {
            // i. Let keyPos be the result of calling the [[Call]] internal
            //    method of indexOf with extensionSubtags as the this value and
            // an argument list containing the single item key.
            var keyPos = indexOf.call(extensionSubtags, key);

            // ii. If keyPos ≠ -1, then
            if (keyPos !== -1) {
                // 1. If keyPos + 1 < extensionSubtagsLength and the length of the
                //    result of calling the [[Get]] internal method of
                //    extensionSubtags with argument ToString(keyPos +1) is greater
                //    than 2, then
                if (keyPos + 1 < extensionSubtagsLength && extensionSubtags[keyPos + 1].length > 2) {
                    // a. Let requestedValue be the result of calling the [[Get]]
                    //    internal method of extensionSubtags with argument
                    //    ToString(keyPos + 1).
                    var requestedValue = extensionSubtags[keyPos + 1];
                    // b. Let valuePos be the result of calling the [[Call]]
                    //    internal method of indexOf with keyLocaleData as the
                    //    this value and an argument list containing the single
                    //    item requestedValue.
                    var valuePos = indexOf.call(keyLocaleData, requestedValue);

                    // c. If valuePos ≠ -1, then
                    if (valuePos !== -1) {
                        // i. Let value be requestedValue.
                        value = requestedValue,
                        // ii. Let supportedExtensionAddition be the
                        //     concatenation of "-", key, "-", and value.
                        supportedExtensionAddition = '-' + key + '-' + value;
                    }
                }
                // 2. Else
                else {
                        // a. Let valuePos be the result of calling the [[Call]]
                        // internal method of indexOf with keyLocaleData as the this
                        // value and an argument list containing the single item
                        // "true".
                        var _valuePos = indexOf(keyLocaleData, 'true');

                        // b. If valuePos ≠ -1, then
                        if (_valuePos !== -1)
                            // i. Let value be "true".
                            value = 'true';
                    }
            }
        }
        // h. If options has a field [[<key>]], then
        if (hop.call(options, '[[' + key + ']]')) {
            // i. Let optionsValue be the value of options.[[<key>]].
            var optionsValue = options['[[' + key + ']]'];

            // ii. If the result of calling the [[Call]] internal method of indexOf
            //     with keyLocaleData as the this value and an argument list
            //     containing the single item optionsValue is not -1, then
            if (indexOf.call(keyLocaleData, optionsValue) !== -1) {
                // 1. If optionsValue is not equal to value, then
                if (optionsValue !== value) {
                    // a. Let value be optionsValue.
                    value = optionsValue;
                    // b. Let supportedExtensionAddition be "".
                    supportedExtensionAddition = '';
                }
            }
        }
        // i. Set result.[[<key>]] to value.
        result['[[' + key + ']]'] = value;

        // j. Append supportedExtensionAddition to supportedExtension.
        supportedExtension += supportedExtensionAddition;

        // k. Increase i by 1.
        i++;
    }
    // 12. If the length of supportedExtension is greater than 2, then
    if (supportedExtension.length > 2) {
        // a.
        var privateIndex = foundLocale.indexOf("-x-");
        // b.
        if (privateIndex === -1) {
            // i.
            foundLocale = foundLocale + supportedExtension;
        }
        // c.
        else {
                // i.
                var preExtension = foundLocale.substring(0, privateIndex);
                // ii.
                var postExtension = foundLocale.substring(privateIndex);
                // iii.
                foundLocale = preExtension + supportedExtension + postExtension;
            }
        // d. asserting - skipping
        // e.
        foundLocale = CanonicalizeLanguageTag(foundLocale);
    }
    // 13. Set result.[[locale]] to foundLocale.
    result['[[locale]]'] = foundLocale;

    // 14. Return result.
    return result;
}

/**
 * The LookupSupportedLocales abstract operation returns the subset of the
 * provided BCP 47 language priority list requestedLocales for which
 * availableLocales has a matching locale when using the BCP 47 Lookup algorithm.
 * Locales appear in the same order in the returned list as in requestedLocales.
 * The following steps are taken:
 */
function /* 9.2.6 */LookupSupportedLocales(availableLocales, requestedLocales) {
    // 1. Let len be the number of elements in requestedLocales.
    var len = requestedLocales.length;
    // 2. Let subset be a new empty List.
    var subset = new List();
    // 3. Let k be 0.
    var k = 0;

    // 4. Repeat while k < len
    while (k < len) {
        // a. Let locale be the element of requestedLocales at 0-origined list
        //    position k.
        var locale = requestedLocales[k];
        // b. Let noExtensionsLocale be the String value that is locale with all
        //    Unicode locale extension sequences removed.
        var noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');
        // c. Let availableLocale be the result of calling the
        //    BestAvailableLocale abstract operation (defined in 9.2.2) with
        //    arguments availableLocales and noExtensionsLocale.
        var availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);

        // d. If availableLocale is not undefined, then append locale to the end of
        //    subset.
        if (availableLocale !== undefined) arrPush.call(subset, locale);

        // e. Increment k by 1.
        k++;
    }

    // 5. Let subsetArray be a new Array object whose elements are the same
    //    values in the same order as the elements of subset.
    var subsetArray = arrSlice.call(subset);

    // 6. Return subsetArray.
    return subsetArray;
}

/**
 * The BestFitSupportedLocales abstract operation returns the subset of the
 * provided BCP 47 language priority list requestedLocales for which
 * availableLocales has a matching locale when using the Best Fit Matcher
 * algorithm. Locales appear in the same order in the returned list as in
 * requestedLocales. The steps taken are implementation dependent.
 */
function /*9.2.7 */BestFitSupportedLocales(availableLocales, requestedLocales) {
    // ###TODO: implement this function as described by the specification###
    return LookupSupportedLocales(availableLocales, requestedLocales);
}

/**
 * The SupportedLocales abstract operation returns the subset of the provided BCP
 * 47 language priority list requestedLocales for which availableLocales has a
 * matching locale. Two algorithms are available to match the locales: the Lookup
 * algorithm described in RFC 4647 section 3.4, and an implementation dependent
 * best-fit algorithm. Locales appear in the same order in the returned list as
 * in requestedLocales. The following steps are taken:
 */
function /*9.2.8 */SupportedLocales(availableLocales, requestedLocales, options) {
    var matcher = void 0,
        subset = void 0;

    // 1. If options is not undefined, then
    if (options !== undefined) {
        // a. Let options be ToObject(options).
        options = new Record(toObject(options));
        // b. Let matcher be the result of calling the [[Get]] internal method of
        //    options with argument "localeMatcher".
        matcher = options.localeMatcher;

        // c. If matcher is not undefined, then
        if (matcher !== undefined) {
            // i. Let matcher be ToString(matcher).
            matcher = String(matcher);

            // ii. If matcher is not "lookup" or "best fit", then throw a RangeError
            //     exception.
            if (matcher !== 'lookup' && matcher !== 'best fit') throw new RangeError('matcher should be "lookup" or "best fit"');
        }
    }
    // 2. If matcher is undefined or "best fit", then
    if (matcher === undefined || matcher === 'best fit')
        // a. Let subset be the result of calling the BestFitSupportedLocales
        //    abstract operation (defined in 9.2.7) with arguments
        //    availableLocales and requestedLocales.
        subset = BestFitSupportedLocales(availableLocales, requestedLocales);
        // 3. Else
    else
        // a. Let subset be the result of calling the LookupSupportedLocales
        //    abstract operation (defined in 9.2.6) with arguments
        //    availableLocales and requestedLocales.
        subset = LookupSupportedLocales(availableLocales, requestedLocales);

    // 4. For each named own property name P of subset,
    for (var P in subset) {
        if (!hop.call(subset, P)) continue;

        // a. Let desc be the result of calling the [[GetOwnProperty]] internal
        //    method of subset with P.
        // b. Set desc.[[Writable]] to false.
        // c. Set desc.[[Configurable]] to false.
        // d. Call the [[DefineOwnProperty]] internal method of subset with P, desc,
        //    and true as arguments.
        defineProperty(subset, P, {
            writable: false, configurable: false, value: subset[P]
        });
    }
    // "Freeze" the array so no new elements can be added
    defineProperty(subset, 'length', { writable: false });

    // 5. Return subset
    return subset;
}

/**
 * The GetOption abstract operation extracts the value of the property named
 * property from the provided options object, converts it to the required type,
 * checks whether it is one of a List of allowed values, and fills in a fallback
 * value if necessary.
 */
function /*9.2.9 */GetOption(options, property, type, values, fallback) {
    // 1. Let value be the result of calling the [[Get]] internal method of
    //    options with argument property.
    var value = options[property];

    // 2. If value is not undefined, then
    if (value !== undefined) {
        // a. Assert: type is "boolean" or "string".
        // b. If type is "boolean", then let value be ToBoolean(value).
        // c. If type is "string", then let value be ToString(value).
        value = type === 'boolean' ? Boolean(value) : type === 'string' ? String(value) : value;

        // d. If values is not undefined, then
        if (values !== undefined) {
            // i. If values does not contain an element equal to value, then throw a
            //    RangeError exception.
            if (arrIndexOf.call(values, value) === -1) throw new RangeError("'" + value + "' is not an allowed value for `" + property + '`');
        }

        // e. Return value.
        return value;
    }
    // Else return fallback.
    return fallback;
}

/**
 * The GetNumberOption abstract operation extracts a property value from the
 * provided options object, converts it to a Number value, checks whether it is
 * in the allowed range, and fills in a fallback value if necessary.
 */
function /* 9.2.10 */GetNumberOption(options, property, minimum, maximum, fallback) {
    // 1. Let value be the result of calling the [[Get]] internal method of
    //    options with argument property.
    var value = options[property];

    // 2. If value is not undefined, then
    if (value !== undefined) {
        // a. Let value be ToNumber(value).
        value = Number(value);

        // b. If value is NaN or less than minimum or greater than maximum, throw a
        //    RangeError exception.
        if (isNaN(value) || value < minimum || value > maximum) throw new RangeError('Value is not a number or outside accepted range');

        // c. Return floor(value).
        return Math.floor(value);
    }
    // 3. Else return fallback.
    return fallback;
}

// 8 The Intl Object
var Intl = {};

// 8.2 Function Properties of the Intl Object

// 8.2.1
// @spec[tc39/ecma402/master/spec/intl.html]
// @clause[sec-intl.getcanonicallocales]
function getCanonicalLocales(locales) {
    // 1. Let ll be ? CanonicalizeLocaleList(locales).
    var ll = CanonicalizeLocaleList(locales);
    // 2. Return CreateArrayFromList(ll).
    {
        var result = [];

        var len = ll.length;
        var k = 0;

        while (k < len) {
            result[k] = ll[k];
            k++;
        }
        return result;
    }
}

Object.defineProperty(Intl, 'getCanonicalLocales', {
    enumerable: false,
    configurable: true,
    writable: true,
    value: getCanonicalLocales
});

// Currency minor units output from get-4217 grunt task, formatted
var currencyMinorUnits = {
    BHD: 3, BYR: 0, XOF: 0, BIF: 0, XAF: 0, CLF: 4, CLP: 0, KMF: 0, DJF: 0,
    XPF: 0, GNF: 0, ISK: 0, IQD: 3, JPY: 0, JOD: 3, KRW: 0, KWD: 3, LYD: 3,
    OMR: 3, PYG: 0, RWF: 0, TND: 3, UGX: 0, UYI: 0, VUV: 0, VND: 0
};

// Define the NumberFormat constructor internally so it cannot be tainted
function NumberFormatConstructor() {
    var locales = arguments[0];
    var options = arguments[1];

    if (!this || this === Intl) {
        return new Intl.NumberFormat(locales, options);
    }

    return InitializeNumberFormat(toObject(this), locales, options);
}

defineProperty(Intl, 'NumberFormat', {
    configurable: true,
    writable: true,
    value: NumberFormatConstructor
});

// Must explicitly set prototypes as unwritable
defineProperty(Intl.NumberFormat, 'prototype', {
    writable: false
});

/**
 * The abstract operation InitializeNumberFormat accepts the arguments
 * numberFormat (which must be an object), locales, and options. It initializes
 * numberFormat as a NumberFormat object.
 */
function /*11.1.1.1 */InitializeNumberFormat(numberFormat, locales, options) {
    // This will be a internal properties object if we're not already initialized
    var internal = getInternalProperties(numberFormat);

    // Create an object whose props can be used to restore the values of RegExp props
    var regexpRestore = createRegExpRestore();

    // 1. If numberFormat has an [[initializedIntlObject]] internal property with
    // value true, throw a TypeError exception.
    if (internal['[[initializedIntlObject]]'] === true) throw new TypeError('`this` object has already been initialized as an Intl object');

    // Need this to access the `internal` object
    defineProperty(numberFormat, '__getInternalProperties', {
        value: function value() {
            // NOTE: Non-standard, for internal use only
            if (arguments[0] === secret) return internal;
        }
    });

    // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.
    internal['[[initializedIntlObject]]'] = true;

    // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList
    //    abstract operation (defined in 9.2.1) with argument locales.
    var requestedLocales = CanonicalizeLocaleList(locales);

    // 4. If options is undefined, then
    if (options === undefined)
        // a. Let options be the result of creating a new object as if by the
        // expression new Object() where Object is the standard built-in constructor
        // with that name.
        options = {};

        // 5. Else
    else
        // a. Let options be ToObject(options).
        options = toObject(options);

    // 6. Let opt be a new Record.
    var opt = new Record(),


    // 7. Let matcher be the result of calling the GetOption abstract operation
    //    (defined in 9.2.9) with the arguments options, "localeMatcher", "string",
    //    a List containing the two String values "lookup" and "best fit", and
    //    "best fit".
    matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');

    // 8. Set opt.[[localeMatcher]] to matcher.
    opt['[[localeMatcher]]'] = matcher;

    // 9. Let NumberFormat be the standard built-in object that is the initial value
    //    of Intl.NumberFormat.
    // 10. Let localeData be the value of the [[localeData]] internal property of
    //     NumberFormat.
    var localeData = internals.NumberFormat['[[localeData]]'];

    // 11. Let r be the result of calling the ResolveLocale abstract operation
    //     (defined in 9.2.5) with the [[availableLocales]] internal property of
    //     NumberFormat, requestedLocales, opt, the [[relevantExtensionKeys]]
    //     internal property of NumberFormat, and localeData.
    var r = ResolveLocale(internals.NumberFormat['[[availableLocales]]'], requestedLocales, opt, internals.NumberFormat['[[relevantExtensionKeys]]'], localeData);

    // 12. Set the [[locale]] internal property of numberFormat to the value of
    //     r.[[locale]].
    internal['[[locale]]'] = r['[[locale]]'];

    // 13. Set the [[numberingSystem]] internal property of numberFormat to the value
    //     of r.[[nu]].
    internal['[[numberingSystem]]'] = r['[[nu]]'];

    // The specification doesn't tell us to do this, but it's helpful later on
    internal['[[dataLocale]]'] = r['[[dataLocale]]'];

    // 14. Let dataLocale be the value of r.[[dataLocale]].
    var dataLocale = r['[[dataLocale]]'];

    // 15. Let s be the result of calling the GetOption abstract operation with the
    //     arguments options, "style", "string", a List containing the three String
    //     values "decimal", "percent", and "currency", and "decimal".
    var s = GetOption(options, 'style', 'string', new List('decimal', 'percent', 'currency'), 'decimal');

    // 16. Set the [[style]] internal property of numberFormat to s.
    internal['[[style]]'] = s;

    // 17. Let c be the result of calling the GetOption abstract operation with the
    //     arguments options, "currency", "string", undefined, and undefined.
    var c = GetOption(options, 'currency', 'string');

    // 18. If c is not undefined and the result of calling the
    //     IsWellFormedCurrencyCode abstract operation (defined in 6.3.1) with
    //     argument c is false, then throw a RangeError exception.
    if (c !== undefined && !IsWellFormedCurrencyCode(c)) throw new RangeError("'" + c + "' is not a valid currency code");

    // 19. If s is "currency" and c is undefined, throw a TypeError exception.
    if (s === 'currency' && c === undefined) throw new TypeError('Currency code is required when style is currency');

    var cDigits = void 0;

    // 20. If s is "currency", then
    if (s === 'currency') {
        // a. Let c be the result of converting c to upper case as specified in 6.1.
        c = c.toUpperCase();

        // b. Set the [[currency]] internal property of numberFormat to c.
        internal['[[currency]]'] = c;

        // c. Let cDigits be the result of calling the CurrencyDigits abstract
        //    operation (defined below) with argument c.
        cDigits = CurrencyDigits(c);
    }

    // 21. Let cd be the result of calling the GetOption abstract operation with the
    //     arguments options, "currencyDisplay", "string", a List containing the
    //     three String values "code", "symbol", and "name", and "symbol".
    var cd = GetOption(options, 'currencyDisplay', 'string', new List('code', 'symbol', 'name'), 'symbol');

    // 22. If s is "currency", then set the [[currencyDisplay]] internal property of
    //     numberFormat to cd.
    if (s === 'currency') internal['[[currencyDisplay]]'] = cd;

    // 23. Let mnid be the result of calling the GetNumberOption abstract operation
    //     (defined in 9.2.10) with arguments options, "minimumIntegerDigits", 1, 21,
    //     and 1.
    var mnid = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);

    // 24. Set the [[minimumIntegerDigits]] internal property of numberFormat to mnid.
    internal['[[minimumIntegerDigits]]'] = mnid;

    // 25. If s is "currency", then let mnfdDefault be cDigits; else let mnfdDefault
    //     be 0.
    var mnfdDefault = s === 'currency' ? cDigits : 0;

    // 26. Let mnfd be the result of calling the GetNumberOption abstract operation
    //     with arguments options, "minimumFractionDigits", 0, 20, and mnfdDefault.
    var mnfd = GetNumberOption(options, 'minimumFractionDigits', 0, 20, mnfdDefault);

    // 27. Set the [[minimumFractionDigits]] internal property of numberFormat to mnfd.
    internal['[[minimumFractionDigits]]'] = mnfd;

    // 28. If s is "currency", then let mxfdDefault be max(mnfd, cDigits); else if s
    //     is "percent", then let mxfdDefault be max(mnfd, 0); else let mxfdDefault
    //     be max(mnfd, 3).
    var mxfdDefault = s === 'currency' ? Math.max(mnfd, cDigits) : s === 'percent' ? Math.max(mnfd, 0) : Math.max(mnfd, 3);

    // 29. Let mxfd be the result of calling the GetNumberOption abstract operation
    //     with arguments options, "maximumFractionDigits", mnfd, 20, and mxfdDefault.
    var mxfd = GetNumberOption(options, 'maximumFractionDigits', mnfd, 20, mxfdDefault);

    // 30. Set the [[maximumFractionDigits]] internal property of numberFormat to mxfd.
    internal['[[maximumFractionDigits]]'] = mxfd;

    // 31. Let mnsd be the result of calling the [[Get]] internal method of options
    //     with argument "minimumSignificantDigits".
    var mnsd = options.minimumSignificantDigits;

    // 32. Let mxsd be the result of calling the [[Get]] internal method of options
    //     with argument "maximumSignificantDigits".
    var mxsd = options.maximumSignificantDigits;

    // 33. If mnsd is not undefined or mxsd is not undefined, then:
    if (mnsd !== undefined || mxsd !== undefined) {
        // a. Let mnsd be the result of calling the GetNumberOption abstract
        //    operation with arguments options, "minimumSignificantDigits", 1, 21,
        //    and 1.
        mnsd = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);

        // b. Let mxsd be the result of calling the GetNumberOption abstract
        //     operation with arguments options, "maximumSignificantDigits", mnsd,
        //     21, and 21.
        mxsd = GetNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);

        // c. Set the [[minimumSignificantDigits]] internal property of numberFormat
        //    to mnsd, and the [[maximumSignificantDigits]] internal property of
        //    numberFormat to mxsd.
        internal['[[minimumSignificantDigits]]'] = mnsd;
        internal['[[maximumSignificantDigits]]'] = mxsd;
    }
    // 34. Let g be the result of calling the GetOption abstract operation with the
    //     arguments options, "useGrouping", "boolean", undefined, and true.
    var g = GetOption(options, 'useGrouping', 'boolean', undefined, true);

    // 35. Set the [[useGrouping]] internal property of numberFormat to g.
    internal['[[useGrouping]]'] = g;

    // 36. Let dataLocaleData be the result of calling the [[Get]] internal method of
    //     localeData with argument dataLocale.
    var dataLocaleData = localeData[dataLocale];

    // 37. Let patterns be the result of calling the [[Get]] internal method of
    //     dataLocaleData with argument "patterns".
    var patterns = dataLocaleData.patterns;

    // 38. Assert: patterns is an object (see 11.2.3)

    // 39. Let stylePatterns be the result of calling the [[Get]] internal method of
    //     patterns with argument s.
    var stylePatterns = patterns[s];

    // 40. Set the [[positivePattern]] internal property of numberFormat to the
    //     result of calling the [[Get]] internal method of stylePatterns with the
    //     argument "positivePattern".
    internal['[[positivePattern]]'] = stylePatterns.positivePattern;

    // 41. Set the [[negativePattern]] internal property of numberFormat to the
    //     result of calling the [[Get]] internal method of stylePatterns with the
    //     argument "negativePattern".
    internal['[[negativePattern]]'] = stylePatterns.negativePattern;

    // 42. Set the [[boundFormat]] internal property of numberFormat to undefined.
    internal['[[boundFormat]]'] = undefined;

    // 43. Set the [[initializedNumberFormat]] internal property of numberFormat to
    //     true.
    internal['[[initializedNumberFormat]]'] = true;

    // In ES3, we need to pre-bind the format() function
    if (es3) numberFormat.format = GetFormatNumber.call(numberFormat);

    // Restore the RegExp properties
    regexpRestore();

    // Return the newly initialised object
    return numberFormat;
}

function CurrencyDigits(currency) {
    // When the CurrencyDigits abstract operation is called with an argument currency
    // (which must be an upper case String value), the following steps are taken:

    // 1. If the ISO 4217 currency and funds code list contains currency as an
    // alphabetic code, then return the minor unit value corresponding to the
    // currency from the list; else return 2.
    return currencyMinorUnits[currency] !== undefined ? currencyMinorUnits[currency] : 2;
}

/* 11.2.3 */internals.NumberFormat = {
    '[[availableLocales]]': [],
    '[[relevantExtensionKeys]]': ['nu'],
    '[[localeData]]': {}
};

/**
 * When the supportedLocalesOf method of Intl.NumberFormat is called, the
 * following steps are taken:
 */
/* 11.2.2 */
defineProperty(Intl.NumberFormat, 'supportedLocalesOf', {
    configurable: true,
    writable: true,
    value: fnBind.call(function (locales) {
        // Bound functions only have the `this` value altered if being used as a constructor,
        // this lets us imitate a native function that has no constructor
        if (!hop.call(this, '[[availableLocales]]')) throw new TypeError('supportedLocalesOf() is not a constructor');

        // Create an object whose props can be used to restore the values of RegExp props
        var regexpRestore = createRegExpRestore(),


        // 1. If options is not provided, then let options be undefined.
        options = arguments[1],


        // 2. Let availableLocales be the value of the [[availableLocales]] internal
        //    property of the standard built-in object that is the initial value of
        //    Intl.NumberFormat.

        availableLocales = this['[[availableLocales]]'],


        // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList
        //    abstract operation (defined in 9.2.1) with argument locales.
        requestedLocales = CanonicalizeLocaleList(locales);

        // Restore the RegExp properties
        regexpRestore();

        // 4. Return the result of calling the SupportedLocales abstract operation
        //    (defined in 9.2.8) with arguments availableLocales, requestedLocales,
        //    and options.
        return SupportedLocales(availableLocales, requestedLocales, options);
    }, internals.NumberFormat)
});

/**
 * This named accessor property returns a function that formats a number
 * according to the effective locale and the formatting options of this
 * NumberFormat object.
 */
/* 11.3.2 */defineProperty(Intl.NumberFormat.prototype, 'format', {
    configurable: true,
    get: GetFormatNumber
});

function GetFormatNumber() {
    var internal = this !== null && babelHelpers$1["typeof"](this) === 'object' && getInternalProperties(this);

    // Satisfy test 11.3_b
    if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for format() is not an initialized Intl.NumberFormat object.');

    // The value of the [[Get]] attribute is a function that takes the following
    // steps:

    // 1. If the [[boundFormat]] internal property of this NumberFormat object
    //    is undefined, then:
    if (internal['[[boundFormat]]'] === undefined) {
        // a. Let F be a Function object, with internal properties set as
        //    specified for built-in functions in ES5, 15, or successor, and the
        //    length property set to 1, that takes the argument value and
        //    performs the following steps:
        var F = function F(value) {
            // i. If value is not provided, then let value be undefined.
            // ii. Let x be ToNumber(value).
            // iii. Return the result of calling the FormatNumber abstract
            //      operation (defined below) with arguments this and x.
            return FormatNumber(this, /* x = */Number(value));
        };

        // b. Let bind be the standard built-in function object defined in ES5,
        //    15.3.4.5.
        // c. Let bf be the result of calling the [[Call]] internal method of
        //    bind with F as the this value and an argument list containing
        //    the single item this.
        var bf = fnBind.call(F, this);

        // d. Set the [[boundFormat]] internal property of this NumberFormat
        //    object to bf.
        internal['[[boundFormat]]'] = bf;
    }
    // Return the value of the [[boundFormat]] internal property of this
    // NumberFormat object.
    return internal['[[boundFormat]]'];
}

function formatToParts() {
    var value = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];

    var internal = this !== null && babelHelpers$1["typeof"](this) === 'object' && getInternalProperties(this);
    if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for formatToParts() is not an initialized Intl.NumberFormat object.');

    var x = Number(value);
    return FormatNumberToParts(this, x);
}

Object.defineProperty(Intl.NumberFormat.prototype, 'formatToParts', {
    configurable: true,
    enumerable: false,
    writable: true,
    value: formatToParts
});

/*
 * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]
 * @clause[sec-formatnumbertoparts]
 */
function FormatNumberToParts(numberFormat, x) {
    // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).
    var parts = PartitionNumberPattern(numberFormat, x);
    // 2. Let result be ArrayCreate(0).
    var result = [];
    // 3. Let n be 0.
    var n = 0;
    // 4. For each part in parts, do:
    for (var i = 0; parts.length > i; i++) {
        var part = parts[i];
        // a. Let O be ObjectCreate(%ObjectPrototype%).
        var O = {};
        // a. Perform ? CreateDataPropertyOrThrow(O, "type", part.[[type]]).
        O.type = part['[[type]]'];
        // a. Perform ? CreateDataPropertyOrThrow(O, "value", part.[[value]]).
        O.value = part['[[value]]'];
        // a. Perform ? CreateDataPropertyOrThrow(result, ? ToString(n), O).
        result[n] = O;
        // a. Increment n by 1.
        n += 1;
    }
    // 5. Return result.
    return result;
}

/*
 * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]
 * @clause[sec-partitionnumberpattern]
 */
function PartitionNumberPattern(numberFormat, x) {

    var internal = getInternalProperties(numberFormat),
        locale = internal['[[dataLocale]]'],
        nums = internal['[[numberingSystem]]'],
        data = internals.NumberFormat['[[localeData]]'][locale],
        ild = data.symbols[nums] || data.symbols.latn,
        pattern = void 0;

    // 1. If x is not NaN and x < 0, then:
    if (!isNaN(x) && x < 0) {
        // a. Let x be -x.
        x = -x;
        // a. Let pattern be the value of numberFormat.[[negativePattern]].
        pattern = internal['[[negativePattern]]'];
    }
    // 2. Else,
    else {
            // a. Let pattern be the value of numberFormat.[[positivePattern]].
            pattern = internal['[[positivePattern]]'];
        }
    // 3. Let result be a new empty List.
    var result = new List();
    // 4. Let beginIndex be Call(%StringProto_indexOf%, pattern, "{", 0).
    var beginIndex = pattern.indexOf('{', 0);
    // 5. Let endIndex be 0.
    var endIndex = 0;
    // 6. Let nextIndex be 0.
    var nextIndex = 0;
    // 7. Let length be the number of code units in pattern.
    var length = pattern.length;
    // 8. Repeat while beginIndex is an integer index into pattern:
    while (beginIndex > -1 && beginIndex < length) {
        // a. Set endIndex to Call(%StringProto_indexOf%, pattern, "}", beginIndex)
        endIndex = pattern.indexOf('}', beginIndex);
        // a. If endIndex = -1, throw new Error exception.
        if (endIndex === -1) throw new Error();
        // a. If beginIndex is greater than nextIndex, then:
        if (beginIndex > nextIndex) {
            // i. Let literal be a substring of pattern from position nextIndex, inclusive, to position beginIndex, exclusive.
            var literal = pattern.substring(nextIndex, beginIndex);
            // ii. Add new part record { [[type]]: "literal", [[value]]: literal } as a new element of the list result.
            arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });
        }
        // a. Let p be the substring of pattern from position beginIndex, exclusive, to position endIndex, exclusive.
        var p = pattern.substring(beginIndex + 1, endIndex);
        // a. If p is equal "number", then:
        if (p === "number") {
            // i. If x is NaN,
            if (isNaN(x)) {
                // 1. Let n be an ILD String value indicating the NaN value.
                var n = ild.nan;
                // 2. Add new part record { [[type]]: "nan", [[value]]: n } as a new element of the list result.
                arrPush.call(result, { '[[type]]': 'nan', '[[value]]': n });
            }
            // ii. Else if isFinite(x) is false,
            else if (!isFinite(x)) {
                    // 1. Let n be an ILD String value indicating infinity.
                    var _n = ild.infinity;
                    // 2. Add new part record { [[type]]: "infinity", [[value]]: n } as a new element of the list result.
                    arrPush.call(result, { '[[type]]': 'infinity', '[[value]]': _n });
                }
                // iii. Else,
                else {
                        // 1. If the value of numberFormat.[[style]] is "percent" and isFinite(x), let x be 100 × x.
                        if (internal['[[style]]'] === 'percent' && isFinite(x)) x *= 100;

                        var _n2 = void 0;
                        // 2. If the numberFormat.[[minimumSignificantDigits]] and numberFormat.[[maximumSignificantDigits]] are present, then
                        if (hop.call(internal, '[[minimumSignificantDigits]]') && hop.call(internal, '[[maximumSignificantDigits]]')) {
                            // a. Let n be ToRawPrecision(x, numberFormat.[[minimumSignificantDigits]], numberFormat.[[maximumSignificantDigits]]).
                            _n2 = ToRawPrecision(x, internal['[[minimumSignificantDigits]]'], internal['[[maximumSignificantDigits]]']);
                        }
                        // 3. Else,
                        else {
                                // a. Let n be ToRawFixed(x, numberFormat.[[minimumIntegerDigits]], numberFormat.[[minimumFractionDigits]], numberFormat.[[maximumFractionDigits]]).
                                _n2 = ToRawFixed(x, internal['[[minimumIntegerDigits]]'], internal['[[minimumFractionDigits]]'], internal['[[maximumFractionDigits]]']);
                            }
                        // 4. If the value of the numberFormat.[[numberingSystem]] matches one of the values in the "Numbering System" column of Table 2 below, then
                        if (numSys[nums]) {
                            (function () {
                                // a. Let digits be an array whose 10 String valued elements are the UTF-16 string representations of the 10 digits specified in the "Digits" column of the matching row in Table 2.
                                var digits = numSys[nums];
                                // a. Replace each digit in n with the value of digits[digit].
                                _n2 = String(_n2).replace(/\d/g, function (digit) {
                                    return digits[digit];
                                });
                            })();
                        }
                        // 5. Else use an implementation dependent algorithm to map n to the appropriate representation of n in the given numbering system.
                        else _n2 = String(_n2); // ###TODO###

                        var integer = void 0;
                        var fraction = void 0;
                        // 6. Let decimalSepIndex be Call(%StringProto_indexOf%, n, ".", 0).
                        var decimalSepIndex = _n2.indexOf('.', 0);
                        // 7. If decimalSepIndex > 0, then:
                        if (decimalSepIndex > 0) {
                            // a. Let integer be the substring of n from position 0, inclusive, to position decimalSepIndex, exclusive.
                            integer = _n2.substring(0, decimalSepIndex);
                            // a. Let fraction be the substring of n from position decimalSepIndex, exclusive, to the end of n.
                            fraction = _n2.substring(decimalSepIndex + 1, decimalSepIndex.length);
                        }
                        // 8. Else:
                        else {
                                // a. Let integer be n.
                                integer = _n2;
                                // a. Let fraction be undefined.
                                fraction = undefined;
                            }
                        // 9. If the value of the numberFormat.[[useGrouping]] is true,
                        if (internal['[[useGrouping]]'] === true) {
                            // a. Let groupSepSymbol be the ILND String representing the grouping separator.
                            var groupSepSymbol = ild.group;
                            // a. Let groups be a List whose elements are, in left to right order, the substrings defined by ILND set of locations within the integer.
                            var groups = [];
                            // ----> implementation:
                            // Primary group represents the group closest to the decimal
                            var pgSize = data.patterns.primaryGroupSize || 3;
                            // Secondary group is every other group
                            var sgSize = data.patterns.secondaryGroupSize || pgSize;
                            // Group only if necessary
                            if (integer.length > pgSize) {
                                // Index of the primary grouping separator
                                var end = integer.length - pgSize;
                                // Starting index for our loop
                                var idx = end % sgSize;
                                var start = integer.slice(0, idx);
                                if (start.length) arrPush.call(groups, start);
                                // Loop to separate into secondary grouping digits
                                while (idx < end) {
                                    arrPush.call(groups, integer.slice(idx, idx + sgSize));
                                    idx += sgSize;
                                }
                                // Add the primary grouping digits
                                arrPush.call(groups, integer.slice(end));
                            } else {
                                arrPush.call(groups, integer);
                            }
                            // a. Assert: The number of elements in groups List is greater than 0.
                            if (groups.length === 0) throw new Error();
                            // a. Repeat, while groups List is not empty:
                            while (groups.length) {
                                // i. Remove the first element from groups and let integerGroup be the value of that element.
                                var integerGroup = arrShift.call(groups);
                                // ii. Add new part record { [[type]]: "integer", [[value]]: integerGroup } as a new element of the list result.
                                arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integerGroup });
                                // iii. If groups List is not empty, then:
                                if (groups.length) {
                                    // 1. Add new part record { [[type]]: "group", [[value]]: groupSepSymbol } as a new element of the list result.
                                    arrPush.call(result, { '[[type]]': 'group', '[[value]]': groupSepSymbol });
                                }
                            }
                        }
                        // 10. Else,
                        else {
                                // a. Add new part record { [[type]]: "integer", [[value]]: integer } as a new element of the list result.
                                arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integer });
                            }
                        // 11. If fraction is not undefined, then:
                        if (fraction !== undefined) {
                            // a. Let decimalSepSymbol be the ILND String representing the decimal separator.
                            var decimalSepSymbol = ild.decimal;
                            // a. Add new part record { [[type]]: "decimal", [[value]]: decimalSepSymbol } as a new element of the list result.
                            arrPush.call(result, { '[[type]]': 'decimal', '[[value]]': decimalSepSymbol });
                            // a. Add new part record { [[type]]: "fraction", [[value]]: fraction } as a new element of the list result.
                            arrPush.call(result, { '[[type]]': 'fraction', '[[value]]': fraction });
                        }
                    }
        }
        // a. Else if p is equal "plusSign", then:
        else if (p === "plusSign") {
                // i. Let plusSignSymbol be the ILND String representing the plus sign.
                var plusSignSymbol = ild.plusSign;
                // ii. Add new part record { [[type]]: "plusSign", [[value]]: plusSignSymbol } as a new element of the list result.
                arrPush.call(result, { '[[type]]': 'plusSign', '[[value]]': plusSignSymbol });
            }
            // a. Else if p is equal "minusSign", then:
            else if (p === "minusSign") {
                    // i. Let minusSignSymbol be the ILND String representing the minus sign.
                    var minusSignSymbol = ild.minusSign;
                    // ii. Add new part record { [[type]]: "minusSign", [[value]]: minusSignSymbol } as a new element of the list result.
                    arrPush.call(result, { '[[type]]': 'minusSign', '[[value]]': minusSignSymbol });
                }
                // a. Else if p is equal "percentSign" and numberFormat.[[style]] is "percent", then:
                else if (p === "percentSign" && internal['[[style]]'] === "percent") {
                        // i. Let percentSignSymbol be the ILND String representing the percent sign.
                        var percentSignSymbol = ild.percentSign;
                        // ii. Add new part record { [[type]]: "percentSign", [[value]]: percentSignSymbol } as a new element of the list result.
                        arrPush.call(result, { '[[type]]': 'literal', '[[value]]': percentSignSymbol });
                    }
                    // a. Else if p is equal "currency" and numberFormat.[[style]] is "currency", then:
                    else if (p === "currency" && internal['[[style]]'] === "currency") {
                            // i. Let currency be the value of numberFormat.[[currency]].
                            var currency = internal['[[currency]]'];

                            var cd = void 0;

                            // ii. If numberFormat.[[currencyDisplay]] is "code", then
                            if (internal['[[currencyDisplay]]'] === "code") {
                                // 1. Let cd be currency.
                                cd = currency;
                            }
                            // iii. Else if numberFormat.[[currencyDisplay]] is "symbol", then
                            else if (internal['[[currencyDisplay]]'] === "symbol") {
                                    // 1. Let cd be an ILD string representing currency in short form. If the implementation does not have such a representation of currency, use currency itself.
                                    cd = data.currencies[currency] || currency;
                                }
                                // iv. Else if numberFormat.[[currencyDisplay]] is "name", then
                                else if (internal['[[currencyDisplay]]'] === "name") {
                                        // 1. Let cd be an ILD string representing currency in long form. If the implementation does not have such a representation of currency, then use currency itself.
                                        cd = currency;
                                    }
                            // v. Add new part record { [[type]]: "currency", [[value]]: cd } as a new element of the list result.
                            arrPush.call(result, { '[[type]]': 'currency', '[[value]]': cd });
                        }
                        // a. Else,
                        else {
                                // i. Let literal be the substring of pattern from position beginIndex, inclusive, to position endIndex, inclusive.
                                var _literal = pattern.substring(beginIndex, endIndex);
                                // ii. Add new part record { [[type]]: "literal", [[value]]: literal } as a new element of the list result.
                                arrPush.call(result, { '[[type]]': 'literal', '[[value]]': _literal });
                            }
        // a. Set nextIndex to endIndex + 1.
        nextIndex = endIndex + 1;
        // a. Set beginIndex to Call(%StringProto_indexOf%, pattern, "{", nextIndex)
        beginIndex = pattern.indexOf('{', nextIndex);
    }
    // 9. If nextIndex is less than length, then:
    if (nextIndex < length) {
        // a. Let literal be the substring of pattern from position nextIndex, inclusive, to position length, exclusive.
        var _literal2 = pattern.substring(nextIndex, length);
        // a. Add new part record { [[type]]: "literal", [[value]]: literal } as a new element of the list result.
        arrPush.call(result, { '[[type]]': 'literal', '[[value]]': _literal2 });
    }
    // 10. Return result.
    return result;
}

/*
 * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]
 * @clause[sec-formatnumber]
 */
function FormatNumber(numberFormat, x) {
    // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).
    var parts = PartitionNumberPattern(numberFormat, x);
    // 2. Let result be an empty String.
    var result = '';
    // 3. For each part in parts, do:
    for (var i = 0; parts.length > i; i++) {
        var part = parts[i];
        // a. Set result to a String value produced by concatenating result and part.[[value]].
        result += part['[[value]]'];
    }
    // 4. Return result.
    return result;
}

/**
 * When the ToRawPrecision abstract operation is called with arguments x (which
 * must be a finite non-negative number), minPrecision, and maxPrecision (both
 * must be integers between 1 and 21) the following steps are taken:
 */
function ToRawPrecision(x, minPrecision, maxPrecision) {
    // 1. Let p be maxPrecision.
    var p = maxPrecision;

    var m = void 0,
        e = void 0;

    // 2. If x = 0, then
    if (x === 0) {
        // a. Let m be the String consisting of p occurrences of the character "0".
        m = arrJoin.call(Array(p + 1), '0');
        // b. Let e be 0.
        e = 0;
    }
    // 3. Else
    else {
            // a. Let e and n be integers such that 10ᵖ⁻¹ ≤ n < 10ᵖ and for which the
            //    exact mathematical value of n × 10ᵉ⁻ᵖ⁺¹ – x is as close to zero as
            //    possible. If there are two such sets of e and n, pick the e and n for
            //    which n × 10ᵉ⁻ᵖ⁺¹ is larger.
            e = log10Floor(Math.abs(x));

            // Easier to get to m from here
            var f = Math.round(Math.exp(Math.abs(e - p + 1) * Math.LN10));

            // b. Let m be the String consisting of the digits of the decimal
            //    representation of n (in order, with no leading zeroes)
            m = String(Math.round(e - p + 1 < 0 ? x * f : x / f));
        }

    // 4. If e ≥ p, then
    if (e >= p)
        // a. Return the concatenation of m and e-p+1 occurrences of the character "0".
        return m + arrJoin.call(Array(e - p + 1 + 1), '0');

        // 5. If e = p-1, then
    else if (e === p - 1)
            // a. Return m.
            return m;

            // 6. If e ≥ 0, then
        else if (e >= 0)
                // a. Let m be the concatenation of the first e+1 characters of m, the character
                //    ".", and the remaining p–(e+1) characters of m.
                m = m.slice(0, e + 1) + '.' + m.slice(e + 1);

                // 7. If e < 0, then
            else if (e < 0)
                    // a. Let m be the concatenation of the String "0.", –(e+1) occurrences of the
                    //    character "0", and the string m.
                    m = '0.' + arrJoin.call(Array(-(e + 1) + 1), '0') + m;

    // 8. If m contains the character ".", and maxPrecision > minPrecision, then
    if (m.indexOf(".") >= 0 && maxPrecision > minPrecision) {
        // a. Let cut be maxPrecision – minPrecision.
        var cut = maxPrecision - minPrecision;

        // b. Repeat while cut > 0 and the last character of m is "0":
        while (cut > 0 && m.charAt(m.length - 1) === '0') {
            //  i. Remove the last character from m.
            m = m.slice(0, -1);

            //  ii. Decrease cut by 1.
            cut--;
        }

        // c. If the last character of m is ".", then
        if (m.charAt(m.length - 1) === '.')
            //    i. Remove the last character from m.
            m = m.slice(0, -1);
    }
    // 9. Return m.
    return m;
}

/**
 * @spec[tc39/ecma402/master/spec/numberformat.html]
 * @clause[sec-torawfixed]
 * When the ToRawFixed abstract operation is called with arguments x (which must
 * be a finite non-negative number), minInteger (which must be an integer between
 * 1 and 21), minFraction, and maxFraction (which must be integers between 0 and
 * 20) the following steps are taken:
 */
function ToRawFixed(x, minInteger, minFraction, maxFraction) {
    // 1. Let f be maxFraction.
    var f = maxFraction;
    // 2. Let n be an integer for which the exact mathematical value of n ÷ 10f – x is as close to zero as possible. If there are two such n, pick the larger n.
    var n = Math.pow(10, f) * x; // diverging...
    // 3. If n = 0, let m be the String "0". Otherwise, let m be the String consisting of the digits of the decimal representation of n (in order, with no leading zeroes).
    var m = n === 0 ? "0" : n.toFixed(0); // divering...

    {
        // this diversion is needed to take into consideration big numbers, e.g.:
        // 1.2344501e+37 -> 12344501000000000000000000000000000000
        var idx = void 0;
        var exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0;
        if (exp) {
            m = m.slice(0, idx).replace('.', '');
            m += arrJoin.call(Array(exp - (m.length - 1) + 1), '0');
        }
    }

    var int = void 0;
    // 4. If f ≠ 0, then
    if (f !== 0) {
        // a. Let k be the number of characters in m.
        var k = m.length;
        // a. If k ≤ f, then
        if (k <= f) {
            // i. Let z be the String consisting of f+1–k occurrences of the character "0".
            var z = arrJoin.call(Array(f + 1 - k + 1), '0');
            // ii. Let m be the concatenation of Strings z and m.
            m = z + m;
            // iii. Let k be f+1.
            k = f + 1;
        }
        // a. Let a be the first k–f characters of m, and let b be the remaining f characters of m.
        var a = m.substring(0, k - f),
            b = m.substring(k - f, m.length);
        // a. Let m be the concatenation of the three Strings a, ".", and b.
        m = a + "." + b;
        // a. Let int be the number of characters in a.
        int = a.length;
    }
    // 5. Else, let int be the number of characters in m.
    else int = m.length;
    // 6. Let cut be maxFraction – minFraction.
    var cut = maxFraction - minFraction;
    // 7. Repeat while cut > 0 and the last character of m is "0":
    while (cut > 0 && m.slice(-1) === "0") {
        // a. Remove the last character from m.
        m = m.slice(0, -1);
        // a. Decrease cut by 1.
        cut--;
    }
    // 8. If the last character of m is ".", then
    if (m.slice(-1) === ".") {
        // a. Remove the last character from m.
        m = m.slice(0, -1);
    }
    // 9. If int < minInteger, then
    if (int < minInteger) {
        // a. Let z be the String consisting of minInteger–int occurrences of the character "0".
        var _z = arrJoin.call(Array(minInteger - int + 1), '0');
        // a. Let m be the concatenation of Strings z and m.
        m = _z + m;
    }
    // 10. Return m.
    return m;
}

// Sect 11.3.2 Table 2, Numbering systems
// ======================================
var numSys = {
    arab: ["٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩"],
    arabext: ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"],
    bali: ["᭐", "᭑", "᭒", "᭓", "᭔", "᭕", "᭖", "᭗", "᭘", "᭙"],
    beng: ["০", "১", "২", "৩", "৪", "৫", "৬", "৭", "৮", "৯"],
    deva: ["०", "१", "२", "३", "४", "५", "६", "७", "८", "९"],
    fullwide: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
    gujr: ["૦", "૧", "૨", "૩", "૪", "૫", "૬", "૭", "૮", "૯"],
    guru: ["੦", "੧", "੨", "੩", "੪", "੫", "੬", "੭", "੮", "੯"],
    hanidec: ["〇", "一", "二", "三", "四", "五", "六", "七", "八", "九"],
    khmr: ["០", "១", "២", "៣", "៤", "៥", "៦", "៧", "៨", "៩"],
    knda: ["೦", "೧", "೨", "೩", "೪", "೫", "೬", "೭", "೮", "೯"],
    laoo: ["໐", "໑", "໒", "໓", "໔", "໕", "໖", "໗", "໘", "໙"],
    latn: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"],
    limb: ["᥆", "᥇", "᥈", "᥉", "᥊", "᥋", "᥌", "᥍", "᥎", "᥏"],
    mlym: ["൦", "൧", "൨", "൩", "൪", "൫", "൬", "൭", "൮", "൯"],
    mong: ["᠐", "᠑", "᠒", "᠓", "᠔", "᠕", "᠖", "᠗", "᠘", "᠙"],
    mymr: ["၀", "၁", "၂", "၃", "၄", "၅", "၆", "၇", "၈", "၉"],
    orya: ["୦", "୧", "୨", "୩", "୪", "୫", "୬", "୭", "୮", "୯"],
    tamldec: ["௦", "௧", "௨", "௩", "௪", "௫", "௬", "௭", "௮", "௯"],
    telu: ["౦", "౧", "౨", "౩", "౪", "౫", "౬", "౭", "౮", "౯"],
    thai: ["๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙"],
    tibt: ["༠", "༡", "༢", "༣", "༤", "༥", "༦", "༧", "༨", "༩"]
};

/**
 * This function provides access to the locale and formatting options computed
 * during initialization of the object.
 *
 * The function returns a new object whose properties and attributes are set as
 * if constructed by an object literal assigning to each of the following
 * properties the value of the corresponding internal property of this
 * NumberFormat object (see 11.4): locale, numberingSystem, style, currency,
 * currencyDisplay, minimumIntegerDigits, minimumFractionDigits,
 * maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, and
 * useGrouping. Properties whose corresponding internal properties are not present
 * are not assigned.
 */
/* 11.3.3 */defineProperty(Intl.NumberFormat.prototype, 'resolvedOptions', {
    configurable: true,
    writable: true,
    value: function value() {
        var prop = void 0,
            descs = new Record(),
            props = ['locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay', 'minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits', 'minimumSignificantDigits', 'maximumSignificantDigits', 'useGrouping'],
            internal = this !== null && babelHelpers$1["typeof"](this) === 'object' && getInternalProperties(this);

        // Satisfy test 11.3_b
        if (!internal || !internal['[[initializedNumberFormat]]']) throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.NumberFormat object.');

        for (var i = 0, max = props.length; i < max; i++) {
            if (hop.call(internal, prop = '[[' + props[i] + ']]')) descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };
        }

        return objCreate({}, descs);
    }
});

/* jslint esnext: true */

// Match these datetime components in a CLDR pattern, except those in single quotes
var expDTComponents = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;
// trim patterns after transformations
var expPatternTrimmer = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
// Skip over patterns with these datetime components because we don't have data
// to back them up:
// timezone, weekday, amoung others
var unwantedDTCs = /[rqQASjJgwWIQq]/; // xXVO were removed from this list in favor of computing matches with timeZoneName values but printing as empty string

var dtKeys = ["era", "year", "month", "day", "weekday", "quarter"];
var tmKeys = ["hour", "minute", "second", "hour12", "timeZoneName"];

function isDateFormatOnly(obj) {
    for (var i = 0; i < tmKeys.length; i += 1) {
        if (obj.hasOwnProperty(tmKeys[i])) {
            return false;
        }
    }
    return true;
}

function isTimeFormatOnly(obj) {
    for (var i = 0; i < dtKeys.length; i += 1) {
        if (obj.hasOwnProperty(dtKeys[i])) {
            return false;
        }
    }
    return true;
}

function joinDateAndTimeFormats(dateFormatObj, timeFormatObj) {
    var o = { _: {} };
    for (var i = 0; i < dtKeys.length; i += 1) {
        if (dateFormatObj[dtKeys[i]]) {
            o[dtKeys[i]] = dateFormatObj[dtKeys[i]];
        }
        if (dateFormatObj._[dtKeys[i]]) {
            o._[dtKeys[i]] = dateFormatObj._[dtKeys[i]];
        }
    }
    for (var j = 0; j < tmKeys.length; j += 1) {
        if (timeFormatObj[tmKeys[j]]) {
            o[tmKeys[j]] = timeFormatObj[tmKeys[j]];
        }
        if (timeFormatObj._[tmKeys[j]]) {
            o._[tmKeys[j]] = timeFormatObj._[tmKeys[j]];
        }
    }
    return o;
}

function computeFinalPatterns(formatObj) {
    // From http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns:
    //  'In patterns, two single quotes represents a literal single quote, either
    //   inside or outside single quotes. Text within single quotes is not
    //   interpreted in any way (except for two adjacent single quotes).'
    formatObj.pattern12 = formatObj.extendedPattern.replace(/'([^']*)'/g, function ($0, literal) {
        return literal ? literal : "'";
    });

    // pattern 12 is always the default. we can produce the 24 by removing {ampm}
    formatObj.pattern = formatObj.pattern12.replace('{ampm}', '').replace(expPatternTrimmer, '');
    return formatObj;
}

function expDTComponentsMeta($0, formatObj) {
    switch ($0.charAt(0)) {
        // --- Era
        case 'G':
            formatObj.era = ['short', 'short', 'short', 'long', 'narrow'][$0.length - 1];
            return '{era}';

        // --- Year
        case 'y':
        case 'Y':
        case 'u':
        case 'U':
        case 'r':
            formatObj.year = $0.length === 2 ? '2-digit' : 'numeric';
            return '{year}';

        // --- Quarter (not supported in this polyfill)
        case 'Q':
        case 'q':
            formatObj.quarter = ['numeric', '2-digit', 'short', 'long', 'narrow'][$0.length - 1];
            return '{quarter}';

        // --- Month
        case 'M':
        case 'L':
            formatObj.month = ['numeric', '2-digit', 'short', 'long', 'narrow'][$0.length - 1];
            return '{month}';

        // --- Week (not supported in this polyfill)
        case 'w':
            // week of the year
            formatObj.week = $0.length === 2 ? '2-digit' : 'numeric';
            return '{weekday}';
        case 'W':
            // week of the month
            formatObj.week = 'numeric';
            return '{weekday}';

        // --- Day
        case 'd':
            // day of the month
            formatObj.day = $0.length === 2 ? '2-digit' : 'numeric';
            return '{day}';
        case 'D': // day of the year
        case 'F': // day of the week
        case 'g':
            // 1..n: Modified Julian day
            formatObj.day = 'numeric';
            return '{day}';

        // --- Week Day
        case 'E':
            // day of the week
            formatObj.weekday = ['short', 'short', 'short', 'long', 'narrow', 'short'][$0.length - 1];
            return '{weekday}';
        case 'e':
            // local day of the week
            formatObj.weekday = ['numeric', '2-digit', 'short', 'long', 'narrow', 'short'][$0.length - 1];
            return '{weekday}';
        case 'c':
            // stand alone local day of the week
            formatObj.weekday = ['numeric', undefined, 'short', 'long', 'narrow', 'short'][$0.length - 1];
            return '{weekday}';

        // --- Period
        case 'a': // AM, PM
        case 'b': // am, pm, noon, midnight
        case 'B':
            // flexible day periods
            formatObj.hour12 = true;
            return '{ampm}';

        // --- Hour
        case 'h':
        case 'H':
            formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';
            return '{hour}';
        case 'k':
        case 'K':
            formatObj.hour12 = true; // 12-hour-cycle time formats (using h or K)
            formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';
            return '{hour}';

        // --- Minute
        case 'm':
            formatObj.minute = $0.length === 2 ? '2-digit' : 'numeric';
            return '{minute}';

        // --- Second
        case 's':
            formatObj.second = $0.length === 2 ? '2-digit' : 'numeric';
            return '{second}';
        case 'S':
        case 'A':
            formatObj.second = 'numeric';
            return '{second}';

        // --- Timezone
        case 'z': // 1..3, 4: specific non-location format
        case 'Z': // 1..3, 4, 5: The ISO8601 varios formats
        case 'O': // 1, 4: miliseconds in day short, long
        case 'v': // 1, 4: generic non-location format
        case 'V': // 1, 2, 3, 4: time zone ID or city
        case 'X': // 1, 2, 3, 4: The ISO8601 varios formats
        case 'x':
            // 1, 2, 3, 4: The ISO8601 varios formats
            // this polyfill only supports much, for now, we are just doing something dummy
            formatObj.timeZoneName = $0.length < 4 ? 'short' : 'long';
            return '{timeZoneName}';
    }
}

/**
 * Converts the CLDR availableFormats into the objects and patterns required by
 * the ECMAScript Internationalization API specification.
 */
function createDateTimeFormat(skeleton, pattern) {
    // we ignore certain patterns that are unsupported to avoid this expensive op.
    if (unwantedDTCs.test(pattern)) return undefined;

    var formatObj = {
        originalPattern: pattern,
        _: {}
    };

    // Replace the pattern string with the one required by the specification, whilst
    // at the same time evaluating it for the subsets and formats
    formatObj.extendedPattern = pattern.replace(expDTComponents, function ($0) {
        // See which symbol we're dealing with
        return expDTComponentsMeta($0, formatObj._);
    });

    // Match the skeleton string with the one required by the specification
    // this implementation is based on the Date Field Symbol Table:
    // http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
    // Note: we are adding extra data to the formatObject even though this polyfill
    //       might not support it.
    skeleton.replace(expDTComponents, function ($0) {
        // See which symbol we're dealing with
        return expDTComponentsMeta($0, formatObj);
    });

    return computeFinalPatterns(formatObj);
}

/**
 * Processes DateTime formats from CLDR to an easier-to-parse format.
 * the result of this operation should be cached the first time a particular
 * calendar is analyzed.
 *
 * The specification requires we support at least the following subsets of
 * date/time components:
 *
 *   - 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second'
 *   - 'weekday', 'year', 'month', 'day'
 *   - 'year', 'month', 'day'
 *   - 'year', 'month'
 *   - 'month', 'day'
 *   - 'hour', 'minute', 'second'
 *   - 'hour', 'minute'
 *
 * We need to cherry pick at least these subsets from the CLDR data and convert
 * them into the pattern objects used in the ECMA-402 API.
 */
function createDateTimeFormats(formats) {
    var availableFormats = formats.availableFormats;
    var timeFormats = formats.timeFormats;
    var dateFormats = formats.dateFormats;
    var result = [];
    var skeleton = void 0,
        pattern = void 0,
        computed = void 0,
        i = void 0,
        j = void 0;
    var timeRelatedFormats = [];
    var dateRelatedFormats = [];

    // Map available (custom) formats into a pattern for createDateTimeFormats
    for (skeleton in availableFormats) {
        if (availableFormats.hasOwnProperty(skeleton)) {
            pattern = availableFormats[skeleton];
            computed = createDateTimeFormat(skeleton, pattern);
            if (computed) {
                result.push(computed);
                // in some cases, the format is only displaying date specific props
                // or time specific props, in which case we need to also produce the
                // combined formats.
                if (isDateFormatOnly(computed)) {
                    dateRelatedFormats.push(computed);
                } else if (isTimeFormatOnly(computed)) {
                    timeRelatedFormats.push(computed);
                }
            }
        }
    }

    // Map time formats into a pattern for createDateTimeFormats
    for (skeleton in timeFormats) {
        if (timeFormats.hasOwnProperty(skeleton)) {
            pattern = timeFormats[skeleton];
            computed = createDateTimeFormat(skeleton, pattern);
            if (computed) {
                result.push(computed);
                timeRelatedFormats.push(computed);
            }
        }
    }

    // Map date formats into a pattern for createDateTimeFormats
    for (skeleton in dateFormats) {
        if (dateFormats.hasOwnProperty(skeleton)) {
            pattern = dateFormats[skeleton];
            computed = createDateTimeFormat(skeleton, pattern);
            if (computed) {
                result.push(computed);
                dateRelatedFormats.push(computed);
            }
        }
    }

    // combine custom time and custom date formats when they are orthogonals to complete the
    // formats supported by CLDR.
    // This Algo is based on section "Missing Skeleton Fields" from:
    // http://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems
    for (i = 0; i < timeRelatedFormats.length; i += 1) {
        for (j = 0; j < dateRelatedFormats.length; j += 1) {
            if (dateRelatedFormats[j].month === 'long') {
                pattern = dateRelatedFormats[j].weekday ? formats.full : formats.long;
            } else if (dateRelatedFormats[j].month === 'short') {
                pattern = formats.medium;
            } else {
                pattern = formats.short;
            }
            computed = joinDateAndTimeFormats(dateRelatedFormats[j], timeRelatedFormats[i]);
            computed.originalPattern = pattern;
            computed.extendedPattern = pattern.replace('{0}', timeRelatedFormats[i].extendedPattern).replace('{1}', dateRelatedFormats[j].extendedPattern).replace(/^[,\s]+|[,\s]+$/gi, '');
            result.push(computeFinalPatterns(computed));
        }
    }

    return result;
}

// this represents the exceptions of the rule that are not covered by CLDR availableFormats
// for single property configurations, they play no role when using multiple properties, and
// those that are not in this table, are not exceptions or are not covered by the data we
// provide.
var validSyntheticProps = {
    second: {
        numeric: 's',
        '2-digit': 'ss'
    },
    minute: {
        numeric: 'm',
        '2-digit': 'mm'
    },
    year: {
        numeric: 'y',
        '2-digit': 'yy'
    },
    day: {
        numeric: 'd',
        '2-digit': 'dd'
    },
    month: {
        numeric: 'L',
        '2-digit': 'LL',
        narrow: 'LLLLL',
        short: 'LLL',
        long: 'LLLL'
    },
    weekday: {
        narrow: 'ccccc',
        short: 'ccc',
        long: 'cccc'
    }
};

function generateSyntheticFormat(propName, propValue) {
    if (validSyntheticProps[propName] && validSyntheticProps[propName][propValue]) {
        var _ref2;

        return _ref2 = {
            originalPattern: validSyntheticProps[propName][propValue],
            _: defineProperty$1({}, propName, propValue),
            extendedPattern: "{" + propName + "}"
        }, defineProperty$1(_ref2, propName, propValue), defineProperty$1(_ref2, "pattern12", "{" + propName + "}"), defineProperty$1(_ref2, "pattern", "{" + propName + "}"), _ref2;
    }
}

// An object map of date component keys, saves using a regex later
var dateWidths = objCreate(null, { narrow: {}, short: {}, long: {} });

/**
 * Returns a string for a date component, resolved using multiple inheritance as specified
 * as specified in the Unicode Technical Standard 35.
 */
function resolveDateString(data, ca, component, width, key) {
    // From http://www.unicode.org/reports/tr35/tr35.html#Multiple_Inheritance:
    // 'In clearly specified instances, resources may inherit from within the same locale.
    //  For example, ... the Buddhist calendar inherits from the Gregorian calendar.'
    var obj = data[ca] && data[ca][component] ? data[ca][component] : data.gregory[component],


    // "sideways" inheritance resolves strings when a key doesn't exist
    alts = {
        narrow: ['short', 'long'],
        short: ['long', 'narrow'],
        long: ['short', 'narrow']
    },


    //
    resolved = hop.call(obj, width) ? obj[width] : hop.call(obj, alts[width][0]) ? obj[alts[width][0]] : obj[alts[width][1]];

    // `key` wouldn't be specified for components 'dayPeriods'
    return key !== null ? resolved[key] : resolved;
}

// Define the DateTimeFormat constructor internally so it cannot be tainted
function DateTimeFormatConstructor() {
    var locales = arguments[0];
    var options = arguments[1];

    if (!this || this === Intl) {
        return new Intl.DateTimeFormat(locales, options);
    }
    return InitializeDateTimeFormat(toObject(this), locales, options);
}

defineProperty(Intl, 'DateTimeFormat', {
    configurable: true,
    writable: true,
    value: DateTimeFormatConstructor
});

// Must explicitly set prototypes as unwritable
defineProperty(DateTimeFormatConstructor, 'prototype', {
    writable: false
});

/**
 * The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat
 * (which must be an object), locales, and options. It initializes dateTimeFormat as a
 * DateTimeFormat object.
 */
function /* 12.1.1.1 */InitializeDateTimeFormat(dateTimeFormat, locales, options) {
    // This will be a internal properties object if we're not already initialized
    var internal = getInternalProperties(dateTimeFormat);

    // Create an object whose props can be used to restore the values of RegExp props
    var regexpRestore = createRegExpRestore();

    // 1. If dateTimeFormat has an [[initializedIntlObject]] internal property with
    //    value true, throw a TypeError exception.
    if (internal['[[initializedIntlObject]]'] === true) throw new TypeError('`this` object has already been initialized as an Intl object');

    // Need this to access the `internal` object
    defineProperty(dateTimeFormat, '__getInternalProperties', {
        value: function value() {
            // NOTE: Non-standard, for internal use only
            if (arguments[0] === secret) return internal;
        }
    });

    // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.
    internal['[[initializedIntlObject]]'] = true;

    // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList
    //    abstract operation (defined in 9.2.1) with argument locales.
    var requestedLocales = CanonicalizeLocaleList(locales);

    // 4. Let options be the result of calling the ToDateTimeOptions abstract
    //    operation (defined below) with arguments options, "any", and "date".
    options = ToDateTimeOptions(options, 'any', 'date');

    // 5. Let opt be a new Record.
    var opt = new Record();

    // 6. Let matcher be the result of calling the GetOption abstract operation
    //    (defined in 9.2.9) with arguments options, "localeMatcher", "string", a List
    //    containing the two String values "lookup" and "best fit", and "best fit".
    var matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');

    // 7. Set opt.[[localeMatcher]] to matcher.
    opt['[[localeMatcher]]'] = matcher;

    // 8. Let DateTimeFormat be the standard built-in object that is the initial
    //    value of Intl.DateTimeFormat.
    var DateTimeFormat = internals.DateTimeFormat; // This is what we *really* need

    // 9. Let localeData be the value of the [[localeData]] internal property of
    //    DateTimeFormat.
    var localeData = DateTimeFormat['[[localeData]]'];

    // 10. Let r be the result of calling the ResolveLocale abstract operation
    //     (defined in 9.2.5) with the [[availableLocales]] internal property of
    //      DateTimeFormat, requestedLocales, opt, the [[relevantExtensionKeys]]
    //      internal property of DateTimeFormat, and localeData.
    var r = ResolveLocale(DateTimeFormat['[[availableLocales]]'], requestedLocales, opt, DateTimeFormat['[[relevantExtensionKeys]]'], localeData);

    // 11. Set the [[locale]] internal property of dateTimeFormat to the value of
    //     r.[[locale]].
    internal['[[locale]]'] = r['[[locale]]'];

    // 12. Set the [[calendar]] internal property of dateTimeFormat to the value of
    //     r.[[ca]].
    internal['[[calendar]]'] = r['[[ca]]'];

    // 13. Set the [[numberingSystem]] internal property of dateTimeFormat to the value of
    //     r.[[nu]].
    internal['[[numberingSystem]]'] = r['[[nu]]'];

    // The specification doesn't tell us to do this, but it's helpful later on
    internal['[[dataLocale]]'] = r['[[dataLocale]]'];

    // 14. Let dataLocale be the value of r.[[dataLocale]].
    var dataLocale = r['[[dataLocale]]'];

    // 15. Let tz be the result of calling the [[Get]] internal method of options with
    //     argument "timeZone".
    var tz = options.timeZone;

    // 16. If tz is not undefined, then
    if (tz !== undefined) {
        // a. Let tz be ToString(tz).
        // b. Convert tz to upper case as described in 6.1.
        //    NOTE: If an implementation accepts additional time zone values, as permitted
        //          under certain conditions by the Conformance clause, different casing
        //          rules apply.
        tz = toLatinUpperCase(tz);

        // c. If tz is not "UTC", then throw a RangeError exception.
        // ###TODO: accept more time zones###
        if (tz !== 'UTC') throw new RangeError('timeZone is not supported.');
    }

    // 17. Set the [[timeZone]] internal property of dateTimeFormat to tz.
    internal['[[timeZone]]'] = tz;

    // 18. Let opt be a new Record.
    opt = new Record();

    // 19. For each row of Table 3, except the header row, do:
    for (var prop in dateTimeComponents) {
        if (!hop.call(dateTimeComponents, prop)) continue;

        // 20. Let prop be the name given in the Property column of the row.
        // 21. Let value be the result of calling the GetOption abstract operation,
        //     passing as argument options, the name given in the Property column of the
        //     row, "string", a List containing the strings given in the Values column of
        //     the row, and undefined.
        var value = GetOption(options, prop, 'string', dateTimeComponents[prop]);

        // 22. Set opt.[[<prop>]] to value.
        opt['[[' + prop + ']]'] = value;
    }

    // Assigned a value below
    var bestFormat = void 0;

    // 23. Let dataLocaleData be the result of calling the [[Get]] internal method of
    //     localeData with argument dataLocale.
    var dataLocaleData = localeData[dataLocale];

    // 24. Let formats be the result of calling the [[Get]] internal method of
    //     dataLocaleData with argument "formats".
    //     Note: we process the CLDR formats into the spec'd structure
    var formats = ToDateTimeFormats(dataLocaleData.formats);

    // 25. Let matcher be the result of calling the GetOption abstract operation with
    //     arguments options, "formatMatcher", "string", a List containing the two String
    //     values "basic" and "best fit", and "best fit".
    matcher = GetOption(options, 'formatMatcher', 'string', new List('basic', 'best fit'), 'best fit');

    // Optimization: caching the processed formats as a one time operation by
    // replacing the initial structure from localeData
    dataLocaleData.formats = formats;

    // 26. If matcher is "basic", then
    if (matcher === 'basic') {
        // 27. Let bestFormat be the result of calling the BasicFormatMatcher abstract
        //     operation (defined below) with opt and formats.
        bestFormat = BasicFormatMatcher(opt, formats);

        // 28. Else
    } else {
        {
            // diverging
            var _hr = GetOption(options, 'hour12', 'boolean' /*, undefined, undefined*/);
            opt.hour12 = _hr === undefined ? dataLocaleData.hour12 : _hr;
        }
        // 29. Let bestFormat be the result of calling the BestFitFormatMatcher
        //     abstract operation (defined below) with opt and formats.
        bestFormat = BestFitFormatMatcher(opt, formats);
    }

    // 30. For each row in Table 3, except the header row, do
    for (var _prop in dateTimeComponents) {
        if (!hop.call(dateTimeComponents, _prop)) continue;

        // a. Let prop be the name given in the Property column of the row.
        // b. Let pDesc be the result of calling the [[GetOwnProperty]] internal method of
        //    bestFormat with argument prop.
        // c. If pDesc is not undefined, then
        if (hop.call(bestFormat, _prop)) {
            // i. Let p be the result of calling the [[Get]] internal method of bestFormat
            //    with argument prop.
            var p = bestFormat[_prop];
            {
                // diverging
                p = bestFormat._ && hop.call(bestFormat._, _prop) ? bestFormat._[_prop] : p;
            }

            // ii. Set the [[<prop>]] internal property of dateTimeFormat to p.
            internal['[[' + _prop + ']]'] = p;
        }
    }

    var pattern = void 0; // Assigned a value below

    // 31. Let hr12 be the result of calling the GetOption abstract operation with
    //     arguments options, "hour12", "boolean", undefined, and undefined.
    var hr12 = GetOption(options, 'hour12', 'boolean' /*, undefined, undefined*/);

    // 32. If dateTimeFormat has an internal property [[hour]], then
    if (internal['[[hour]]']) {
        // a. If hr12 is undefined, then let hr12 be the result of calling the [[Get]]
        //    internal method of dataLocaleData with argument "hour12".
        hr12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;

        // b. Set the [[hour12]] internal property of dateTimeFormat to hr12.
        internal['[[hour12]]'] = hr12;

        // c. If hr12 is true, then
        if (hr12 === true) {
            // i. Let hourNo0 be the result of calling the [[Get]] internal method of
            //    dataLocaleData with argument "hourNo0".
            var hourNo0 = dataLocaleData.hourNo0;

            // ii. Set the [[hourNo0]] internal property of dateTimeFormat to hourNo0.
            internal['[[hourNo0]]'] = hourNo0;

            // iii. Let pattern be the result of calling the [[Get]] internal method of
            //      bestFormat with argument "pattern12".
            pattern = bestFormat.pattern12;
        }

        // d. Else
        else
            // i. Let pattern be the result of calling the [[Get]] internal method of
            //    bestFormat with argument "pattern".
            pattern = bestFormat.pattern;
    }

    // 33. Else
    else
        // a. Let pattern be the result of calling the [[Get]] internal method of
        //    bestFormat with argument "pattern".
        pattern = bestFormat.pattern;

    // 34. Set the [[pattern]] internal property of dateTimeFormat to pattern.
    internal['[[pattern]]'] = pattern;

    // 35. Set the [[boundFormat]] internal property of dateTimeFormat to undefined.
    internal['[[boundFormat]]'] = undefined;

    // 36. Set the [[initializedDateTimeFormat]] internal property of dateTimeFormat to
    //     true.
    internal['[[initializedDateTimeFormat]]'] = true;

    // In ES3, we need to pre-bind the format() function
    if (es3) dateTimeFormat.format = GetFormatDateTime.call(dateTimeFormat);

    // Restore the RegExp properties
    regexpRestore();

    // Return the newly initialised object
    return dateTimeFormat;
}

/**
 * Several DateTimeFormat algorithms use values from the following table, which provides
 * property names and allowable values for the components of date and time formats:
 */
var dateTimeComponents = {
    weekday: ["narrow", "short", "long"],
    era: ["narrow", "short", "long"],
    year: ["2-digit", "numeric"],
    month: ["2-digit", "numeric", "narrow", "short", "long"],
    day: ["2-digit", "numeric"],
    hour: ["2-digit", "numeric"],
    minute: ["2-digit", "numeric"],
    second: ["2-digit", "numeric"],
    timeZoneName: ["short", "long"]
};

/**
 * When the ToDateTimeOptions abstract operation is called with arguments options,
 * required, and defaults, the following steps are taken:
 */
function ToDateTimeFormats(formats) {
    if (Object.prototype.toString.call(formats) === '[object Array]') {
        return formats;
    }
    return createDateTimeFormats(formats);
}

/**
 * When the ToDateTimeOptions abstract operation is called with arguments options,
 * required, and defaults, the following steps are taken:
 */
function ToDateTimeOptions(options, required, defaults) {
    // 1. If options is undefined, then let options be null, else let options be
    //    ToObject(options).
    if (options === undefined) options = null;else {
        // (#12) options needs to be a Record, but it also needs to inherit properties
        var opt2 = toObject(options);
        options = new Record();

        for (var k in opt2) {
            options[k] = opt2[k];
        }
    }

    // 2. Let create be the standard built-in function object defined in ES5, 15.2.3.5.
    var create = objCreate;

    // 3. Let options be the result of calling the [[Call]] internal method of create with
    //    undefined as the this value and an argument list containing the single item
    //    options.
    options = create(options);

    // 4. Let needDefaults be true.
    var needDefaults = true;

    // 5. If required is "date" or "any", then
    if (required === 'date' || required === 'any') {
        // a. For each of the property names "weekday", "year", "month", "day":
        // i. If the result of calling the [[Get]] internal method of options with the
        //    property name is not undefined, then let needDefaults be false.
        if (options.weekday !== undefined || options.year !== undefined || options.month !== undefined || options.day !== undefined) needDefaults = false;
    }

    // 6. If required is "time" or "any", then
    if (required === 'time' || required === 'any') {
        // a. For each of the property names "hour", "minute", "second":
        // i. If the result of calling the [[Get]] internal method of options with the
        //    property name is not undefined, then let needDefaults be false.
        if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined) needDefaults = false;
    }

    // 7. If needDefaults is true and defaults is either "date" or "all", then
    if (needDefaults && (defaults === 'date' || defaults === 'all'))
        // a. For each of the property names "year", "month", "day":
        // i. Call the [[DefineOwnProperty]] internal method of options with the
        //    property name, Property Descriptor {[[Value]]: "numeric", [[Writable]]:
        //    true, [[Enumerable]]: true, [[Configurable]]: true}, and false.
        options.year = options.month = options.day = 'numeric';

    // 8. If needDefaults is true and defaults is either "time" or "all", then
    if (needDefaults && (defaults === 'time' || defaults === 'all'))
        // a. For each of the property names "hour", "minute", "second":
        // i. Call the [[DefineOwnProperty]] internal method of options with the
        //    property name, Property Descriptor {[[Value]]: "numeric", [[Writable]]:
        //    true, [[Enumerable]]: true, [[Configurable]]: true}, and false.
        options.hour = options.minute = options.second = 'numeric';

    // 9. Return options.
    return options;
}

/**
 * When the BasicFormatMatcher abstract operation is called with two arguments options and
 * formats, the following steps are taken:
 */
function BasicFormatMatcher(options, formats) {
    // 1. Let removalPenalty be 120.
    var removalPenalty = 120;

    // 2. Let additionPenalty be 20.
    var additionPenalty = 20;

    // 3. Let longLessPenalty be 8.
    var longLessPenalty = 8;

    // 4. Let longMorePenalty be 6.
    var longMorePenalty = 6;

    // 5. Let shortLessPenalty be 6.
    var shortLessPenalty = 6;

    // 6. Let shortMorePenalty be 3.
    var shortMorePenalty = 3;

    // 7. Let bestScore be -Infinity.
    var bestScore = -Infinity;

    // 8. Let bestFormat be undefined.
    var bestFormat = void 0;

    // 9. Let i be 0.
    var i = 0;

    // 10. Assert: formats is an Array object.

    // 11. Let len be the result of calling the [[Get]] internal method of formats with argument "length".
    var len = formats.length;

    // 12. Repeat while i < len:
    while (i < len) {
        // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).
        var format = formats[i];

        // b. Let score be 0.
        var score = 0;

        // c. For each property shown in Table 3:
        for (var property in dateTimeComponents) {
            if (!hop.call(dateTimeComponents, property)) continue;

            // i. Let optionsProp be options.[[<property>]].
            var optionsProp = options['[[' + property + ']]'];

            // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format
            //     with argument property.
            // iii. If formatPropDesc is not undefined, then
            //     1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.
            var formatProp = hop.call(format, property) ? format[property] : undefined;

            // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by
            //     additionPenalty.
            if (optionsProp === undefined && formatProp !== undefined) score -= additionPenalty;

            // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by
            //    removalPenalty.
            else if (optionsProp !== undefined && formatProp === undefined) score -= removalPenalty;

                // vi. Else
                else {
                        // 1. Let values be the array ["2-digit", "numeric", "narrow", "short",
                        //    "long"].
                        var values = ['2-digit', 'numeric', 'narrow', 'short', 'long'];

                        // 2. Let optionsPropIndex be the index of optionsProp within values.
                        var optionsPropIndex = arrIndexOf.call(values, optionsProp);

                        // 3. Let formatPropIndex be the index of formatProp within values.
                        var formatPropIndex = arrIndexOf.call(values, formatProp);

                        // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).
                        var delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);

                        // 5. If delta = 2, decrease score by longMorePenalty.
                        if (delta === 2) score -= longMorePenalty;

                        // 6. Else if delta = 1, decrease score by shortMorePenalty.
                        else if (delta === 1) score -= shortMorePenalty;

                            // 7. Else if delta = -1, decrease score by shortLessPenalty.
                            else if (delta === -1) score -= shortLessPenalty;

                                // 8. Else if delta = -2, decrease score by longLessPenalty.
                                else if (delta === -2) score -= longLessPenalty;
                    }
        }

        // d. If score > bestScore, then
        if (score > bestScore) {
            // i. Let bestScore be score.
            bestScore = score;

            // ii. Let bestFormat be format.
            bestFormat = format;
        }

        // e. Increase i by 1.
        i++;
    }

    // 13. Return bestFormat.
    return bestFormat;
}

/**
 * When the BestFitFormatMatcher abstract operation is called with two arguments options
 * and formats, it performs implementation dependent steps, which should return a set of
 * component representations that a typical user of the selected locale would perceive as
 * at least as good as the one returned by BasicFormatMatcher.
 *
 * This polyfill defines the algorithm to be the same as BasicFormatMatcher,
 * with the addition of bonus points awarded where the requested format is of
 * the same data type as the potentially matching format.
 *
 * This algo relies on the concept of closest distance matching described here:
 * http://unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons
 * Typically a “best match” is found using a closest distance match, such as:
 *
 * Symbols requesting a best choice for the locale are replaced.
 *      j → one of {H, k, h, K}; C → one of {a, b, B}
 * -> Covered by cldr.js matching process
 *
 * For fields with symbols representing the same type (year, month, day, etc):
 *     Most symbols have a small distance from each other.
 *         M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...
 *     -> Covered by cldr.js matching process
 *
 *     Width differences among fields, other than those marking text vs numeric, are given small distance from each other.
 *         MMM ≅ MMMM
 *         MM ≅ M
 *     Numeric and text fields are given a larger distance from each other.
 *         MMM ≈ MM
 *     Symbols representing substantial differences (week of year vs week of month) are given much larger a distances from each other.
 *         d ≋ D; ...
 *     Missing or extra fields cause a match to fail. (But see Missing Skeleton Fields).
 *
 *
 * For example,
 *
 *     { month: 'numeric', day: 'numeric' }
 *
 * should match
 *
 *     { month: '2-digit', day: '2-digit' }
 *
 * rather than
 *
 *     { month: 'short', day: 'numeric' }
 *
 * This makes sense because a user requesting a formatted date with numeric parts would
 * not expect to see the returned format containing narrow, short or long part names
 */
function BestFitFormatMatcher(options, formats) {
    /** Diverging: this block implements the hack for single property configuration, eg.:
     *
     *      `new Intl.DateTimeFormat('en', {day: 'numeric'})`
     *
     * should produce a single digit with the day of the month. This is needed because
     * CLDR `availableFormats` data structure doesn't cover these cases.
     */
    {
        var optionsPropNames = [];
        for (var property in dateTimeComponents) {
            if (!hop.call(dateTimeComponents, property)) continue;

            if (options['[[' + property + ']]'] !== undefined) {
                optionsPropNames.push(property);
            }
        }
        if (optionsPropNames.length === 1) {
            var _bestFormat = generateSyntheticFormat(optionsPropNames[0], options['[[' + optionsPropNames[0] + ']]']);
            if (_bestFormat) {
                return _bestFormat;
            }
        }
    }

    // 1. Let removalPenalty be 120.
    var removalPenalty = 120;

    // 2. Let additionPenalty be 20.
    var additionPenalty = 20;

    // 3. Let longLessPenalty be 8.
    var longLessPenalty = 8;

    // 4. Let longMorePenalty be 6.
    var longMorePenalty = 6;

    // 5. Let shortLessPenalty be 6.
    var shortLessPenalty = 6;

    // 6. Let shortMorePenalty be 3.
    var shortMorePenalty = 3;

    var patternPenalty = 2;

    var hour12Penalty = 1;

    // 7. Let bestScore be -Infinity.
    var bestScore = -Infinity;

    // 8. Let bestFormat be undefined.
    var bestFormat = void 0;

    // 9. Let i be 0.
    var i = 0;

    // 10. Assert: formats is an Array object.

    // 11. Let len be the result of calling the [[Get]] internal method of formats with argument "length".
    var len = formats.length;

    // 12. Repeat while i < len:
    while (i < len) {
        // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).
        var format = formats[i];

        // b. Let score be 0.
        var score = 0;

        // c. For each property shown in Table 3:
        for (var _property in dateTimeComponents) {
            if (!hop.call(dateTimeComponents, _property)) continue;

            // i. Let optionsProp be options.[[<property>]].
            var optionsProp = options['[[' + _property + ']]'];

            // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format
            //     with argument property.
            // iii. If formatPropDesc is not undefined, then
            //     1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.
            var formatProp = hop.call(format, _property) ? format[_property] : undefined;

            // Diverging: using the default properties produced by the pattern/skeleton
            // to match it with user options, and apply a penalty
            var patternProp = hop.call(format._, _property) ? format._[_property] : undefined;
            if (optionsProp !== patternProp) {
                score -= patternPenalty;
            }

            // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by
            //     additionPenalty.
            if (optionsProp === undefined && formatProp !== undefined) score -= additionPenalty;

            // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by
            //    removalPenalty.
            else if (optionsProp !== undefined && formatProp === undefined) score -= removalPenalty;

                // vi. Else
                else {
                        // 1. Let values be the array ["2-digit", "numeric", "narrow", "short",
                        //    "long"].
                        var values = ['2-digit', 'numeric', 'narrow', 'short', 'long'];

                        // 2. Let optionsPropIndex be the index of optionsProp within values.
                        var optionsPropIndex = arrIndexOf.call(values, optionsProp);

                        // 3. Let formatPropIndex be the index of formatProp within values.
                        var formatPropIndex = arrIndexOf.call(values, formatProp);

                        // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).
                        var delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);

                        {
                            // diverging from spec
                            // When the bestFit argument is true, subtract additional penalty where data types are not the same
                            if (formatPropIndex <= 1 && optionsPropIndex >= 2 || formatPropIndex >= 2 && optionsPropIndex <= 1) {
                                // 5. If delta = 2, decrease score by longMorePenalty.
                                if (delta > 0) score -= longMorePenalty;else if (delta < 0) score -= longLessPenalty;
                            } else {
                                // 5. If delta = 2, decrease score by longMorePenalty.
                                if (delta > 1) score -= shortMorePenalty;else if (delta < -1) score -= shortLessPenalty;
                            }
                        }
                    }
        }

        {
            // diverging to also take into consideration differences between 12 or 24 hours
            // which is special for the best fit only.
            if (format._.hour12 !== options.hour12) {
                score -= hour12Penalty;
            }
        }

        // d. If score > bestScore, then
        if (score > bestScore) {
            // i. Let bestScore be score.
            bestScore = score;
            // ii. Let bestFormat be format.
            bestFormat = format;
        }

        // e. Increase i by 1.
        i++;
    }

    // 13. Return bestFormat.
    return bestFormat;
}

/* 12.2.3 */internals.DateTimeFormat = {
    '[[availableLocales]]': [],
    '[[relevantExtensionKeys]]': ['ca', 'nu'],
    '[[localeData]]': {}
};

/**
 * When the supportedLocalesOf method of Intl.DateTimeFormat is called, the
 * following steps are taken:
 */
/* 12.2.2 */
defineProperty(Intl.DateTimeFormat, 'supportedLocalesOf', {
    configurable: true,
    writable: true,
    value: fnBind.call(function (locales) {
        // Bound functions only have the `this` value altered if being used as a constructor,
        // this lets us imitate a native function that has no constructor
        if (!hop.call(this, '[[availableLocales]]')) throw new TypeError('supportedLocalesOf() is not a constructor');

        // Create an object whose props can be used to restore the values of RegExp props
        var regexpRestore = createRegExpRestore(),


        // 1. If options is not provided, then let options be undefined.
        options = arguments[1],


        // 2. Let availableLocales be the value of the [[availableLocales]] internal
        //    property of the standard built-in object that is the initial value of
        //    Intl.NumberFormat.

        availableLocales = this['[[availableLocales]]'],


        // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList
        //    abstract operation (defined in 9.2.1) with argument locales.
        requestedLocales = CanonicalizeLocaleList(locales);

        // Restore the RegExp properties
        regexpRestore();

        // 4. Return the result of calling the SupportedLocales abstract operation
        //    (defined in 9.2.8) with arguments availableLocales, requestedLocales,
        //    and options.
        return SupportedLocales(availableLocales, requestedLocales, options);
    }, internals.NumberFormat)
});

/**
 * This named accessor property returns a function that formats a number
 * according to the effective locale and the formatting options of this
 * DateTimeFormat object.
 */
/* 12.3.2 */defineProperty(Intl.DateTimeFormat.prototype, 'format', {
    configurable: true,
    get: GetFormatDateTime
});

function GetFormatDateTime() {
    var internal = this !== null && babelHelpers$1["typeof"](this) === 'object' && getInternalProperties(this);

    // Satisfy test 12.3_b
    if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for format() is not an initialized Intl.DateTimeFormat object.');

    // The value of the [[Get]] attribute is a function that takes the following
    // steps:

    // 1. If the [[boundFormat]] internal property of this DateTimeFormat object
    //    is undefined, then:
    if (internal['[[boundFormat]]'] === undefined) {
        // a. Let F be a Function object, with internal properties set as
        //    specified for built-in functions in ES5, 15, or successor, and the
        //    length property set to 0, that takes the argument date and
        //    performs the following steps:
        var F = function F() {
            var date = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];

            //   i. If date is not provided or is undefined, then let x be the
            //      result as if by the expression Date.now() where Date.now is
            //      the standard built-in function defined in ES5, 15.9.4.4.
            //  ii. Else let x be ToNumber(date).
            // iii. Return the result of calling the FormatDateTime abstract
            //      operation (defined below) with arguments this and x.
            var x = date === undefined ? Date.now() : toNumber(date);
            return FormatDateTime(this, x);
        };
        // b. Let bind be the standard built-in function object defined in ES5,
        //    15.3.4.5.
        // c. Let bf be the result of calling the [[Call]] internal method of
        //    bind with F as the this value and an argument list containing
        //    the single item this.
        var bf = fnBind.call(F, this);
        // d. Set the [[boundFormat]] internal property of this NumberFormat
        //    object to bf.
        internal['[[boundFormat]]'] = bf;
    }
    // Return the value of the [[boundFormat]] internal property of this
    // NumberFormat object.
    return internal['[[boundFormat]]'];
}

function formatToParts$1() {
    var date = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];

    var internal = this !== null && babelHelpers$1["typeof"](this) === 'object' && getInternalProperties(this);

    if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for formatToParts() is not an initialized Intl.DateTimeFormat object.');

    var x = date === undefined ? Date.now() : toNumber(date);
    return FormatToPartsDateTime(this, x);
}

Object.defineProperty(Intl.DateTimeFormat.prototype, 'formatToParts', {
    enumerable: false,
    writable: true,
    configurable: true,
    value: formatToParts$1
});

function CreateDateTimeParts(dateTimeFormat, x) {
    // 1. If x is not a finite Number, then throw a RangeError exception.
    if (!isFinite(x)) throw new RangeError('Invalid valid date passed to format');

    var internal = dateTimeFormat.__getInternalProperties(secret);

    // Creating restore point for properties on the RegExp object... please wait
    /* let regexpRestore = */createRegExpRestore(); // ###TODO: review this

    // 2. Let locale be the value of the [[locale]] internal property of dateTimeFormat.
    var locale = internal['[[locale]]'];

    // 3. Let nf be the result of creating a new NumberFormat object as if by the
    // expression new Intl.NumberFormat([locale], {useGrouping: false}) where
    // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.
    var nf = new Intl.NumberFormat([locale], { useGrouping: false });

    // 4. Let nf2 be the result of creating a new NumberFormat object as if by the
    // expression new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping:
    // false}) where Intl.NumberFormat is the standard built-in constructor defined in
    // 11.1.3.
    var nf2 = new Intl.NumberFormat([locale], { minimumIntegerDigits: 2, useGrouping: false });

    // 5. Let tm be the result of calling the ToLocalTime abstract operation (defined
    // below) with x, the value of the [[calendar]] internal property of dateTimeFormat,
    // and the value of the [[timeZone]] internal property of dateTimeFormat.
    var tm = ToLocalTime(x, internal['[[calendar]]'], internal['[[timeZone]]']);

    // 6. Let result be the value of the [[pattern]] internal property of dateTimeFormat.
    var pattern = internal['[[pattern]]'];

    // 7.
    var result = new List();

    // 8.
    var index = 0;

    // 9.
    var beginIndex = pattern.indexOf('{');

    // 10.
    var endIndex = 0;

    // Need the locale minus any extensions
    var dataLocale = internal['[[dataLocale]]'];

    // Need the calendar data from CLDR
    var localeData = internals.DateTimeFormat['[[localeData]]'][dataLocale].calendars;
    var ca = internal['[[calendar]]'];

    // 11.
    while (beginIndex !== -1) {
        var fv = void 0;
        // a.
        endIndex = pattern.indexOf('}', beginIndex);
        // b.
        if (endIndex === -1) {
            throw new Error('Unclosed pattern');
        }
        // c.
        if (beginIndex > index) {
            arrPush.call(result, {
                type: 'literal',
                value: pattern.substring(index, beginIndex)
            });
        }
        // d.
        var p = pattern.substring(beginIndex + 1, endIndex);
        // e.
        if (dateTimeComponents.hasOwnProperty(p)) {
            //   i. Let f be the value of the [[<p>]] internal property of dateTimeFormat.
            var f = internal['[[' + p + ']]'];
            //  ii. Let v be the value of tm.[[<p>]].
            var v = tm['[[' + p + ']]'];
            // iii. If p is "year" and v ≤ 0, then let v be 1 - v.
            if (p === 'year' && v <= 0) {
                v = 1 - v;
            }
            //  iv. If p is "month", then increase v by 1.
            else if (p === 'month') {
                    v++;
                }
                //   v. If p is "hour" and the value of the [[hour12]] internal property of
                //      dateTimeFormat is true, then
                else if (p === 'hour' && internal['[[hour12]]'] === true) {
                        // 1. Let v be v modulo 12.
                        v = v % 12;
                        // 2. If v is 0 and the value of the [[hourNo0]] internal property of
                        //    dateTimeFormat is true, then let v be 12.
                        if (v === 0 && internal['[[hourNo0]]'] === true) {
                            v = 12;
                        }
                    }

            //  vi. If f is "numeric", then
            if (f === 'numeric') {
                // 1. Let fv be the result of calling the FormatNumber abstract operation
                //    (defined in 11.3.2) with arguments nf and v.
                fv = FormatNumber(nf, v);
            }
            // vii. Else if f is "2-digit", then
            else if (f === '2-digit') {
                    // 1. Let fv be the result of calling the FormatNumber abstract operation
                    //    with arguments nf2 and v.
                    fv = FormatNumber(nf2, v);
                    // 2. If the length of fv is greater than 2, let fv be the substring of fv
                    //    containing the last two characters.
                    if (fv.length > 2) {
                        fv = fv.slice(-2);
                    }
                }
                // viii. Else if f is "narrow", "short", or "long", then let fv be a String
                //     value representing f in the desired form; the String value depends upon
                //     the implementation and the effective locale and calendar of
                //     dateTimeFormat. If p is "month", then the String value may also depend
                //     on whether dateTimeFormat has a [[day]] internal property. If p is
                //     "timeZoneName", then the String value may also depend on the value of
                //     the [[inDST]] field of tm.
                else if (f in dateWidths) {
                        switch (p) {
                            case 'month':
                                fv = resolveDateString(localeData, ca, 'months', f, tm['[[' + p + ']]']);
                                break;

                            case 'weekday':
                                try {
                                    fv = resolveDateString(localeData, ca, 'days', f, tm['[[' + p + ']]']);
                                    // fv = resolveDateString(ca.days, f)[tm['[['+ p +']]']];
                                } catch (e) {
                                    throw new Error('Could not find weekday data for locale ' + locale);
                                }
                                break;

                            case 'timeZoneName':
                                fv = ''; // ###TODO
                                break;

                            case 'era':
                                try {
                                    fv = resolveDateString(localeData, ca, 'eras', f, tm['[[' + p + ']]']);
                                } catch (e) {
                                    throw new Error('Could not find era data for locale ' + locale);
                                }
                                break;

                            default:
                                fv = tm['[[' + p + ']]'];
                        }
                    }
            // ix
            arrPush.call(result, {
                type: p,
                value: fv
            });
            // f.
        } else if (p === 'ampm') {
            // i.
            var _v = tm['[[hour]]'];
            // ii./iii.
            fv = resolveDateString(localeData, ca, 'dayPeriods', _v > 11 ? 'pm' : 'am', null);
            // iv.
            arrPush.call(result, {
                type: 'dayPeriod',
                value: fv
            });
            // g.
        } else {
            arrPush.call(result, {
                type: 'literal',
                value: pattern.substring(beginIndex, endIndex + 1)
            });
        }
        // h.
        index = endIndex + 1;
        // i.
        beginIndex = pattern.indexOf('{', index);
    }
    // 12.
    if (endIndex < pattern.length - 1) {
        arrPush.call(result, {
            type: 'literal',
            value: pattern.substr(endIndex + 1)
        });
    }
    // 13.
    return result;
}

/**
 * When the FormatDateTime abstract operation is called with arguments dateTimeFormat
 * (which must be an object initialized as a DateTimeFormat) and x (which must be a Number
 * value), it returns a String value representing x (interpreted as a time value as
 * specified in ES5, 15.9.1.1) according to the effective locale and the formatting
 * options of dateTimeFormat.
 */
function FormatDateTime(dateTimeFormat, x) {
    var parts = CreateDateTimeParts(dateTimeFormat, x);
    var result = '';

    for (var i = 0; parts.length > i; i++) {
        var part = parts[i];
        result += part.value;
    }
    return result;
}

function FormatToPartsDateTime(dateTimeFormat, x) {
    var parts = CreateDateTimeParts(dateTimeFormat, x);
    var result = [];
    for (var i = 0; parts.length > i; i++) {
        var part = parts[i];
        result.push({
            type: part.type,
            value: part.value
        });
    }
    return result;
}

/**
 * When the ToLocalTime abstract operation is called with arguments date, calendar, and
 * timeZone, the following steps are taken:
 */
function ToLocalTime(date, calendar, timeZone) {
    // 1. Apply calendrical calculations on date for the given calendar and time zone to
    //    produce weekday, era, year, month, day, hour, minute, second, and inDST values.
    //    The calculations should use best available information about the specified
    //    calendar and time zone. If the calendar is "gregory", then the calculations must
    //    match the algorithms specified in ES5, 15.9.1, except that calculations are not
    //    bound by the restrictions on the use of best available information on time zones
    //    for local time zone adjustment and daylight saving time adjustment imposed by
    //    ES5, 15.9.1.7 and 15.9.1.8.
    // ###TODO###
    var d = new Date(date),
        m = 'get' + (timeZone || '');

    // 2. Return a Record with fields [[weekday]], [[era]], [[year]], [[month]], [[day]],
    //    [[hour]], [[minute]], [[second]], and [[inDST]], each with the corresponding
    //    calculated value.
    return new Record({
        '[[weekday]]': d[m + 'Day'](),
        '[[era]]': +(d[m + 'FullYear']() >= 0),
        '[[year]]': d[m + 'FullYear'](),
        '[[month]]': d[m + 'Month'](),
        '[[day]]': d[m + 'Date'](),
        '[[hour]]': d[m + 'Hours'](),
        '[[minute]]': d[m + 'Minutes'](),
        '[[second]]': d[m + 'Seconds'](),
        '[[inDST]]': false // ###TODO###
    });
}

/**
 * The function returns a new object whose properties and attributes are set as if
 * constructed by an object literal assigning to each of the following properties the
 * value of the corresponding internal property of this DateTimeFormat object (see 12.4):
 * locale, calendar, numberingSystem, timeZone, hour12, weekday, era, year, month, day,
 * hour, minute, second, and timeZoneName. Properties whose corresponding internal
 * properties are not present are not assigned.
 */
/* 12.3.3 */defineProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', {
    writable: true,
    configurable: true,
    value: function value() {
        var prop = void 0,
            descs = new Record(),
            props = ['locale', 'calendar', 'numberingSystem', 'timeZone', 'hour12', 'weekday', 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName'],
            internal = this !== null && babelHelpers$1["typeof"](this) === 'object' && getInternalProperties(this);

        // Satisfy test 12.3_b
        if (!internal || !internal['[[initializedDateTimeFormat]]']) throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.DateTimeFormat object.');

        for (var i = 0, max = props.length; i < max; i++) {
            if (hop.call(internal, prop = '[[' + props[i] + ']]')) descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };
        }

        return objCreate({}, descs);
    }
});

var ls = Intl.__localeSensitiveProtos = {
    Number: {},
    Date: {}
};

/**
 * When the toLocaleString method is called with optional arguments locales and options,
 * the following steps are taken:
 */
/* 13.2.1 */ls.Number.toLocaleString = function () {
    // Satisfy test 13.2.1_1
    if (Object.prototype.toString.call(this) !== '[object Number]') throw new TypeError('`this` value must be a number for Number.prototype.toLocaleString()');

    // 1. Let x be this Number value (as defined in ES5, 15.7.4).
    // 2. If locales is not provided, then let locales be undefined.
    // 3. If options is not provided, then let options be undefined.
    // 4. Let numberFormat be the result of creating a new object as if by the
    //    expression new Intl.NumberFormat(locales, options) where
    //    Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.
    // 5. Return the result of calling the FormatNumber abstract operation
    //    (defined in 11.3.2) with arguments numberFormat and x.
    return FormatNumber(new NumberFormatConstructor(arguments[0], arguments[1]), this);
};

/**
 * When the toLocaleString method is called with optional arguments locales and options,
 * the following steps are taken:
 */
/* 13.3.1 */ls.Date.toLocaleString = function () {
    // Satisfy test 13.3.0_1
    if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleString()');

    // 1. Let x be this time value (as defined in ES5, 15.9.5).
    var x = +this;

    // 2. If x is NaN, then return "Invalid Date".
    if (isNaN(x)) return 'Invalid Date';

    // 3. If locales is not provided, then let locales be undefined.
    var locales = arguments[0];

    // 4. If options is not provided, then let options be undefined.
    var options = arguments[1];

    // 5. Let options be the result of calling the ToDateTimeOptions abstract
    //    operation (defined in 12.1.1) with arguments options, "any", and "all".
    options = ToDateTimeOptions(options, 'any', 'all');

    // 6. Let dateTimeFormat be the result of creating a new object as if by the
    //    expression new Intl.DateTimeFormat(locales, options) where
    //    Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.
    var dateTimeFormat = new DateTimeFormatConstructor(locales, options);

    // 7. Return the result of calling the FormatDateTime abstract operation (defined
    //    in 12.3.2) with arguments dateTimeFormat and x.
    return FormatDateTime(dateTimeFormat, x);
};

/**
 * When the toLocaleDateString method is called with optional arguments locales and
 * options, the following steps are taken:
 */
/* 13.3.2 */ls.Date.toLocaleDateString = function () {
    // Satisfy test 13.3.0_1
    if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleDateString()');

    // 1. Let x be this time value (as defined in ES5, 15.9.5).
    var x = +this;

    // 2. If x is NaN, then return "Invalid Date".
    if (isNaN(x)) return 'Invalid Date';

    // 3. If locales is not provided, then let locales be undefined.
    var locales = arguments[0],


    // 4. If options is not provided, then let options be undefined.
    options = arguments[1];

    // 5. Let options be the result of calling the ToDateTimeOptions abstract
    //    operation (defined in 12.1.1) with arguments options, "date", and "date".
    options = ToDateTimeOptions(options, 'date', 'date');

    // 6. Let dateTimeFormat be the result of creating a new object as if by the
    //    expression new Intl.DateTimeFormat(locales, options) where
    //    Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.
    var dateTimeFormat = new DateTimeFormatConstructor(locales, options);

    // 7. Return the result of calling the FormatDateTime abstract operation (defined
    //    in 12.3.2) with arguments dateTimeFormat and x.
    return FormatDateTime(dateTimeFormat, x);
};

/**
 * When the toLocaleTimeString method is called with optional arguments locales and
 * options, the following steps are taken:
 */
/* 13.3.3 */ls.Date.toLocaleTimeString = function () {
    // Satisfy test 13.3.0_1
    if (Object.prototype.toString.call(this) !== '[object Date]') throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleTimeString()');

    // 1. Let x be this time value (as defined in ES5, 15.9.5).
    var x = +this;

    // 2. If x is NaN, then return "Invalid Date".
    if (isNaN(x)) return 'Invalid Date';

    // 3. If locales is not provided, then let locales be undefined.
    var locales = arguments[0];

    // 4. If options is not provided, then let options be undefined.
    var options = arguments[1];

    // 5. Let options be the result of calling the ToDateTimeOptions abstract
    //    operation (defined in 12.1.1) with arguments options, "time", and "time".
    options = ToDateTimeOptions(options, 'time', 'time');

    // 6. Let dateTimeFormat be the result of creating a new object as if by the
    //    expression new Intl.DateTimeFormat(locales, options) where
    //    Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.
    var dateTimeFormat = new DateTimeFormatConstructor(locales, options);

    // 7. Return the result of calling the FormatDateTime abstract operation (defined
    //    in 12.3.2) with arguments dateTimeFormat and x.
    return FormatDateTime(dateTimeFormat, x);
};

defineProperty(Intl, '__applyLocaleSensitivePrototypes', {
    writable: true,
    configurable: true,
    value: function value() {
        defineProperty(Number.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Number.toLocaleString });
        // Need this here for IE 8, to avoid the _DontEnum_ bug
        defineProperty(Date.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Date.toLocaleString });

        for (var k in ls.Date) {
            if (hop.call(ls.Date, k)) defineProperty(Date.prototype, k, { writable: true, configurable: true, value: ls.Date[k] });
        }
    }
});

/**
 * Can't really ship a single script with data for hundreds of locales, so we provide
 * this __addLocaleData method as a means for the developer to add the data on an
 * as-needed basis
 */
defineProperty(Intl, '__addLocaleData', {
    value: function value(data) {
        if (!IsStructurallyValidLanguageTag(data.locale)) throw new Error("Object passed doesn't identify itself with a valid language tag");

        addLocaleData(data, data.locale);
    }
});

function addLocaleData(data, tag) {
    // Both NumberFormat and DateTimeFormat require number data, so throw if it isn't present
    if (!data.number) throw new Error("Object passed doesn't contain locale data for Intl.NumberFormat");

    var locale = void 0,
        locales = [tag],
        parts = tag.split('-');

    // Create fallbacks for locale data with scripts, e.g. Latn, Hans, Vaii, etc
    if (parts.length > 2 && parts[1].length === 4) arrPush.call(locales, parts[0] + '-' + parts[2]);

    while (locale = arrShift.call(locales)) {
        // Add to NumberFormat internal properties as per 11.2.3
        arrPush.call(internals.NumberFormat['[[availableLocales]]'], locale);
        internals.NumberFormat['[[localeData]]'][locale] = data.number;

        // ...and DateTimeFormat internal properties as per 12.2.3
        if (data.date) {
            data.date.nu = data.number.nu;
            arrPush.call(internals.DateTimeFormat['[[availableLocales]]'], locale);
            internals.DateTimeFormat['[[localeData]]'][locale] = data.date;
        }
    }

    // If this is the first set of locale data added, make it the default
    if (defaultLocale === undefined) setDefaultLocale(tag);
}

defineProperty(Intl, '__disableRegExpRestore', {
    value: function value() {
        internals.disableRegExpRestore = true;
    }
});

module.exports = Intl;

/***/ }),

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


var content = __webpack_require__(2634);

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) {}

/***/ }),

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


var content = __webpack_require__(6773);

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) {}

/***/ }),

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


var content = __webpack_require__(8020);

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) {}

/***/ }),

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


var content = __webpack_require__(3220);

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) {}

/***/ }),

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


var content = __webpack_require__(5224);

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) {}

/***/ }),

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


var content = __webpack_require__(9278);

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) {}

/***/ }),

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


var content = __webpack_require__(9362);

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) {}

/***/ }),

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


var content = __webpack_require__(141);

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) {}

/***/ }),

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


var content = __webpack_require__(5288);

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) {}

/***/ }),

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


var content = __webpack_require__(2896);

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) {}

/***/ }),

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


var content = __webpack_require__(8949);

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) {}

/***/ }),

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


var content = __webpack_require__(4014);

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) {}

/***/ }),

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


var content = __webpack_require__(7586);

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) {}

/***/ }),

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


var content = __webpack_require__(8363);

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) {}

/***/ }),

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


var content = __webpack_require__(7767);

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) {}

/***/ }),

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


var content = __webpack_require__(5663);

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) {}

/***/ }),

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


var content = __webpack_require__(458);

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) {}

/***/ }),

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


var content = __webpack_require__(8453);

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) {}

/***/ }),

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


var content = __webpack_require__(790);

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) {}

/***/ }),

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


var content = __webpack_require__(2043);

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) {}

/***/ }),

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


var content = __webpack_require__(1294);

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) {}

/***/ }),

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


var content = __webpack_require__(2974);

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) {}

/***/ }),

/***/ 2407:
/***/ ((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) {}

/***/ }),

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


var content = __webpack_require__(8832);

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) {}

/***/ }),

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


var content = __webpack_require__(3637);

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) {}

/***/ }),

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


var content = __webpack_require__(1535);

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) {}

/***/ }),

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


var content = __webpack_require__(875);

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) {}

/***/ }),

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


var content = __webpack_require__(9008);

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) {}

/***/ }),

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


var content = __webpack_require__(7256);

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) {}

/***/ }),

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


var content = __webpack_require__(3892);

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) {}

/***/ }),

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


var content = __webpack_require__(1097);

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) {}

/***/ }),

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


var content = __webpack_require__(3486);

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) {}

/***/ }),

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


var content = __webpack_require__(4001);

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) {}

/***/ }),

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


var content = __webpack_require__(6083);

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) {}

/***/ }),

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


var content = __webpack_require__(9366);

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) {}

/***/ }),

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


var content = __webpack_require__(4517);

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) {}

/***/ }),

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


var content = __webpack_require__(7008);

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) {}

/***/ }),

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


var content = __webpack_require__(522);

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) {}

/***/ }),

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


var content = __webpack_require__(7078);

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) {}

/***/ }),

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


var content = __webpack_require__(6049);

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) {}

/***/ }),

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


var content = __webpack_require__(4284);

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) {}

/***/ }),

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


var content = __webpack_require__(1527);

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) {}

/***/ }),

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


var content = __webpack_require__(1139);

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) {}

/***/ }),

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


var content = __webpack_require__(6208);

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) {}

/***/ }),

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


var content = __webpack_require__(1501);

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__(9446);

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) {}

/***/ }),

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


var content = __webpack_require__(1741);

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) {}

/***/ }),

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


var content = __webpack_require__(4813);

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) {}

/***/ }),

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


var content = __webpack_require__(4745);

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) {}

/***/ }),

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


var content = __webpack_require__(9121);

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) {}

/***/ }),

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


var content = __webpack_require__(4521);

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) {}

/***/ }),

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


var content = __webpack_require__(9677);

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) {}

/***/ }),

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


var content = __webpack_require__(2893);

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) {}

/***/ }),

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


var content = __webpack_require__(4110);

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) {}

/***/ }),

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


var content = __webpack_require__(2774);

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) {}

/***/ }),

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


var content = __webpack_require__(6952);

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) {}

/***/ }),

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


var content = __webpack_require__(2467);

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) {}

/***/ }),

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


var content = __webpack_require__(8061);

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) {}

/***/ }),

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


var content = __webpack_require__(7292);

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) {}

/***/ }),

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


var content = __webpack_require__(3979);

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) {}

/***/ }),

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


var content = __webpack_require__(7871);

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) {}

/***/ }),

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


var content = __webpack_require__(2189);

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) {}

/***/ }),

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


var content = __webpack_require__(2336);

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) {}

/***/ }),

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


var content = __webpack_require__(657);

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) {}

/***/ }),

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


var content = __webpack_require__(228);

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) {}

/***/ }),

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


var content = __webpack_require__(3526);

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) {}

/***/ }),

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


var content = __webpack_require__(7188);

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) {}

/***/ }),

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


var content = __webpack_require__(5490);

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) {}

/***/ }),

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


var content = __webpack_require__(6329);

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) {}

/***/ }),

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


var content = __webpack_require__(6114);

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) {}

/***/ }),

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


var content = __webpack_require__(4484);

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) {}

/***/ }),

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


var content = __webpack_require__(1433);

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) {}

/***/ }),

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


var content = __webpack_require__(3742);

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) {}

/***/ }),

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


var content = __webpack_require__(1148);

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) {}

/***/ }),

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


var content = __webpack_require__(8759);

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) {}

/***/ }),

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


var content = __webpack_require__(7675);

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) {}

/***/ }),

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


var content = __webpack_require__(1099);

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) {}

/***/ }),

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


var content = __webpack_require__(8900);

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) {}

/***/ }),

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


var content = __webpack_require__(2743);

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) {}

/***/ }),

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


var content = __webpack_require__(2356);

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) {}

/***/ }),

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


var content = __webpack_require__(4610);

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) {}

/***/ }),

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


var content = __webpack_require__(5622);

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) {}

/***/ }),

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


var content = __webpack_require__(8815);

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) {}

/***/ }),

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


var content = __webpack_require__(7508);

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) {}

/***/ }),

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


var content = __webpack_require__(9963);

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) {}

/***/ }),

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


var content = __webpack_require__(4050);

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) {}

/***/ }),

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


var content = __webpack_require__(2819);

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) {}

/***/ }),

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


var content = __webpack_require__(2015);

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) {}

/***/ }),

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


var content = __webpack_require__(4734);

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) {}

/***/ }),

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


var content = __webpack_require__(3346);

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) {}

/***/ }),

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


var content = __webpack_require__(9450);

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) {}

/***/ }),

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


var content = __webpack_require__(3813);

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) {}

/***/ }),

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


var content = __webpack_require__(5517);

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) {}

/***/ }),

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


var content = __webpack_require__(9955);

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) {}

/***/ }),

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


var content = __webpack_require__(2946);

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) {}

/***/ }),

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


var content = __webpack_require__(8192);

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) {}

/***/ }),

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


var content = __webpack_require__(1690);

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) {}

/***/ }),

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


var content = __webpack_require__(5770);

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) {}

/***/ }),

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


var content = __webpack_require__(846);

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) {}

/***/ }),

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


var content = __webpack_require__(7145);

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) {}

/***/ }),

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


var content = __webpack_require__(7607);

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) {}

/***/ }),

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


var content = __webpack_require__(9219);

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) {}

/***/ }),

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


var content = __webpack_require__(5741);

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) {}

/***/ }),

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


var content = __webpack_require__(7464);

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) {}

/***/ }),

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


var content = __webpack_require__(2645);

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) {}

/***/ }),

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


var content = __webpack_require__(9235);

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) {}

/***/ }),

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


var content = __webpack_require__(1542);

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) {}

/***/ }),

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


var content = __webpack_require__(1914);

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) {}

/***/ }),

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


var content = __webpack_require__(6362);

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) {}

/***/ }),

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


var content = __webpack_require__(5906);

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) {}

/***/ }),

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


var content = __webpack_require__(7765);

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) {}

/***/ }),

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


var content = __webpack_require__(4200);

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) {}

/***/ }),

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


var content = __webpack_require__(3848);

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) {}

/***/ }),

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


var content = __webpack_require__(1636);

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) {}

/***/ }),

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


var content = __webpack_require__(2631);

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) {}

/***/ }),

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


var content = __webpack_require__(6725);

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) {}

/***/ }),

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


var content = __webpack_require__(6038);

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) {}

/***/ }),

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


var content = __webpack_require__(7526);

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) {}

/***/ }),

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


var content = __webpack_require__(8601);

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) {}

/***/ }),

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


var content = __webpack_require__(3970);

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) {}

/***/ }),

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


var content = __webpack_require__(6690);

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) {}

/***/ }),

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


var content = __webpack_require__(466);

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) {}

/***/ }),

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


var content = __webpack_require__(449);

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) {}

/***/ }),

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


var content = __webpack_require__(9838);

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) {}

/***/ }),

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


var content = __webpack_require__(1874);

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) {}

/***/ }),

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


var content = __webpack_require__(1531);

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) {}

/***/ }),

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


var content = __webpack_require__(3573);

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) {}

/***/ }),

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


var content = __webpack_require__(7380);

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) {}

/***/ }),

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


var content = __webpack_require__(5623);

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) {}

/***/ }),

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


var content = __webpack_require__(1880);

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) {}

/***/ }),

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


var content = __webpack_require__(5418);

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) {}

/***/ }),

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


var content = __webpack_require__(7242);

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) {}

/***/ }),

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


var content = __webpack_require__(389);

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) {}

/***/ }),

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


var content = __webpack_require__(6332);

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) {}

/***/ }),

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


var content = __webpack_require__(2889);

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) {}

/***/ }),

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


var content = __webpack_require__(5995);

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) {}

/***/ }),

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


var content = __webpack_require__(3396);

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) {}

/***/ }),

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


var content = __webpack_require__(7829);

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) {}

/***/ }),

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


var content = __webpack_require__(2872);

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) {}

/***/ }),

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


var content = __webpack_require__(9163);

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) {}

/***/ }),

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


var content = __webpack_require__(7366);

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) {}

/***/ }),

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


var content = __webpack_require__(8362);

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) {}

/***/ }),

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


var content = __webpack_require__(7025);

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) {}

/***/ }),

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


var content = __webpack_require__(671);

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) {}

/***/ }),

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


var content = __webpack_require__(8392);

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) {}

/***/ }),

/***/ 4601:
/***/ ((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) {}

/***/ }),

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


var content = __webpack_require__(8658);

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) {}

/***/ }),

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


var content = __webpack_require__(154);

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) {}

/***/ }),

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


var content = __webpack_require__(4964);

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) {}

/***/ }),

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


var content = __webpack_require__(1708);

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) {}

/***/ }),

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


var content = __webpack_require__(6344);

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) {}

/***/ }),

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


var content = __webpack_require__(4561);

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) {}

/***/ }),

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


var content = __webpack_require__(1132);

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) {}

/***/ }),

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


var content = __webpack_require__(9799);

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) {}

/***/ }),

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


var content = __webpack_require__(4596);

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) {}

/***/ }),

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


var content = __webpack_require__(6660);

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) {}

/***/ }),

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


var content = __webpack_require__(9364);

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) {}

/***/ }),

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


var content = __webpack_require__(8642);

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) {}

/***/ }),

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


var content = __webpack_require__(7970);

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) {}

/***/ }),

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


var content = __webpack_require__(9930);

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) {}

/***/ }),

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


var content = __webpack_require__(1767);

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) {}

/***/ }),

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


var content = __webpack_require__(1552);

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) {}

/***/ }),

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


var content = __webpack_require__(3001);

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) {}

/***/ }),

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


var content = __webpack_require__(9396);

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) {}

/***/ }),

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


var content = __webpack_require__(2990);

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) {}

/***/ }),

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


var content = __webpack_require__(4614);

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) {}

/***/ }),

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


var content = __webpack_require__(4832);

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__(1947);

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


/***/ }),

/***/ 1947:
/***/ ((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;
};


/***/ }),

/***/ 2482:
/***/ (() => {

/* (ignored) */

/***/ }),

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

"use strict";
module.exports = 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"]');

/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			loaded: false,
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/amd options */
/******/ 	(() => {
/******/ 		__webpack_require__.amdO = {};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/global */
/******/ 	(() => {
/******/ 		__webpack_require__.g = (function() {
/******/ 			if (typeof globalThis === 'object') return globalThis;
/******/ 			try {
/******/ 				return this || new Function('return this')();
/******/ 			} catch (e) {
/******/ 				if (typeof window === 'object') return window;
/******/ 			}
/******/ 		})();
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/node module decorator */
/******/ 	(() => {
/******/ 		__webpack_require__.nmd = (module) => {
/******/ 			module.paths = [];
/******/ 			if (!module.children) module.children = [];
/******/ 			return module;
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";

// NAMESPACE OBJECT: ./node_modules/absol/src/JSX/dom.js
var dom_namespaceObject = {};
__webpack_require__.r(dom_namespaceObject);
__webpack_require__.d(dom_namespaceObject, {
  "domVisitor": () => (domVisitor),
  "parseDom": () => (parseDom)
});

// NAMESPACE OBJECT: ./node_modules/absol/src/Math/measurements.js
var measurements_namespaceObject = {};
__webpack_require__.r(measurements_namespaceObject);
__webpack_require__.d(measurements_namespaceObject, {
  "PAGE_SIZE_IN_DOT": () => (PAGE_SIZE_IN_DOT),
  "PAGE_SIZE_IN_POINT": () => (PAGE_SIZE_IN_POINT),
  "centimeterToPx": () => (centimeterToPx),
  "dotToPoint": () => (dotToPoint),
  "feetToMeter": () => (feetToMeter),
  "latLngDistance": () => (latLngDistance),
  "latLngRectFromCenter": () => (latLngRectFromCenter),
  "meterToFeet": () => (meterToFeet),
  "meterToInch": () => (meterToInch),
  "meterToMile": () => (meterToMile),
  "meterToYard": () => (meterToYard),
  "mileToMeter": () => (mileToMeter),
  "pointToDot": () => (pointToDot),
  "pxToCentimeter": () => (pxToCentimeter),
  "yardToMeter": () => (yardToMeter)
});

// EXTERNAL MODULE: ./node_modules/atob/browser-atob.js
var browser_atob = __webpack_require__(9892);
var browser_atob_default = /*#__PURE__*/__webpack_require__.n(browser_atob);
// EXTERNAL MODULE: ./node_modules/btoa/index.js
var btoa = __webpack_require__(706);
var btoa_default = /*#__PURE__*/__webpack_require__.n(btoa);
// EXTERNAL MODULE: ./node_modules/intl/index.js
var intl = __webpack_require__(8267);
var intl_default = /*#__PURE__*/__webpack_require__.n(intl);
;// CONCATENATED MODULE: ./node_modules/absol/src/Polyfill/polyfill.js




if (!('Intl' in window)){
    window.Intl = (intl_default());
}

if (!('atob' in window)) {
    window.atob = (browser_atob_default());
}
if (!('btoa' in window)) {
    window.btoa = (btoa_default());
}

!function (e, n) {
    "object" == typeof exports && "undefined" != "object" ? n() : "function" == typeof define && __webpack_require__.amdO ? define(n) : n()
}(0, function () {
    "use strict";

    function e(e) {
        var n = this.constructor;
        return this.then(function (t) {
            return n.resolve(e()).then(function () {
                return t
            })
        }, function (t) {
            return n.resolve(e()).then(function () {
                return n.reject(t)
            })
        })
    }

    function n() {
    }

    function t(e) {
        if (!(this instanceof t)) throw new TypeError("Promises must be constructed via new");
        if ("function" != typeof e) throw new TypeError("not a function");
        this._state = 0, this._handled = !1, this._value = undefined, this._deferreds = [], u(e, this)
    }

    function o(e, n) {
        for (; 3 === e._state;) e = e._value;
        0 !== e._state ? (e._handled = !0, t._immediateFn(function () {
            var t = 1 === e._state ? n.onFulfilled : n.onRejected;
            if (null !== t) {
                var o;
                try {
                    o = t(e._value)
                } catch (f) {
                    return void i(n.promise, f)
                }
                r(n.promise, o)
            }
            else (1 === e._state ? r : i)(n.promise, e._value)
        })) : e._deferreds.push(n)
    }

    function r(e, n) {
        try {
            if (n === e) throw new TypeError("A promise cannot be resolved with itself.");
            if (n && ("object" == typeof n || "function" == typeof n)) {
                var o = n.then;
                if (n instanceof t) return e._state = 3, e._value = n, void f(e);
                if ("function" == typeof o) return void u(function (e, n) {
                    return function () {
                        e.apply(n, arguments)
                    }
                }(o, n), e)
            }
            e._state = 1, e._value = n, f(e)
        } catch (r) {
            i(e, r)
        }
    }

    function i(e, n) {
        e._state = 2, e._value = n, f(e)
    }

    function f(e) {
        2 === e._state && 0 === e._deferreds.length && t._immediateFn(function () {
            e._handled || t._unhandledRejectionFn(e._value)
        });
        for (var n = 0, r = e._deferreds.length; r > n; n++) o(e, e._deferreds[n]);
        e._deferreds = null
    }

    function u(e, n) {
        var t = !1;
        try {
            e(function (e) {
                t || (t = !0, r(n, e))
            }, function (e) {
                t || (t = !0, i(n, e))
            })
        } catch (o) {
            if (t) return;
            t = !0, i(n, o)
        }
    }

    var c = setTimeout;
    t.prototype["catch"] = function (e) {
        return this.then(null, e)
    }, t.prototype.then = function (e, t) {
        var r = new this.constructor(n);
        return o(this, new function (e, n, t) {
            this.onFulfilled = "function" == typeof e ? e : null, this.onRejected = "function" == typeof n ? n : null, this.promise = t
        }(e, t, r)), r
    }, t.prototype["finally"] = e, t.all = function (e) {
        return new t(function (n, t) {
            function o(e, f) {
                try {
                    if (f && ("object" == typeof f || "function" == typeof f)) {
                        var u = f.then;
                        if ("function" == typeof u) return void u.call(f, function (n) {
                            o(e, n)
                        }, t)
                    }
                    r[e] = f, 0 == --i && n(r)
                } catch (c) {
                    t(c)
                }
            }

            if (!e || "undefined" == typeof e.length) throw new TypeError("Promise.all accepts an array");
            var r = Array.prototype.slice.call(e);
            if (0 === r.length) return n([]);
            for (var i = r.length, f = 0; r.length > f; f++) o(f, r[f])
        })
    }, t.resolve = function (e) {
        return e && "object" == typeof e && e.constructor === t ? e : new t(function (n) {
            n(e)
        })
    }, t.reject = function (e) {
        return new t(function (n, t) {
            t(e)
        })
    }, t.race = function (e) {
        return new t(function (n, t) {
            for (var o = 0, r = e.length; r > o; o++) e[o].then(n, t)
        })
    }, t._immediateFn = "function" == typeof setImmediate && function (e) {
        setImmediate(e)
    } || function (e) {
        c(e, 0)
    }, t._unhandledRejectionFn = function (e) {
        void 0 !== console && console && console.warn("Possible Unhandled Promise Rejection:", e)
    };
    var l = function () {
        if ("undefined" != typeof self) return self;
        if ("undefined" != typeof window) return window;
        if ("undefined" != typeof __webpack_require__.g) return __webpack_require__.g;
        throw Error("unable to locate global object")
    }();
    "Promise" in l ? l.Promise.prototype["finally"] || (l.Promise.prototype["finally"] = e) : l.Promise = t
});


!(function () {
    var vendors = ['ms', 'moz', 'webkit', 'o'];
    for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
        window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
        window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame']
            || window[vendors[x] + 'CancelRequestAnimationFrame'];
    }

    if (!window.requestAnimationFrame)
        window.requestAnimationFrame = function (callback, element) {
            var id = window.setTimeout(function () {
                    callback(element);
                },
                1000 / 60);
            return id;
        };

    if (!window.cancelAnimationFrame)
        window.cancelAnimationFrame = function (id) {
            clearTimeout(id);
        };
}());


//Object
(function () {
    'use strict';
    var ObjectProto = Object.prototype,
        defineGetter = ObjectProto.__defineGetter__,
        defineSetter = ObjectProto.__defineSetter__,
        lookupGetter = ObjectProto.__lookupGetter__,
        lookupSetter = ObjectProto.__lookupSetter__,
        hasOwnProp = ObjectProto.hasOwnProperty;


    var supportDom = true;
    try {
        if (Object.defineProperty) {
            Object.defineProperty(document.createElement('div'), 'theRandomName', {
                set: function () {
                },
                get: function () {
                }
            });
        }
    } catch (error) {
        supportDom = false;
    }

    if ((!supportDom || !Object.defineProperty) && defineGetter && defineSetter && lookupGetter && lookupSetter) {
        var originObjetDefineProperty = Object.defineProperty;
        Object.defineProperty = function (obj, prop, descriptor) {
            if (!originObjetDefineProperty || (typeof obj.nodeType === "number" && typeof obj.nodeName === "string")) {
                if (arguments.length < 3) { // all arguments required
                    throw new TypeError("Arguments not optional");
                }

                prop += ""; // convert prop to string

                if (hasOwnProp.call(descriptor, "value")) {
                    if (!lookupGetter.call(obj, prop) && !lookupSetter.call(obj, prop)) {
                        // data property defined and no pre-existing accessors
                        obj[prop] = descriptor.value;
                    }

                    if ((hasOwnProp.call(descriptor, "get") ||
                        hasOwnProp.call(descriptor, "set"))) {
                        // descriptor has a value prop but accessor already exists
                        throw new TypeError("Cannot specify an accessor and a value");
                    }
                }


                if (descriptor.get) {
                    defineGetter.call(obj, prop, descriptor.get);
                }
                if (descriptor.set) {
                    defineSetter.call(obj, prop, descriptor.set);
                }

                return obj;
            }
            else {
                return originObjetDefineProperty.call(this, obj, prop, descriptor);
            }
        };

        var originObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
        Object.getOwnPropertyDescriptor = function (obj, prop) {
            if (!originObjectGetOwnPropertyDescriptor || typeof obj.nodeType === "number" && typeof obj.nodeName === "string") {
                if (arguments.length < 2) { // all arguments required
                    throw new TypeError("Arguments not optional.");
                }

                prop += ""; // convert prop to string

                var descriptor = {
                        configurable: true,
                        enumerable: true,
                        writable: true
                    },
                    getter = lookupGetter.call(obj, prop),
                    setter = lookupSetter.call(obj, prop);

                if (!hasOwnProp.call(obj, prop)) {
                    // property doesn't exist or is inherited
                    return descriptor;
                }
                if (!getter && !setter) { // not an accessor so return prop
                    descriptor.value = obj[prop];
                    return descriptor;
                }

                // there is an accessor, remove descriptor.writable;
                // populate descriptor.get and descriptor.set (IE's behavior)
                delete descriptor.writable;
                descriptor.get = descriptor.set = undefined;

                if (getter) {
                    descriptor.get = getter;
                }
                if (setter) {
                    descriptor.set = setter;
                }

                return descriptor;
            }
            else {
                return originObjectGetOwnPropertyDescriptor(obj, prop);
            }
        };
    }

    if (!supportDom || !Object.getOwnPropertyDescriptors) {
        Object.getOwnPropertyDescriptors = function (o) {
            var res = {};
            for (var key in o) {
                res[key] = Object.getOwnPropertyDescriptor(o, key);
            }
            return res;
        };
    }


    if (!supportDom || !Object.defineProperties) {
        Object.defineProperties = function (obj, props) {
            var prop;
            for (prop in props) {
                if (hasOwnProp.call(props, prop)) {
                    Object.defineProperty(obj, prop, props[prop]);
                }
            }
        };
    }


    if (typeof Object.assign != 'function') {
        Object.assign = function (target, varArgs) {
            'use strict';
            if (target == null) {
                throw new TypeError('Cannot convert undefined or null to object');
            }

            var to = Object(target);

            for (var index = 1; index < arguments.length; index++) {
                var nextSource = arguments[index];

                if (nextSource != null) {
                    for (var nextKey in nextSource) {

                        if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
                            to[nextKey] = nextSource[nextKey];
                        }
                    }
                }
            }
            return to;
        };
    }


}());

//string
!(function () {
    if (!String.prototype.startsWith) {
        String.prototype.startsWith = function (searchString, position) {
            position = position || 0;
            return this.indexOf(searchString, position) === position;
        };
    }

    if (!String.prototype.replaceAll) {
        String.prototype.replaceAll = function () {
            var find = arguments[0];
            if (!find) return this;
            if (typeof find == "string") {
                return this.split(find).join(arguments[1]);
            }
            else if (find instanceof RegExp) {
                return this.replace(new RegExp(find.source, 'g'), arguments[1]);
            }
        }
    }
})();


//array
!(function () {
    if (!Array.prototype.fill) {
        Object.defineProperty(Array.prototype, 'fill', {
            value: function (value) {

                // Steps 1-2.
                if (this == null) {
                    throw new TypeError('this is null or not defined');
                }

                var O = Object(this);

                // Steps 3-5.
                var len = O.length >>> 0;

                // Steps 6-7.
                var start = arguments[1];
                var relativeStart = start >> 0;

                // Step 8.
                var k = relativeStart < 0 ?
                    Math.max(len + relativeStart, 0) :
                    Math.min(relativeStart, len);

                // Steps 9-10.
                var end = arguments[2];
                var relativeEnd = end === undefined ?
                    len : end >> 0;

                // Step 11.
                var final = relativeEnd < 0 ?
                    Math.max(len + relativeEnd, 0) :
                    Math.min(relativeEnd, len);

                // Step 12.
                while (k < final) {
                    O[k] = value;
                    k++;
                }

                // Step 13.
                return O;
            }
        });
    }

    if (!Array.prototype.some) {
        Array.prototype.some = function (fun /*, thisp */) {
            "use strict";

            if (this == null) throw new TypeError();

            var t = Object(this),
                len = t.length >>> 0;

            if (typeof fun != "function") throw new TypeError();

            var thisp = arguments[1];

            for (var i = 0; i < len; i++) {
                if (i in t && fun.call(thisp, t[i], i, t))
                    return true;
            }

            return false;
        };
    }
})();


//function
!(function () {
    if (!Function.prototype.bind) {
        var ArrayPrototypeSlice = Array.prototype.slice;
        Function.prototype.bind = function (otherThis) {
            if (typeof this !== 'function') {
                // closest thing possible to the ECMAScript 5
                // internal IsCallable function
                throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
            }

            var baseArgs = ArrayPrototypeSlice.call(arguments, 1),
                baseArgsLength = baseArgs.length,
                fToBind = this,
                fNOP = function () {
                },
                fBound = function () {
                    baseArgs.length = baseArgsLength; // reset to default base arguments
                    baseArgs.push.apply(baseArgs, arguments);
                    return fToBind.apply(
                        fNOP.prototype.isPrototypeOf(this) ? this : otherThis, baseArgs
                    );
                };

            if (this.prototype) {
                // Function.prototype doesn't have a prototype property
                fNOP.prototype = this.prototype;
            }
            fBound.prototype = new fNOP();

            return fBound;
        };
    }
})();
// EXTERNAL MODULE: ./node_modules/absol/src/Polyfill/gps.js
var gps = __webpack_require__(1942);
;// CONCATENATED MODULE: ./node_modules/absol/src/polyfill.js


// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js
var EventEmitter = __webpack_require__(863);
// EXTERNAL MODULE: ./node_modules/absol/src/Detector/BrowserDetector.js
var BrowserDetector = __webpack_require__(9399);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/JSPath.js
var JSPath = __webpack_require__(8706);
// EXTERNAL MODULE: ./node_modules/absol/src/JSMaker/TemplateString.js
var TemplateString = __webpack_require__(369);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLConstant.js
var XMLConstant = {
    TYPE_ELEMENT:1,
    TYPE_TEXT:3,
    TYPE_COMMENT:8,
    TYPE_DECLARATION:16
};

/* harmony default export */ const XML_XMLConstant = (XMLConstant);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLDeclarationNode.js


function XMLDeclaretionNode() {
    this.nodeType = XML_XMLConstant.TYPE_DECLARATION;
    this.parentNode;
    /**
     * @type {String}
     */
    this.tagName = '';
    /**
    * @type {XMLElement}
    */
    this.parentNode;
    this.attributes = {};
}

/**
 * @param {String} name attribute name
 */
XMLDeclaretionNode.prototype.getAttribute = function (name) {
    return this.attributes[name];
};

/**
 * @param {String} name attribute name
 * @param {String} value 
 */
XMLDeclaretionNode.prototype.setAttribute = function (name, value) {
    this.attributes[name] = value;
};

/**
 * @param {String} name attribute name
 */
XMLDeclaretionNode.prototype.removeAttribute = function (name) {
    delete this.attributes[name];
};

XMLDeclaretionNode.prototype.remove = function () {
    if (this.parentNode) {
        this.parentNode.removeChild(this);
    }
};


XMLDeclaretionNode.prototype.toObject = function () {
    return { nodeType: this.nodeType, tagName: this.tagName, attributes: Object.assign({}, this.attributes) };
};


/* harmony default export */ const XMLDeclarationNode = (XMLDeclaretionNode);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLClassList.js
/**
 * 
 * @param {XMLElement} xmlNode 
 */
function XMLClassList(xmlNode) {
    this.xmlNode = xmlNode;
}

/**
 * @param {String} name
 * @returns {Boolean}
 */
XMLClassList.prototype.contains = function (name) {
    var className = this.xmlNode.getAttribute('class');
    if (className) {
        var classes = className.trim().split(/\s+/);
        for (var i = 0; i < classes.length; ++i) {
            if (classes[i] == name) return true;
        }
        return false;
    }
    else return false;
};

/**
 * @param {Number} index
 * @returns {String}
 */
XMLClassList.prototype.item = function (index) {
    var className = this.xmlNode.getAttribute('class');
    if (className) {
        var classes = className.trim().split(/\s+/);
        return classes[index];
    }
    else return undefined;
};


/**
 * @param {Array<String>} arguments
 */
XMLClassList.prototype.remove = function () {
    var dict = Array.prototype.reduce.call(arguments, function (ac, name) {
        ac[name] = true;
        return ac;
    }, {});

    var className = this.xmlNode.getAttribute('class');
    if (className) {
        var classes = className.trim().split(/\s+/);
        var newClasses = classes.filter(function (name) {
            dict[name];
        });
        this.xmlNode.setAttribute(newClasses.join(' '));
    }
};

/**
 * @param {Array<String>} arguments
 */
XMLClassList.prototype.add = function () {
    var className = this.xmlNode.getAttribute('class') || '';
    var classes = className.trim().split(/\s+/);
    var dict = classes.reduce(function (ac, name) {
        ac[name] = true;
        return ac;
    }, {});

    for (var i = 0; i < arguments.length; ++i) {
        var newClass = arguments[i].trim();
        if (newClass.length == 0) return;
        if (!dict[newClass]) {
            classes.push(newClass);
            dict[newClass] = true;
        }
    }

    this.xmlNode.setAttribute('class', classes.join(' '));
};


/* harmony default export */ const XML_XMLClassList = (XMLClassList);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLElement.js



function XMLElement() {
    this.nodeType = XML_XMLConstant.TYPE_ELEMENT;

    /**
     * @type {String}
     */
    this.tagName = '';
    /**
     * @type {XMLElement}
     */
    this.parentNode;
    this.attributes = {};
    /**
     * @type {Array} Array of  XMLElement or XMLText
     */
    this.childNodes = [];

    Object.defineProperty(this, 'classList', {
        value: new XML_XMLClassList(this),
        writable: false
    });
}

/**
 * @param {String} name attribute name
 */
XMLElement.prototype.getAttribute = function (name) {
    return this.attributes[name];
};

/**
 * @param {String} name attribute name
 * @param {String} value 
 */
XMLElement.prototype.setAttribute = function (name, value) {
    this.attributes[name] = value;
};

/**
 * @param {String} name attribute name
 */
XMLElement.prototype.removeAttribute = function (name) {
    delete this.attributes[name];
};

XMLElement.prototype.appendChild = function (node) {
    node.remove();
    this.childNodes.push(node);
    node.parentNode = this;
    return node;
};

/**
 * @param {XMLElement} child
 * @returns {XMLElement} removed node
 */
XMLElement.prototype.removeChild = function (child) {
    var result;
    if (this == child.parentNode) {
        var j = 0;
        for (var i = 0; i < this.childNodes.length; ++i) {
            if (child != this.childNodes[i]) {
                this.childNodes[j] = this.childNodes[i];
                ++j;
            }
            else {
                child.parentNode = undefined;
                result = child;
            }
        }
        while (j > this.childNodes.length) {
            this.childNodes.pop();
        }
    }
    return result;
};

/**
 * @param {XMLElement|XMLText|XMLDeclaretionNode} node
 */
XMLElement.prototype.inserBefore = function (node, child) {
    if (node == child) return;
    var childIndex = -1;
    for (var i = 0; i < this.childNodes.length; ++i) {
        if (this.childNodes[i] == child) {
            childIndex = i;
            break;
        }
    }
    if (childIndex < 0) return;
    node.remove();
    node.parentNode = this;
    this.childNodes.push(null);
    var cIndex = this.childNodes.length - 2;
    while (cIndex >= 0) {
        if (this.childNodes[cIndex] == child) {
            this.childNodes[cIndex + 1] = node;
        }
        else
            this.childNodes[cIndex + 1] = this.childNodes[cIndex];
    }
};



XMLElement.prototype.remove = function () {
    if (this.parentNode) {
        this.parentNode.removeChild(this);
    }
};

XMLElement.prototype.toObject = function () {
    return {
        nodeType: this.nodeType, tagName: this.tagName, attributes: Object.assign({}, this.attributes),
        childNodes: this.childNodes.map(function (child) {
            return child.toObject();
        })
    };
};



/* harmony default export */ const XML_XMLElement = (XMLElement);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLTextNode.js


function XMLTextNode(data) {
    this.nodeType = XML_XMLConstant.TYPE_TEXT;
    /**
     * @type {XMLNode}
     */
    this.parentNode;
    /**
     * @type {String}
     */
    this.data = data || '';
}


XMLTextNode.prototype.remove = function () {
    if (this.parentNode) {
        this.parentNode.removeChild(this);
    }
};


XMLTextNode.prototype.toObject = function () {
    return { nodeType: this.nodeType, data: this.data };
};


/* harmony default export */ const XML_XMLTextNode = (XMLTextNode);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XMLCommentNode.js


function XMLCommentNode(data) {
    this.nodeType = XML_XMLConstant.TYPE_COMMENT;
    /**
     * @type {XMLNode}
     */
    this.parentNode;
    /**
     * @type {String}
     */
    this.data = data || '';
}


XMLCommentNode.prototype.remove = function () {
    if (this.parentNode) {
        this.parentNode.removeChild(this);
    }
};


XMLCommentNode.prototype.toObject = function () {
    return { nodeType: this.nodeType, data: this.data };
};




/* harmony default export */ const XML_XMLCommentNode = (XMLCommentNode);
;// CONCATENATED MODULE: ./node_modules/absol/src/XML/XML.js






/**
 * 
 * @param {RegExp} regex 
 */
function getRegexBody(regex) {
    return regex.toString().match(/^\/(.+)\/([gimuy]*)$/)[1];
}

var BEGIN_TAG = 1;
var END_TAG = 2;
var CDATA = 3;
var DECLARATION = 4;
var COMMENT = 5;
var TEXT = 6;



var identRgx = /[^\s\"\r\n\'\!\/=\>\<\]\[\?\+\.]+/;
var spaceRgx = /[\s\r\n]+/;
var stringRgx = /\"(([^\"\\]*|(\\.))*)\"/;
var textRgx = /[^\<\-]+/;
var doctypeOpenRgx = /\<\!DOCTYPE/;
var commentOpenRgx = /\<!\-\-/;
var commentCloseRgx = /\-\-\>/;
var cdataOpenRgx = /\<\!\[CDATA\[/;
var cdataCloseRgx = /\]\]\>/;
var openRgx = /\</;
var openEndTagRgx = /\<\//;
var closeRgx = /\>/;
var shortCloseRgx = /\/\>/;
var declarationOpenRgx = /\<\?/;
var declarationCloseRgx = /\?\>/;
var assignOpRgx = /=/;

var tokenRgxBody = '(' +
    [
        spaceRgx,
        doctypeOpenRgx,
        declarationOpenRgx,
        cdataOpenRgx,
        commentOpenRgx,
        openEndTagRgx,
        openRgx,
        assignOpRgx,
        stringRgx,
        commentCloseRgx,
        identRgx,
        declarationCloseRgx,
        shortCloseRgx,
        closeRgx,
        cdataCloseRgx,
        textRgx
    ].map(function (e) {
        return getRegexBody(e);
    }).join(')|(')
    + ')';

var tokenType = {
    space: spaceRgx,
    doctypeOpen: doctypeOpenRgx,
    declarationOpen: declarationOpenRgx,
    cdataOpen: cdataOpenRgx,
    commentOpen: commentOpenRgx,
    openEndTag: openEndTagRgx,
    open: openRgx,
    ident: identRgx,
    assignOp: assignOpRgx,
    string: stringRgx,
    commentClose: commentCloseRgx,
    declarationClose: declarationCloseRgx,
    shortClose: shortCloseRgx,
    close: closeRgx,
    cdataClose: cdataCloseRgx,
    text: textRgx
}


var tokenRgx = new RegExp(tokenRgxBody);

/**
 * 
 * @typedef {Object} Token
 * @property {String} text
 * @property {*} matched
 */

/**
 * 
 * @param {String} text 
 * @returns {Array<Token>}
 */
function xmlTokenize(text) {
    var texts = text.match(new RegExp(tokenRgxBody, 'g'));
    return text.match(new RegExp(tokenRgxBody, 'g'))
        .map(function (tokenText, i) {
            var result = { text: tokenText, matched: {} };

            for (var tType in tokenType) {
                var matched = tokenText.match(tokenType[tType]);
                if (matched) {
                    if (matched[0] == tokenText) result.matched[tType] = matched;
                }
            }
            return result;
        });
}




/**
 * @typedef {Object} XMLPaseInfo
 * @property {Array<Token>} tokens
 * @property {Number} type
 * @property {Number} start
 * @property {Number} end
 * @property {Error} error
 * @property {Boolean} closed
 * 
 * 
 * 
 * @typedef {Object} XMLParseNode 
 * @property {XMLPaseInfo} __xml__
 * @property {String} tagName
 * @property {*} attributes
 * @property {String} text
 */

/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */
function matchAssign(tokens, i) {
    var result = { __xml__: { start: i } };
    var cToken;
    if (i < tokens.length) {
        cToken = tokens[i];
        if (cToken.matched['ident']) {
            result.key = cToken.text;
            ++i;
            if (i < tokens.length) {
                cToken = tokens[i];
                if (cToken.matched['space']) {
                    ++i;
                }
                if (i < tokens.length) {
                    cToken = tokens[i];
                    if (cToken.matched['assignOp']) {
                        ++i;
                        if (i < tokens.length) {
                            cToken = tokens[i];
                            if (cToken.matched['space']) {
                                ++i;
                            }
                            if (i < tokens.length) {
                                cToken = tokens[i];
                                if (cToken.matched['string']) {
                                    result.value = cToken.matched.string[1];
                                    ++i;
                                }
                                else {
                                    result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected string');
                                }
                            }
                            else {
                                result.__xml__.error = new Error('End of data found, expected ident');
                            }
                        }
                        else {
                            result.__xml__.error = new Error('End of data found, expected ident');
                        }

                    } else {
                        result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected =');
                    }
                }
                else {
                    result.__xml__.error = new Error('End of data found, expected =');
                }
            }
            else {
                result.__xml__.error = new Error('End of data found, expected =');
            }
        }
        else {
            result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected ident');
        }
    }
    else {
        result.__xml__.error = new Error('End of data found, expected ident');
    }

    result.__xml__.end = i;
    return result;
}



/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */
function matchBeginTag(tokens, i) {
    var result = { __xml__: { type: BEGIN_TAG, start: i } };
    var cToken;
    if (i < tokens.length) {
        cToken = tokens[i];
        if (cToken.matched['open']) {
            ++i;
            if (i < tokens.length) {
                cToken = tokens[i];
                if (cToken.matched['ident']) {
                    result.tagName = cToken.text;
                    ++i;
                    if (i < tokens.length) {
                        var finished = false;//when find the close symbol
                        while (i < tokens.length) {
                            cToken = tokens[i];
                            if (cToken.matched['space']) {
                                ++i;
                            }//skip space between attributes
                            if (i < tokens.length) {
                                cToken = tokens[i];
                                if (cToken.matched['shortClose']) {
                                    result.__xml__.closed = true;
                                    ++i;
                                    finished = true;
                                    break;
                                }
                                else if (cToken.matched['close']) {
                                    result.__xml__.closed = false;
                                    ++i;
                                    finished = true;
                                    break;
                                }
                                else if (tokens[i - 1].matched['space']) {
                                    var assign = matchAssign(tokens, i);
                                    if (!assign.__xml__.error) {
                                        result.attributes = result.attributes || {};
                                        result.attributes[assign.key] = assign.value;
                                        i = assign.__xml__.end;
                                    }
                                    else if (cToken.matched['ident']) {
                                        result.attributes = result.attributes || {};
                                        result.attributes[cToken.text] = true;// a flag
                                        ++i;
                                    }
                                    else {
                                        //TODO: we can ignore some error here, the same with order Match* function
                                        result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                                        break;
                                    }
                                }
                                else {
                                    //TODO: we can ignore some error here
                                    result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                                    break;
                                }
                            }
                            else {
                                result.__xml__.error = new Error('End of data found, expected /> or >');
                                break;
                            }
                        }
                        if (!finished && !result.__xml__.error) {
                            result.__xml__.error = new Error('End of data found, expected /> or >');
                        }
                    }
                    else {
                        result.__xml__.error = new Error('End of data found, expected /> or >');
                    }
                }
                else {
                    result.__xml__.error = new Error('Expected indent');
                }
            }
            else {
                result.__xml__.error = new Error('End of data found, expected indent');
            }
            result.__xml__.end = i;
        }
        else {
            result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <');
        }
    }
    else {
        result.__xml__.error = new Error('End of data found, expected <');
    }
    result.__xml__.end = i;
    return result;
}


/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */
function matchEndTag(tokens, i) {
    var result = { __xml__: { type: END_TAG, closed: true, start: i } };
    var cToken;
    if (i < tokens.length) {
        cToken = tokens[i];
        if (cToken.matched['openEndTag']) {
            ++i;
            if (i < tokens.length) {
                cToken = tokens[i];
                if (cToken.matched['ident']) {
                    result.tagName = cToken.text;
                    ++i;
                    if (i < tokens.length) {
                        var finished = false;//when find the close symbol
                        while (i < tokens.length) {
                            cToken = tokens[i];
                            if (cToken.matched['space']) {
                                ++i;
                            }//skip space between attributes
                            if (i < tokens.length) {
                                cToken = tokens[i];
                                if (cToken.matched['close']) {

                                    ++i;
                                    finished = true;
                                    break;
                                }
                                else if (tokens[i - 1].matched['space']) {
                                    var assign = matchAssign(tokens, i);
                                    if (!assign.__xml__.error) {
                                        result.attributes = result.attributes || {};
                                        result.attributes[assign.key] = assign.value;
                                        i = assign.__xml__.end;
                                    }
                                    else if (cToken.matched['ident']) {
                                        result.attributes = result.attributes || {};
                                        result.attributes[cToken.text] = true;// a flag
                                        ++i;
                                    }
                                    else {
                                        result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');

                                    }
                                }
                                else {
                                    result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                                }
                            }
                            else {
                                result.__xml__.error = new Error('End of data found, expected /> or >');
                            }
                        }
                        if (!finished && !result.__xml__.error) {
                            result.__xml__.error = new Error('End of data found, expected /> or >');
                        }
                    }
                    else {
                        result.__xml__.error = new Error('End of data found, expected /> or >');
                    }
                }
                else {
                    result.__xml__.error = new Error('Expected indent');
                }
            }
            else {
                result.__xml__.error = new Error('End of data found, expected indent');
            }
            result.__xml__.end = i;
        }
        else {
            result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <');
        }
    }
    else {
        result.__xml__.error = new Error('End of data found, expected <');
    }
    result.__xml__.end = i;
    return result;
}

/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */
function matchDeclaration(tokens, i) {
    var result = { __xml__: { type: DECLARATION, start: i } };
    var cToken;
    if (i < tokens.length) {
        cToken = tokens[i];
        if (cToken.matched['declarationOpen']) {
            ++i;
            if (i < tokens.length) {
                cToken = tokens[i];
                if (cToken.matched['ident']) {
                    result.tagName = cToken.text;
                    ++i;
                    if (i < tokens.length) {
                        var finished = false;//when find the close symbol
                        while (i < tokens.length) {
                            cToken = tokens[i];
                            if (cToken.matched['space']) {
                                ++i;
                            }//skip space between attributes
                            if (i < tokens.length) {
                                cToken = tokens[i];
                                if (cToken.matched['declarationClose']) {
                                    result.__xml__.closed = false;
                                    ++i;
                                    finished = true;
                                    break;
                                }
                                else if (tokens[i - 1].matched['space']) {
                                    var assign = matchAssign(tokens, i);
                                    if (!assign.__xml__.error) {
                                        result.attributes = result.attributes || {};
                                        result.attributes[assign.key] = assign.value;
                                        i = assign.__xml__.end;
                                    }
                                    else if (cToken.matched['ident']) {
                                        result.attributes = result.attributes || {};
                                        result.attributes[cToken.text] = true;// a flag
                                        ++i;
                                    }
                                    else {
                                        result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');

                                    }
                                }
                                else {
                                    result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected > or indent');
                                }
                            }
                            else {
                                result.__xml__.error = new Error('End of data found, expected /> or >');
                            }
                        }
                        if (!finished && !result.__xml__.error) {
                            result.__xml__.error = new Error('End of data found, expected /> or >');
                        }
                    }
                    else {
                        result.__xml__.error = new Error('End of data found, expected /> or >');
                    }
                }
                else {
                    result.__xml__.error = new Error('Expected indent');
                }
            }
            else {
                result.__xml__.error = new Error('End of data found, expected indent');
            }
            result.__xml__.end = i;
        }
        else {
            result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <');
        }
    }
    else {
        result.__xml__.error = new Error('End of data found, expected <');
    }
    result.__xml__.end = i;
    return result;
}



/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */
function matchCData(tokens, i) {
    var result = { __xml__: { type: CDATA, start: i } };
    var cToken;
    if (i < tokens.length) {
        cToken = tokens[i];
        if (cToken.matched['cdataOpen']) {
            ++i;
            result.text = '';
            var finished = false;
            while (i < tokens.length) {
                cToken = tokens[i];

                if (cToken.matched['cdataClose']) {
                    finished = true;
                    ++i;
                    break;
                }
                else {
                    result.text += cToken.text;
                    ++i;
                }
            }
            if (!finished) {
                result.__xml__.error = new Error('End of data found, expected ]]>');
            }
        }
        else {
            result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <![CDATA[');
        }
    }
    else {
        result.__xml__.error = new Error('End of data found, expected <![CDATA[');
    }
    result.__xml__.end = i
    return result;
}



/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Number} i 
 * @returns {XMLParseNode}
 */
function matchComment(tokens, i) {
    var result = { __xml__: { type: COMMENT, start: i } };
    var cToken;
    if (i < tokens.length) {
        cToken = tokens[i];
        if (cToken.matched['commentOpen']) {
            ++i;
            result.text = '';
            var finished = false;
            while (i < tokens.length) {
                cToken = tokens[i];

                if (cToken.matched['commentClose']) {
                    finished = true;
                    ++i;
                    break;
                }
                else {
                    result.text += cToken.text;
                    ++i;
                }
            }
            if (!finished) {
                result.__xml__.error = new Error('End of data found, expected -->');
            }
        }
        else {
            result.__xml__.error = new Error('"' + cToken.text + '"' + 'found, expected <!--');
        }
    }
    else {
        result.__xml__.error = new Error('End of data found, expected <!--');
    }
    result.__xml__.end = i;
    return result;
}

/**
 * 
 * @param {Token} tokens 
 */
function parseXMLTab(tokens) {
    var tabs = [];
    var i = 0;
    while (i < tokens.length) {
        var comment = matchComment(tokens, i);
        if (!comment.__xml__.error) {
            tabs.push(comment);
            i = comment.__xml__.end;
        }
        else {
            var declaration = matchDeclaration(tokens, i);
            if (!declaration.__xml__.error) {
                tabs.push(declaration);
                i = declaration.__xml__.end;
            }
            else {
                var begin = matchBeginTag(tokens, i);
                if (!begin.__xml__.error) {
                    tabs.push(begin);
                    i = begin.__xml__.end;
                }
                else {
                    var end = matchEndTag(tokens, i);
                    if (!end.__xml__.error) {
                        tabs.push(end);
                        i = end.__xml__.end;
                    }
                    else {
                        var cdata = matchCData(tokens, i);
                        if (!cdata.__xml__.error) {
                            tabs.push(cdata);
                            i = cdata.__xml__.end;
                        }
                        else {
                            ++i;//skip
                        }
                    }
                }
            }
        }
    }
    return tabs;
}



/**
 * 
 * @param {Array<Token>} tokens 
 * @param {Array<XMLParseNode>} tabs 
 * @returns {Array<XMLParseNode>}
 */
function parseXMLText(tokens, tabs) {
    var texts = [];
    var ofs = 0;
    var text;
    var tab;
    for (var i = 0; i < tabs.length; ++i) {
        tab = tabs[i];
        if (tab.__xml__.start > ofs) {
            text = tokens.slice(ofs, tab.__xml__.start)
                .map(function (token) {
                    return token.text;
                }).join('').trim();
            if (text.length > 0)
                texts.push({
                    __xml__: {
                        type: TEXT,
                        tokens: tokens,
                        start: ofs,
                        end: tab.__xml__.start
                    },
                    text: text
                });
        }
        ofs = tab.__xml__.end;
    }
    if (ofs < tokens.length) {
        text = tokens.slice(ofs)
            .map(function (token) {
                return token.text;
            }).join('').trim();
        if (text.length > 0)
            texts.push({
                __xml__: {
                    type: TEXT,
                    tokens: tokens,
                    start: ofs,
                    end: tab.__xml__.start
                },
                text: text
            });
    }
    return texts;
}


/**
 * 
 * @param {Array<XMLParseNode>} tabs 
 * @param {Array<XMLParseNode>} texts 
 * @return {Array<XMLParseNode>}  
 */
function mergeNodes(tabs, texts) {
    var nodes = [];
    var choose;
    var iTabs = 0, iTexts = 0;
    var diTabs, diTexts;
    var minStart;
    do {
        choose = undefined;
        diTabs = 0, diTexts = 0;
        minStart = 100000000;
        if (iTabs < tabs.length) {
            choose = tabs[iTabs];
            minStart = choose.__xml__.start;
            diTabs = 1;
        }

        if (iTexts < texts.length && texts[iTexts].__xml__.start < minStart) {
            choose = texts[iTexts];
            minStart = choose.__xml__.start;
            diTabs = 0;
            diTexts = 1;
        }
        if (choose) {
            iTexts += diTexts;
            iTabs += diTabs;
            nodes.push(choose);
        }
    } while (choose);
    return nodes;
}

/**
 * 
 * @param {String} text 
 * @return {Array<XMLParseNode>} 
 */
function parseXMLTextToXMLParseNode(text) {
    text = text.trim();
    var tokens = xmlTokenize(text.trim());

    var tabs = parseXMLTab(tokens);
    var texts = parseXMLText(tokens, tabs);
    return mergeNodes(tabs, texts);
}


/**
 * 
 * @param {Array<XMLParseNode>} nodes
 * @returns {Array}
 */
function paresNodesToXMLs(nodes) {
    var node;
    var parentXMLElement = new XML_XMLElement();
    parentXMLElement.tagName = "FAKE_DOCUMENT";

    var assignAttributes = function (node, attributes) {
        Object.keys(attributes).forEach(function (key) {
            node.setAttribute(key, attributes[key]);
        })
    }

    var newXMLNode;
    for (var i = 0; i < nodes.length; ++i) {
        node = nodes[i];
        newXMLNode = undefined;
        switch (node.__xml__.type) {
            case DECLARATION:
                newXMLNode = new XMLDeclarationNode();
                newXMLNode.tagName = node.tagName;
                if (node.attributes)
                    assignAttributes(newXMLNode, node.attributes);

                parentXMLElement.appendChild(newXMLNode);
                break;
            case BEGIN_TAG:
                newXMLNode = new XML_XMLElement();
                newXMLNode.tagName = node.tagName;
                if (node.attributes)
                    assignAttributes(newXMLNode, node.attributes);
                parentXMLElement.appendChild(newXMLNode);
                if (!node.__xml__.closed)
                    parentXMLElement = newXMLNode;
                break;
            case END_TAG:
                if (parentXMLElement && node.tagName == parentXMLElement.tagName) {
                    parentXMLElement = parentXMLElement.parentNode;
                }
                else if (parentXMLElement && (parentXMLElement.tagName == 'img' || parentXMLElement.tagName == 'input')) {
                    // image can be not close
                    while (parentXMLElement.tagName == 'img' || parentXMLElement.tagName == 'input') {
                        parentXMLElement = parentXMLElement.parentNode;
                    }

                    parentXMLElement = parentXMLElement.parentNode;
                }

                else {
                    throw new Error("Unknown close of tagName " + node.tagName
                        + ', but ' + (parentXMLElement ? parentXMLElement.tagName : "EOF") + ' expected');

                }
                break;
            case TEXT:
                newXMLNode = new XML_XMLTextNode(node.text);
                parentXMLElement.appendChild(newXMLNode);
                break;
            case COMMENT:
                newXMLNode = new XML_XMLCommentNode(node.text);
                parentXMLElement.appendChild(newXMLNode);
                break;
        }

    }
    return parentXMLElement.childNodes.slice().map(function (e) {
        e.remove();
        return e;
    });
}


/**
 * 
 * @param {XMLElement} node 
 */
function makeOpenXMLElementTab(node) {
    var res = '<' + node.tagName;
    var attributesText = Object.keys(node.attributes)
        .map(function (key) {
            var value = node.attributes[key];
            if (value === null) {
                return key;
            }
            else {
                return key + '=' + '"' + value + '"';
            }

        }).join(' ');
    if (attributesText.length > 0) {
        res += ' ' + attributesText;
    }
    res += '>';
    return res;
}

/**
 * 
 * @param {XMLDeclaretionNode} node 
 */
function makeXMLDeclaretionTab(node) {
    var res = '<?' + node.tagName;
    var attributesText = Object.keys(node.attributes)
        .map(function (key) {
            var value = node.attributes[key];
            if (value === null) {
                return key;
            }
            else {
                return key + '=' + '"' + value + '"';
            }

        }).join(' ');
    if (attributesText.length > 0) {
        res += ' ' + attributesText;
    }
    res += '?>';
    return res;
}


/**
 * 
 * @param {XMLDeclaretionNode} node 
 */
function makeXMLCommentTab(node) {
    var res = '<!--' + node.data + '-->';
    return res;
}

var XML = {};

/**
 * @param {String} code
 * @returns {Array<XMLElement>}
 */
XML.parseLikeHTML = function (code) {
    var nodes = parseXMLTextToXMLParseNode(code);
    // console.log('nodes', nodes);
    var xmls = paresNodesToXMLs(nodes);
    return xmls;
};

/**
 * @param {String} code
 * @returns {XMLElement}
 */
XML.parse = function (code) {
    var xmls = this.parseLikeHTML(code);
    if (xmls.length == 0) return undefined;
    var obj = xmls[xmls.length - 1].toObject();
    return obj;
};


XML.DFNodeVisit = function (node, handlers, accumulator) {
    if (!node.childNodes || node.childNodes.length == 0) {
        if (handlers.leaf) handlers.leaf(accumulator, node);
    }
    else {
        if (handlers.open) handlers.open(accumulator, node);
        for (var i = 0; i < node.childNodes.length; ++i) {
            this.DFNodeVisit(node.childNodes[i], handlers, accumulator);
        }
        if (handlers.close) handlers.close(accumulator, node);
        return accumulator;
    }
};


/**
 * @typedef {Object} XMLBeautifyOption
 * @property {String} indent
 * @property {Number} initDepth 
 */

/**
 * @param {Array<XMLElement>} o 
 * @param {XMLBeautifyOption} beautifyOption 
 * 
 * 
 */
XML.stringify = function (o, beautifyOption) {
    var texts = [];
    var indent = '';
    var lineBreak = '';
    var depth = 0;
    if (beautifyOption) {
        lineBreak = '\n';
        indent = typeof (beautifyOption.indent) == 'string' ? beautifyOption.indent : '    ';
        depth = beautifyOption.initDepth || 0;
    }

    if (!(o instanceof Array)) {
        o = [o];
    }
    var visitor = {
        open: function (ac, node) {
            var currentLineIndent = ac.lineIndentStack[ac.lineIndentStack.length - 1];

            var openTabText = makeOpenXMLElementTab(node);
            ac.texts.push(currentLineIndent + openTabText);
            ac.lineIndentStack.push(currentLineIndent + ac.indent);
        },
        close: function (ac, node) {
            ac.lineIndentStack.pop();
            var currentLineIndent = ac.lineIndentStack[ac.lineIndentStack.length - 1];
            var endTab = '</' + node.tagName + '>';
            if (node.childNodes.length == 1 && node.childNodes[0].nodeType == XML_XMLConstant.TYPE_TEXT) {
                ac.texts[ac.texts.length - 1] += endTab;
            }
            else {
                ac.texts.push(currentLineIndent + endTab);
            }

        },
        leaf: function (ac, node) {
            var currentLineIndent = ac.lineIndentStack[ac.lineIndentStack.length - 1];
            var tab;
            if (node.nodeType == XML_XMLConstant.TYPE_TEXT) {
                if (node.parentNode && node.parentNode.childNodes.length == 1) {
                    ac.texts[ac.texts.length - 1] += node.data;
                }
                else {
                    ac.texts.push(currentLineIndent + node.data);
                }
            }
            else if (node.nodeType == XML_XMLConstant.TYPE_ELEMENT) {
                var openTabText = makeOpenXMLElementTab(node);
                var endTab = '</' + node.tagName + '>';
                ac.texts.push(currentLineIndent + openTabText + endTab);
            }
            else if (node.nodeType == XML_XMLConstant.TYPE_DECLARATION) {
                tab = makeXMLDeclaretionTab(node);
                ac.texts.push(currentLineIndent + tab);
            }
            else if (node.nodeType == XML_XMLConstant.TYPE_COMMENT) {
                tab = makeXMLCommentTab(node);
                ac.texts.push(currentLineIndent + tab);
            }
        }
    };

    for (var i = 0; i < o.length; ++i) {
        this.DFNodeVisit(o[i],
            visitor,
            {
                depth: 0,
                texts: texts,
                lineIndentStack: [''],
                indent: indent
            });
    }
    return texts.join(lineBreak);
};



/* harmony default export */ const XML_XML = (XML);


;// CONCATENATED MODULE: ./node_modules/absol/src/JSMaker/TemplateXML.js





function TemplateXML(props) {
    this.xml = props.xml;
}


TemplateXML.prototype._xmlNodeToJSCode = function (node) {
    var body = [];
    if (node.nodeType == XML_XMLConstant.TYPE_ELEMENT) {
        body.push('tag:' + JSON.stringify(node.tagName));
        var attributeKeys = Object.keys(node.attributes).filter(function (x) { return x != 'class' && x != 'style' && !x.startsWith('az-') });
        if (attributeKeys && attributeKeys.length > 0) {
            body.push('attr: {' + attributeKeys.map(function (key) {
                return JSON.stringify(key) + ': ' + TemplateString/* default.parse */.Z.parse(node.attributes[key]).toJSCode();
            }).join(', ') + '}');
        }

        if (node.attributes['az-props']) {
            body.push('props: ' + TemplateString/* default.parse */.Z.parse(node.attributes['az-props']).toJSCode() );
        }
        if (node.attributes['az-data']) {
            body.push('data: ' + TemplateString/* default.parse */.Z.parse(node.attributes['az-data']).toJSCode() );
        }

        if (node.attributes.style) {
            var styleSheet = node.attributes.style.split(';').map(function (s) {
                var t = s.split(':').map(function (text) { return text.trim() });
                if (t.length == 2) {
                    return JSON.stringify(t[0]) + ': ' + JSON.stringify(t[1]);
                }
                else return false;

            }).filter(function (e) {
                return !!e;
            });
       
            if (styleSheet.length > 0) {
                body.push('style:{' + styleSheet.join(',') + '}');
            }
        }

        if (node.attributes.class) {
            var classList = node.attributes.class.trim().split(/\s+/);
            if (classList.length > 0)
                body.push('class:' + JSON.stringify(classList));
        }

        if (node.childNodes && node.childNodes.length > 0) {
            var childList = '[' + node.childNodes.filter(function (e) {
                return e.nodeType == XML_XMLConstant.TYPE_ELEMENT || e.nodeType == XML_XMLConstant.TYPE_TEXT;
            }).map(function (e) {
                return this._xmlNodeToJSCode(e);
            }.bind(this)).filter(function (e) { return !!e; }).join(', ') + ']';
            if (childList && childList.length > 0)
                body.push('child: ' + childList);
        }
    }
    else if (node.nodeType == XML_XMLConstant.TYPE_TEXT) {
        body.push('text: ' + TemplateString/* default.parse */.Z.parse(node.data).toJSCode());
    }
    else return undefined;

    var res = '{' + body.join(', ') + '}';
    return res;
};

TemplateXML.prototype.toJSCode = function () {
    var res = this._xmlNodeToJSCode(this.xml);
    return res;
};

/**
 * 
 * @param  {...any} args 
 * @returns {Function}
 */
TemplateXML.compileToFunction = function () {
    var innerCode = 'return ' + this.parse(arguments[arguments.length - 1]).toJSCode() + ';';
    var fParam = Array.prototype.slice.call(arguments, 0, arguments.length - 1);
    fParam.push(innerCode);
    return Function.apply(null, fParam);
};



TemplateXML.parse = function (text) {
    var xml = XML_XML.parse(text);
    if (xml) {
        return new TemplateXML({
            xml: xml
        });
    }
    else
        return undefined;
};

/* harmony default export */ const JSMaker_TemplateXML = (TemplateXML);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var HTML5_Dom = __webpack_require__(6628);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Svg.js
var Svg = __webpack_require__(6821);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
// EXTERNAL MODULE: ./node_modules/absol/src/Color/Color.js
var Color = __webpack_require__(257);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/IFrameBridge.js
var IFrameBridge = __webpack_require__(3154);
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/templates/document.tpl
/* harmony default export */ const templates_document = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<w:document\r\n  xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"\r\n  xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"\r\n  xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\r\n  xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\"\r\n  xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\r\n  xmlns:ns6=\"http://schemas.openxmlformats.org/schemaLibrary/2006/main\"\r\n  xmlns:c=\"http://schemas.openxmlformats.org/drawingml/2006/chart\"\r\n  xmlns:ns8=\"http://schemas.openxmlformats.org/drawingml/2006/chartDrawing\"\r\n  xmlns:dgm=\"http://schemas.openxmlformats.org/drawingml/2006/diagram\"\r\n  xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"\r\n  xmlns:ns11=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\"\r\n  xmlns:dsp=\"http://schemas.microsoft.com/office/drawing/2008/diagram\"\r\n  xmlns:ns13=\"urn:schemas-microsoft-com:office:excel\"\r\n  xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\n  xmlns:v=\"urn:schemas-microsoft-com:vml\"\r\n  xmlns:w10=\"urn:schemas-microsoft-com:office:word\"\r\n  xmlns:ns17=\"urn:schemas-microsoft-com:office:powerpoint\"\r\n  xmlns:odx=\"http://opendope.org/xpaths\"\r\n  xmlns:odc=\"http://opendope.org/conditions\"\r\n  xmlns:odq=\"http://opendope.org/questions\"\r\n  xmlns:odi=\"http://opendope.org/components\"\r\n  xmlns:odgm=\"http://opendope.org/SmartArt/DataHierarchy\"\r\n  xmlns:ns24=\"http://schemas.openxmlformats.org/officeDocument/2006/bibliography\"\r\n  xmlns:ns25=\"http://schemas.openxmlformats.org/drawingml/2006/compatibility\"\r\n  xmlns:ns26=\"http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas\">\r\n  <w:body>\r\n    <w:altChunk r:id=\"htmlChunk\" />\r\n    <w:sectPr>\r\n      <w:pgSz w:w=\"{{ pageSetting.width }}\" w:h=\"{{ pageSetting.height }}\" w:orient=\"{{ pageSetting.orient }}\" />\r\n      <w:pgMar w:top=\"{{ pageSetting.margins.top }}\"\r\n               w:right=\"{{ pageSetting.margins.right }}\"\r\n               w:bottom=\"{{ pageSetting.margins.bottom }}\"\r\n               w:left=\"{{ pageSetting.margins.left }}\"\r\n               w:header=\"{{ pageSetting.margins.header }}\"\r\n               w:footer=\"{{ pageSetting.margins.footer }}\"\r\n               w:gutter=\"{{ pageSetting.margins.gutter }}\"/>\r\n    </w:sectPr>\r\n  </w:body>\r\n</w:document>\r\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/templates/mht_document.tpl
/* harmony default export */ const mht_document = ("MIME-Version: 1.0\r\nContent-Type: multipart/related;\r\n    type=\"text/html\";\r\n    boundary=\"----=mhtDocumentPart\"\r\n\r\n\r\n------=mhtDocumentPart\r\nContent-Type: text/html;\r\n    charset=\"utf-8\"\r\nContent-Transfer-Encoding: quoted-printable\r\nContent-Location: file:///C:/fake/document.html\r\n\r\n{{ htmlSource }}\r\n\r\n{{ contentParts }}\r\n\r\n------=mhtDocumentPart--\r\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/templates/mht_part.tpl
/* harmony default export */ const mht_part = ("------=mhtDocumentPart\r\nContent-Type: {{ contentType }}\r\nContent-Transfer-Encoding: {{ contentEncoding }}\r\nContent-Location: {{ contentLocation }}\r\n\r\n{{ encodedContent }}\r\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/DocxTpl.js




/* harmony default export */ const DocxTpl = ({
    document: new Function('pageSetting', 'return ' + TemplateString/* default.parse */.Z.parse(templates_document).toJSCode()),
    mht_document: new Function('htmlSource', 'contentParts', 'return ' + TemplateString/* default.parse */.Z.parse(mht_document).toJSCode()),
    mht_part: new Function('contentType', 'contentEncoding', 'contentLocation', 'encodedContent', 'return ' + TemplateString/* default.parse */.Z.parse(mht_part).toJSCode())
});
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/assets/content_types.xml
/* harmony default export */ const content_types = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\r\n  <Default Extension=\"rels\" ContentType=\r\n    \"application/vnd.openxmlformats-package.relationships+xml\" />\r\n  <Override PartName=\"/word/document.xml\" ContentType=\r\n    \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/>\r\n  <Override PartName=\"/word/afchunk.mht\" ContentType=\"message/rfc822\"/>\r\n</Types>\r\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/assets/rels.xml
/* harmony default export */ const rels = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n  <Relationship\r\n      Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\"\r\n      Target=\"/word/document.xml\" Id=\"R09c83fafc067488e\" />\r\n</Relationships>\r\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/assets/document.xml.rels
/* harmony default export */ const document_xml = ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk\"\r\n    Target=\"/word/afchunk.mht\" Id=\"htmlChunk\" />\r\n</Relationships>\r\n");
;// CONCATENATED MODULE: ./node_modules/absol/src/JSDocx/JSDocx.js









var JSZip = window.JSZip;


function JSDocx(props) {
    if (props.blob)
        this.blob = props.blob;

    if (props.blob)
        this.buffer = props.buffer;
}

JSDocx.prototype.saveAs = function (fileName) {
    var src;
    if (this.blob) {
        src = (URL || webkitURL).createObjectURL(this.blob);
    }
    else if (this.buffer) {
        src = "data:application/octet-stream," + encodeURIComponent(this.buffer);
    }

    var element = document.createElement('a');
    element.setAttribute('href', src);
    element.setAttribute('download', fileName);

    element.style.display = 'none';
    document.body.appendChild(element);
    element.click();
    document.body.removeChild(element);
};


JSDocx._prepareImageParts = function (htmlSource) {
    var imageContentParts = [];
    var inlinedSrcPattern = /\"data:(\w+\/\w+);(\w+),(\S+)\"/g;
    var inlinedReplacer = function (match, contentType, contentEncoding, encodedContent) {
        var index = imageContentParts.length;
        var extension = contentType.split('/')[1];
        var contentLocation = "file:///C:/fake/image" + index + "." + extension;
        // mht_part: new Function('contentType', 'contentEncoding', 'contentLocation', 'encodedContent', 'return ' + TemplateString.parse(mht_pathTpl).toJSCode())
        imageContentParts.push(DocxTpl.mht_part(contentType, contentEncoding, contentLocation, encodedContent));
        return "\"" + contentLocation + "\"";
    };
    if (typeof htmlSource === 'string') {
        if (!/<img/g.test(htmlSource)) {
            return {
                htmlSource: htmlSource,
                imageContentParts: imageContentParts
            };
        }
        htmlSource = htmlSource.replace(inlinedSrcPattern, inlinedReplacer);
        return {
            htmlSource: htmlSource,
            imageContentParts: imageContentParts
        };
    }
    else {
        throw new Error("Not a valid source provided!");
    }
};


JSDocx._getMHTdocument = function (htmlSource) {
    var imageContentParts, _ref;
    _ref = this._prepareImageParts(htmlSource), htmlSource = _ref.htmlSource, imageContentParts = _ref.imageContentParts;
    htmlSource = htmlSource.replace(/\=/g, '=3D');
    return DocxTpl.mht_document(htmlSource,
        imageContentParts.join('\n')
    );
};

/**
 * @param {JSZip} zip
 */
JSDocx._generateDocument = function (zip) {
    return zip.generateAsync({ type: 'arraybuffer' }).then(function (buffer) {
        var props = {};
        if (__webpack_require__.g.Blob)
            props.blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });
        else if (__webpack_require__.g.Buffer)
            props.buffer = new Buffer(new Uint8Array(buffer));
        else
            throw new Error("Neither Blob nor Buffer are accessible in this environment. " +
                "Consider adding Blob.js shim");
        return new JSDocx(props);
    });
};


JSDocx._renderDocumentFile = function (pageSetting) {

    return DocxTpl.document(pageSetting);
};

JSDocx._createPageSetting = function (documentOptions) {
    documentOptions = documentOptions || {};
    var pageSetting = {
        margins: {
            top: 1440,
            right: 1440,
            bottom: 1440,
            left: 1440,
            header: 720,
            footer: 720,
            gutter: 0
        }
    };
    if (documentOptions.orientation == 'landscape') {
        Object.assign(pageSetting, {
            height: 12240, width: 15840, orient: 'landscape'
        });
    }
    else {
        Object.assign(pageSetting, {
            width: 12240, height: 15840, orient: 'portrait'
        });
    }
    if (documentOptions.margins) {
        Object.assign(pageSetting, documentOptions.margins);
    }
    return pageSetting;
};


JSDocx._addFiles = function (zip, htmlSource, pageSetting) {
    zip.file('[Content_Types].xml', content_types);
    zip.folder('_rels')
        .file('.rels', rels);
    zip.folder('word')
        .file('document.xml', DocxTpl.document(pageSetting));


    zip.folder('word')
        .file('document.xml', JSDocx._renderDocumentFile(pageSetting))
        .file('afchunk.mht', JSDocx._getMHTdocument(htmlSource))
        .folder('_rels')
        .file('document.xml.rels', document_xml);

    return zip;
};

JSDocx.fromHTMLCode = function (html, options) {
    var zip = new JSZip();
    JSDocx._addFiles(zip, html, JSDocx._createPageSetting(options));
    return JSDocx._generateDocument(zip);
};

JSDocx.fromHTMLElement = function (element, options, getOuter, isWorkingElement) {
    if (typeof element == 'string') {
        element = HTML5_Dom/* default.ShareInstance.$ */.ZP.ShareInstance.$(element);
    }
    if (!element) throw new Error('@param element must be HTMLElement');

    var preRender;
    if (!isWorkingElement) {
        preRender = HTML5_Dom/* default.ShareInstance._ */.ZP.ShareInstance._('div');
        preRender.addStyle({
            position: 'fixed',
            top: '0',
            left: '0',
            zIndex: '-10000',
            opacity: '0'
        }).addTo(document.body);
        Array.prototype.forEach.call(element.childNodes, function (e) {
            if (e.tagName != 'script')
                preRender.addChild(e.cloneNode(true));
        });
    }
    else {
        preRender = element;
    }

    HTML5_Dom/* default.ShareInstance.$ */.ZP.ShareInstance.$('script', preRender, function (e) {
        e.parentElement.removeChild(e);
        return false;
    });

    var imageTask = [];
    HTML5_Dom/* default.ShareInstance.$ */.ZP.ShareInstance.$('img', preRender, function (e) {
        if (e.src && !e.src.match(/data:/)) {
            var task = HTML5_Dom/* default.imageToCanvas */.ZP.imageToCanvas(e).then(function (canvas) {
                var newSrc = canvas.toDataURL();
                e.src = newSrc;
            });
            imageTask.push(task);

        }
        return false;
    });

    HTML5_Dom/* default.ShareInstance.$ */.ZP.ShareInstance.$('svg', preRender, function (e) {
        var task = Svg/* default.svgToCanvas */.ZP.svgToCanvas(e).then(function (canvas) {
            var newSrc = canvas.toDataURL();
            var image = HTML5_Dom/* default.ShareInstance._ */.ZP.ShareInstance._('img');
            image.src = newSrc;
            HTML5_Dom/* default.ShareInstance.$ */.ZP.ShareInstance.$(e).selfReplace(image);

        });
        imageTask.push(task);

        return false;
    });


    return Promise.all(imageTask).then(function () {
        var code;
        if (getOuter) {
            code = preRender.outerHTML;
            if (!code) {
                var temp = document.createElement('div');
                temp.addChild(preRender);
                code = temp.innerHTML;
            }
        }
        else {
            code = preRender.innerHTML;
        }
        return JSDocx.fromHTMLCode(code, options);
    });
};

/* harmony default export */ const JSDocx_JSDocx = (JSDocx);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringGenerate.js
var stringGenerate = __webpack_require__(1334);
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/Broadcast.js




// it can be replace BroadcastChanel
function Broadcast(channel, id) {
    EventEmitter/* default.call */.ZP.call(this);
    this.channel = channel;
    this.id = id || (0,stringGenerate.randomIdent)(32);
    this._ev_message = this._ev_message.bind(this);
    this._ev_storage = this._ev_storage.bind(this);
    this._init();
}

OOP/* default.mixClass */.ZP.mixClass(Broadcast, EventEmitter/* default */.ZP);

Broadcast.prototype._init = function () {
    if ('BroadcastChannel' in window) {
        this.nativeBroadcastChannel = new BroadcastChannel(this.channel);
        this.nativeBroadcastChannel.onmessage = this._ev_message;
    }
    else if ('localStorage' in window) {
        if (!('onstorage' in window))
            console.warn("Your browser may not support onstorage event.");
        if (window.addEventListener) {
            window.addEventListener('storage', this._ev_storage);
        }
        else {
            window.attachEvent('onstorage', this._ev_storage);
        }
        this.storageKey = '_broadcast_' + this.channel;
    }
    else {
        throw new Error("Your browser can not support broadcast!");
    }
};

Broadcast.prototype._ev_storage = function (event) {
    if (event.key == this.storageKey) {
        var data = JSON.parse(event.newValue);
        if (data.sourceId != this.id)
            this.handleMessData(data.message);
    }
};

Broadcast.prototype._ev_message = function (event) {
    var data = event.data;
    this.handleMessData(data);
};


Broadcast.prototype.handleMessData = function (data) {
    if (data.type == "EMIT")
        this.fire.apply(this, data.params);
    if (typeof this.onmessage == 'function')
        this.onmessage(event);
};

/**
 * @param {...Array<*>}
 */
Broadcast.prototype.emit = function () {
    var params = Array.prototype.slice.call(arguments);
    this.postMessage({ type: "EMIT", params, sourceId: this.id });
};

/**
 * @param {*} message
 */
Broadcast.prototype.postMessage = function (message) {
    if (this.nativeBroadcastChannel) {
        this.nativeBroadcastChannel.postMessage(message);
    }
    else {
        localStorage.setItem(this.storageKey, JSON.stringify({ message: message, sourceId: this.id }));
    }
};

Broadcast.prototype.onmessage = null;


Broadcast.prototype.close = function () {
    if (this.nativeBroadcastChannel) this.nativeBroadcastChannel.close();
};

/* harmony default export */ const Network_Broadcast = (Broadcast);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Text.js
var Text = __webpack_require__(5827);
// EXTERNAL MODULE: ./node_modules/absol/src/Converter/file.js
var file = __webpack_require__(4574);
// EXTERNAL MODULE: ./node_modules/absol/src/Converter/base64.js
var base64 = __webpack_require__(9959);
;// CONCATENATED MODULE: ./node_modules/absol/src/Time/Alarm.js
/**
 * 
 * @param {Date| Number} time 
 * @param {Function} callback 
 */
function Alarm(time, callback) {
    this.LIMIT_TIMEOUT = 2147483647;
    this.callback = callback;
    this.state = "STAND_BY";
    this.timeout = -1;
    if (typeof time == 'number')
        this.time = time;
    else this.time = time.getTime();
    this.args = Array.prototype.slice.call(arguments, 2);
    this.tick = this.tick.bind(this);
    if (this.time >= new Date().getTime())
        this.start();
    else
        this.kill();
}


Alarm.prototype.start = function () {
    if (this.state == 'STAND_BY' || this.state == "PAUSE") {
        this.state = "RUNNING";
        this.tick();
        return true;
    }
    return false;
};

Alarm.prototype.pause = function () {
    if (this.state == "RUNNING") {
        clearTimeout(this.timeout);
        this.timeout = -1;
        this.state = 'PAUSE';
    }
};

Alarm.prototype.tick = function () {
    var now = new Date().getTime();
    if (now >= this.time) {
        this.callback && this.callback.apply(null, this.args);
        this.start = 'FINISH';
    }
    else {
        var deltaTime = Math.min(this.LIMIT_TIMEOUT, this.time - now);
        this.timeout = setTimeout(this.tick, deltaTime);
        this.state = "RUNNING";
    }
}

Alarm.prototype.kill = function () {
    if (this.state != "FINISH" && this.state != "DEAD") {
        if (this.timeout >= 0)
            clearTimeout(this.timeout);
        this.state = 'DEAD';
        return true;
    }
    return false;
};


/* harmony default export */ const Time_Alarm = (Alarm);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/Ref.js
var Ref = __webpack_require__(4446);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/XHR.js
var XHR = __webpack_require__(6069);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringFormat.js
var stringFormat = __webpack_require__(6382);
// EXTERNAL MODULE: ./node_modules/absol/src/JSX/attribute.js + 1 modules
var JSX_attribute = __webpack_require__(2953);
;// CONCATENATED MODULE: ./node_modules/absol/src/JSX/dom.js


function domVisitor(jsxCode) {
    var visitor = {
        File: function (node, ac) {
            return acept(node.program, ac);
        },
        Program: function (node, ac) {
            ac.child = node.body.map(function (cNode) {
                return acept(cNode, {});
            });
            return ac;
        },
        ExpressionStatement: function (node, ac) {
            return acept(node.expression, ac);
        },
        JSXElement: function (node, ac) {
            acept(node.openingElement, ac);
            if (node.children && node.children.length > 0) {

                ac.child = node.children.map(function (cNode) {

                    return acept(cNode, {});
                });
            }
            return ac;

        },
        JSXOpeningElement: function (node, ac) {
            var name = {};
            acept(node.name, name);
            ac.tag = name.value;
            if (node.attributes && node.attributes.length > 0) {
                node.attributes.forEach(function (aNode) {
                    var attribute = {};
                    acept(aNode, attribute);
                    if (attribute.key) {
                        if (attribute.key.startsWith('data-')) {
                            ac.data = ac.data || {};
                            ac.data[attribute.key.replace('data-', '')] = attribute.value;
                        }
                        else if (attribute.key.startsWith('prop-')) {
                            ac.props = ac.props || {};
                            ac.props[attribute.key.replace('prop-', '')] = attribute.value;
                        }
                        else if (attribute.key.startsWith('on-')) {
                            ac.on = ac.props || {};
                            ac.on[attribute.key.replace('on-', '')] = attribute.value;
                        }
                        else if (attribute.key == 'style') {
                            ac.style = (0,JSX_attribute.parseStyleAttr)(attribute.value);
                        }
                        else if (attribute.key == 'class') {
                            var classList = (0,JSX_attribute.parseClassAttr)(attribute.value);
                            if (classList.length > 0)
                                ac.class = classList;
                        }
                        else{
                            ac.attr = ac.attr || {};
                            ac.attr[attribute.key] = attribute.value;
                        }
                    }
                }, {});
            }
            return ac;
        },
        JSXIdentifier: function (node, ac) {
            ac.value = node.name;
        },
        JSXAttribute: function (node, ac) {
            var key = {};
            acept(node.name, key);

            ac.key = key.value;
            var value = {};

            acept(node.value, value);
            ac.value = value.value;
            return ac;
        },
        StringLiteral: function (node, ac) {
            ac.value = node.value;
        },
        JSXExpressionContainer: function (node, ac) {
            ac.value = { expression: jsxCode.substring(node.expression.start, node.expression.end) };
            return ac;
        },
        JSXText: function (node, ac) {
            ac.text = node.value
            return ac;
        }
    };
    function accept(node, ac) {
        return node && visitor[node.type] && visitor[node.type](node, ac);
    }
    return {
        acept: accept,
        accept: accept,
        visitor: visitor
    }
}


/***
 * @param {String} jsxCode
 */
function parseDom(jsxCode) {
    jsxCode = jsxCode.trim().replace(/>\s+</gm, '><').replace(/<(\/?)(img|input|link|br|meta)([^>]*)>/g, function (sub, end, tag, content) {
        if (end == '/') return '';
        return '<' + tag + content + '/>';
    });
    var ast = babel.parse(
        jsxCode,
        {
            plugins: [
                babel.pluginSyntaxJsx
            ]
        });
    var xmlData = {};
    domVisitor(jsxCode).acept(ast, xmlData);
    if (xmlData.child.length > 1) return xmlData.child;
    return xmlData.child[0];
}


// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/Context.js
var Context = __webpack_require__(5721);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Activity.js


//NOTE: !impotant : don't make setter, getter for activity, just code like JAVA
/** 
 * @class
 */
function Activity() {
    Context/* default.call */.Z.call(this);
}


Object.defineProperties(Activity.prototype, Object.getOwnPropertyDescriptors(Context/* default.prototype */.Z.prototype));
Activity.prototype.constructor = Activity;


Activity.prototype.startActivity = function (activity) {
    if (this.parent) {
        this.parent.startActivity(activity);
    }
    else {
    }
};

Activity.prototype.finish = function () {
    if (this.parent) {
        this.parent.stopActivity(this);
    }
    else {

    }
};

/* harmony default export */ const AppPattern_Activity = (Activity);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/ContextManager.js
var ContextManager = __webpack_require__(6372);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Application.js



/**
 * @class
 */
function Application() {
    Context/* default.call */.Z.call(this);
    this.activityStack = [];
    /** @type {Activity} */
    this.currentActivity = null;
}

Object.defineProperties(Application.prototype, Object.getOwnPropertyDescriptors(Context/* default.prototype */.Z.prototype));
Application.prototype.constructor = Application;

/**
 * @param {Activity} activity
 */
Application.prototype.startActivity = function (activity) {
    if (this.currentActivity != null) {
        this.currentActivity.pause();
        this.activityStack.push(this.currentActivity);
    }
    this.currentActivity = activity;
    this.appendChild(activity);
    activity.attach(this);
    this.setContentView(activity.getView(), true);
    activity.start();
};

/**
 * @param {Activity} activity
 */
Application.prototype.stopActivity = function (activity) {
    if (this.currentActivity == activity) {
        if (this.activityStack.length == 0) {
            //todo
        }
        else {
            activity.detach();
            this.removeChild(this.currentActivity);
            this.currentActivity = this.activityStack.pop();
            this.setContentView(this.currentActivity.getView());
            this.currentActivity.resume();
        }
    }
    else {
        console.error("NOT ON TOP ACTIVITY");
    }
};

/**
 * @param {HTMLElement} view
 */
Application.prototype.setContentView = function (view, overlay) {
    throw new Error("Not Implement!");
};

Application.prototype.backToTopActivity = function () {
    while (this.activityStack.length > 0) {
        this.currentActivity.stop();
        this.currentActivity = this.activityStack.pop();
    }
    this.setContentView(this.currentActivity.getView());
    this.currentActivity.resume();
};

/* harmony default export */ const AppPattern_Application = (Application);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/VarScope.js
var VarScope = __webpack_require__(1312);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/Fragment.js + 1 modules
var Fragment = __webpack_require__(4861);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Rectangle.js
var Rectangle = __webpack_require__(2759);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Vec2.js
var Vec2 = __webpack_require__(557);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/int.js
var Math_int = __webpack_require__(7988);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/Arc.js



function Arc(x, y, r, start, end) {
    this.x = x;
    this.y = y;
    this.r = r;
    this.start = start;
    this.end = end;
}

Arc.prototype.isPointInBound = function (p) {
    if ((0,Math_int.distance)(this.x, this.y, p.x, p.y) > r) return false;
    return (0,Math_int.radianInRange)(Math.atan2(p.y - this.y, p.x - this.x), start, end);
};

Arc.prototype.isRectInBound = function (rect) {
    return this.isPointInBound(rect.A()) && this.isPointInBound(rect.B()) &&
        this.isPointInBound(rect.C()) && this.isPointInBound(rect.D());
};

Arc.prototype.isRectOutBound = function (rect) {
    return !this.isPointInBound(rect.A()) && !this.isPointInBound(rect.B()) &&
        !this.isPointInBound(rect.C()) && !this.isPointInBound(rect.D());
};

Arc.prototype.isRectCollapse = function (rect) {
    return this.isPointInBound(rect.A()) || this.isPointInBound(rect.B()) ||
        this.isPointInBound(rect.C()) || this.isPointInBound(rect.D());
};


Arc.prototype.centerPoint = function () {
    var mid = (this.start + this.end) / 2;
    var x = this.x + Math.cos(mid) * this.r * 2 / 3;
    var y = this.y + Math.sin(mid) * this.r * 2 / 3;
    return new Vec2/* default */.Z(x, y);
};

Arc.prototype.centerRoundPoint = function () {
    var mid = (this.start + this.end) / 2;
    var x = this.x + Math.cos(mid) * this.r;
    var y = this.y + Math.sin(mid) * this.r;
    return new Vec2/* default */.Z(x, y);
};


Arc.make = function (x, y, r, start, end) {
    return new Arc(x, y, r, start, end);
};


/* harmony default export */ const Math_Arc = (Arc);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/NumRange.js
/**
 * 
 * @param {Number} start 
 * @param {Number} length
 */
function NumRange(start, length) {
    if (arguments.length === 1)
        length = 0;
    else if (arguments.length === 0) {
        length = 0;
        start = 0;
    }
    this.start = start;
    this.length = length;
}


/**
 * @param {Number} num 
 */
NumRange.prototype.contains = function (num) {
    return (num >= this.start) && (num <= this.start + this.length);
};


/**
 * @param {NumRange} other
 * @returns {NumRange}
 */
NumRange.prototype.merge = function (other) {
    var start = Math.min(this.start, other.start);
    var end = Math.max(this.start + this.length, other.start + other.length);
    return new NumRange(start, end - start);
};


NumRange.prototype.centerValue = function () {
    return this.start + this.length / 2;
};


/**
 * @param {NumRange} other
 * @returns {Boolean}
 */
NumRange.prototype.isCollapse = function (other) {
    var start = Math.max(this.start, other.start);
    var end = Math.min(this.start + this.length, other.start + other.length);
    return start <= end;
};


/**
 * @param {NumRange} other
 * @returns {NumRange}
 */
NumRange.prototype.collapsedNumRange = function (other) {
    var start = Math.max(this.start, other.start);
    var end = Math.min(this.start + this.length, other.start + other.length);
    if (start <= end)
        return new NumRange(start, end - start);
    return null;
};


NumRange.prototype.clone = function () {
    return new NumRange(this.start, this.length);
};


/* harmony default export */ const Math_NumRange = (NumRange);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Clipboard.js
var Clipboard = __webpack_require__(5164);
// EXTERNAL MODULE: ./node_modules/absol/src/DataStructure/Heap.js
var Heap = __webpack_require__(5491);
// EXTERNAL MODULE: ./node_modules/absol/src/Time/datetime.js
var datetime = __webpack_require__(7807);
// EXTERNAL MODULE: ./node_modules/absol/src/AppPattern/CMDRunner.js
var CMDRunner = __webpack_require__(2243);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Element.js
var Element = __webpack_require__(1487);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElementNS.js
var AElementNS = __webpack_require__(2510);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DomSignal.js
var DomSignal = __webpack_require__(5150);
;// CONCATENATED MODULE: ./node_modules/absol/src/Cookie/CookieStore.js


function CookieStore(converter) {
    this.converter = converter || base64.UnicodeBase64Converter;
}


CookieStore.prototype.isEnabled = function () {
    var cookieEnabled = !!navigator.cookieEnabled;

    //if not IE4+ nor NS6+
    if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) {
        document.cookie = "testcookie_enabled";
        cookieEnabled = document.cookie.indexOf("testcookie_enabled") != -1;
    }
    return cookieEnabled;
};

CookieStore.prototype.secure = function () {
    document.cookie = "secure";
};


CookieStore.prototype.get = function (key) {
    var bkey = this.converter.encode(key).replace(/=/g, '_');
    var pairs = document.cookie.split(';')
        .map(function (text) { return text.split('=') })
        .filter(function (pair) {
            return pair[0].trim() == bkey;
        });
    if (pairs.length > 0) {
        if (pairs[0].length > 1) {
            var bvalue = pairs[0][1];
            return this.converter.decode(bvalue.replace(/_/g, '=').trim());
        }
        else {
            return true;
        }
    }
    else
        return undefined;
};


CookieStore.prototype.set = function (key, value) {
    var bkey = this.converter.encode(key);
    var bvalue = this.converter.encode(value);
    document.cookie = bkey.replace(/=/g, '_') + "=" + bvalue.replace(/=/g, '_');
};

/* harmony default export */ const Cookie_CookieStore = (new CookieStore());



;// CONCATENATED MODULE: ./node_modules/absol/src/Cookie/parseCookieString.js
/***
 *
 * @param {string} text
 * @return {{}}
 */
function parseCookieString(text) {
    return text.split(/\s*;\s*/).reduce(function (ac, item) {
        var tokens = item.split('=');
        var name = (tokens.shift() || '').trim();
        if (!name) return ac;
        var value = (tokens.shift() || '').trim();
        if (!value) value = true;
        ac[name] = value;
        return ac;
    }, {});
}
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js
var HTML5_ResizeSystem = __webpack_require__(6700);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Mat3.js
var Mat3 = __webpack_require__(9846);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/LanguageSystem.js
var LanguageSystem = __webpack_require__(6013);
;// CONCATENATED MODULE: ./node_modules/absol/src/Code/FlagManager.js



/***
 * @extends EventEmitter
 * @constructor
 */
function FlagManager() {
    EventEmitter/* default.call */.ZP.call(this);
    this.flag = {};
    this.readSetting();
}

OOP/* default.mixClass */.ZP.mixClass(FlagManager, EventEmitter/* default */.ZP);

FlagManager.prototype.STORE_KEY = "ABSOL_FLAG"

FlagManager.prototype.readSetting = function () {
    var flagText = localStorage.getItem(this.STORE_KEY) || '{}';
    var newFlag = {};
    try {
        newFlag = JSON.parse(flagText);
    } catch (err) {

    }
    this.applyFlag(newFlag);
};

FlagManager.prototype.applyFlag = function (newFlag, save) {
    var changed = [];
    Object.keys(Object.assign({}, this.flag, newFlag)).forEach(function (key) {
        if (key in window) {
            if (key in newFlag) {
                if (window[key] !== newFlag[key]) {
                    window[key] = newFlag[key];
                    changed.push(key);
                }
            }
            else {
                changed.push(key);
                delete window[key];
            }
        }
        else {
            if (key in newFlag) {
                if (window[key] !== newFlag[key]) {
                    window[key] = newFlag[key];
                    changed.push(key);
                }
            }
        }
    });
    this.flag = newFlag;
    if (save) this.saveSetting();
    if (changed.length > 0) {
        this.emit('change', { type: 'change', target: this, keys: changed })
    }
};

FlagManager.prototype.saveSetting = function () {
    localStorage.setItem(this.STORE_KEY, JSON.stringify(this.flag));
};

/***
 *
 * @param {string} key
 * @param {boolean=} value
 */
FlagManager.prototype.add = function (key, value) {
    if (!key || (typeof (key) != 'string')) return;
    if (key in this.flag) return;
    if (typeof (value) != "boolean") {
        value = !!window[key];
    }
    this.flag[key] = value;
    window[key] = value;
    this.saveSetting();
    this.emit('change', { type: 'change', target: this, keys: [key] });
};

FlagManager.prototype.set = function (key, value) {
    if (!key || (typeof (key) != 'string')) return;
    if (typeof (value) != "boolean") {
        value = !!window[key];
    }
    var changed = false;
    this.flag[key] = value;
    if (window[key] !== value) {
        changed = true;
    }
    this.saveSetting();
    if (changed) {
        this.emit('change', { type: 'change', target: this, keys: [key] });
    }
};

FlagManager.prototype.remove = function (key) {
    if (key in this.flag) {
        delete window[key];
        delete this.flag[key];
        this.emit('change', { type: 'change', target: this, keys: [key] });
    }
};

/* harmony default export */ const Code_FlagManager = (new FlagManager());
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
;// CONCATENATED MODULE: ./node_modules/absol/src/Code/ALogger.js





Code_FlagManager.add('ABSOL_DEBUG', false);

function ALogger() {
    Code_FlagManager.on('change', this._updateProto.bind(this));
    this._updateProto();
}

ALogger.prototype._updateProto = function () {
    ['log', 'table', 'table', 'error', 'warn'].forEach(function (name) {
        var cFunction = window['ABSOL_DEBUG'] ? (console[name] && console[name].bind(console)) : noop/* default */.Z;
        this[name] = cFunction || noop/* default */.Z;
    }.bind(this));
};


ALogger.prototype.log = noop/* default */.Z;
ALogger.prototype.table = noop/* default */.Z;
ALogger.prototype.error = noop/* default */.Z;
ALogger.prototype.warn = noop/* default */.Z;

(window || __webpack_require__.g).ALogger = new ALogger();


/* harmony default export */ const Code_ALogger = (ALogger);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/ObservableArray.js


/***
 * @augments EventEmitter
 * @extends Array
 * @constructor
 */
function ObservableArray(array) {
    EventEmitter/* default.call */.ZP.call(this);
    Object.defineProperty(this, '_array', {
        configurable: false,
        enumerable: false,
        value: array
    });
    this._makeArrIndex(0, array.length);
}


Object.defineProperty(ObservableArray.prototype, 'unshift',
    {
        enumerable: false,
        value: function () {
            var newItems = Array.prototype.slice.call(arguments);
            var cN = this._array.length;
            this._makeArrIndex(cN, this._array.length + newItems.length);
            this._array.unshift.apply(this._array, newItems);
            this.emit("additem", {
                target: this,
                items: newItems,
                type: 'additem',
                offset: 0,
                action: 'unshift'
            }, this);
        }
    });

Object.defineProperty(ObservableArray.prototype, 'shift',
    {
        enumerable: false,
        value: function () {
            var res = undefined;
            if (this._array.length > 0) {
                res = this._array.shift();
                this._removeIndex(this._array.length);
                this.emit("removeitem", {
                    target: this, type: 'additem',
                    offset: 0,
                    action: 'shift',
                    items: [res],
                    item: res
                }, this);
            }
            return res;
        }
    });


Object.defineProperty(ObservableArray.prototype, 'push', {
    enumerable: false,
    value: function () {
        var newItems = Array.prototype.slice.call(arguments);
        var cN = this._array.length;
        this._makeArrIndex(this._array.length, this._array.length + newItems.length);
        this._array.push.apply(this._array, newItems);
        this.emit("additem", { target: this, items: newItems, type: 'additem', offset: cN, action: 'push' }, this);
    }
});

Object.defineProperty(ObservableArray.prototype, 'pop', {
    enumerable: false,
    value: function () {
        var res = undefined;
        if (this._array.length > 0) {
            res = this._array.pop();
            this._removeIndex(this._array.length);
            this.emit("removeitem", {
                target: this,
                type: 'additem',
                offset: this._array.length,
                action: 'shift',
                items: [res],
                item: res
            }, this);
        }
        return res;
    }
});

Object.defineProperty(ObservableArray.prototype, 'replace', {
    enumerable: false,
    value: function (offset, items) {
        for (var i = 0; i < items.length && offset < this._array.length; ++i, ++offset) {
            this._array[offset] = items[i];
        }
    }
});


Object.defineProperty(ObservableArray.prototype, 'toJSON', {
    enumerable: false,
    value: function () {
        return this._array;
    }
});

Object.defineProperty(ObservableArray.prototype, 'valueOf', {
    enumerable: false,
    value: function () {
        return this._array;
    }
});

Object.defineProperty(ObservableArray.prototype, '_makeArrIndex', {
    enumerable: false,
    value: function (cN, nN) {
        var i;
        if (nN > cN) {
            for (i = cN; i < nN; ++i)
                this._defineIndex(i);
        }
        else {
            for (i = cN - 1; i >= nN; --i)
                this._removeIndex(i);
        }
    }
});

/***
 *
 * @param {number} idx
 * @private
 */
Object.defineProperty(ObservableArray.prototype, '_defineIndex', {
    enumerable: false,
    value: function (idx) {
        if (!(idx in this)) {
            Object.defineProperty(this, idx, {
                set: function (value) {
                    var oldValue = this._array[idx]
                    this._array[idx] = value;
                    this.emit('setitem', {
                        type: 'setitem',
                        target: this,
                        oldValue: oldValue,
                        vale: value,
                        offset: idx
                    }, this);
                },
                get: function () {
                    return this._array[idx];
                },
                configurable: true,
                enumerable: true
            });
        }
    }
});

Object.defineProperty(ObservableArray.prototype, '_removeIndex', {
    enumerable: false,
    value: function (idx) {
        delete this[idx];
    }
});


Object.defineProperty(ObservableArray.prototype, 'splice', {
    enumerable: false,
    value: function (index, howMany) {
        var res = [];
        var newItems = Array.prototype.slice.call(arguments, 2);
        index = index == null ? 0 : index < 0 ? this._array.length + index : index;
        howMany = howMany == null ? this._array.length - index : howMany > 0 ? howMany : 0;
        if (howMany > 0) {
            this._makeArrIndex(this._array.length, this._array.length - howMany);
            res = this._array.splice(index, howMany);
            if (newItems.length > 0) {
                if (res.length > 0) {
                    this.emit('replaceitem', {
                        type: 'replaceitem',
                        offset: index,
                        oldItems: res,
                        newItems: newItems,
                        target: this,
                        action: 'splice'
                    }, this);
                }
                else {
                    this.emit('additem', {
                        type: 'additem',
                        offset: index,
                        items: newItems,
                        target: this
                    }, this);
                }
            }
            else {
                if (res.length > 0) {
                    this.emit('removeitem', {
                        target: this, type: 'additem',
                        offset: 0,
                        action: 'splice',
                        items: res,
                    }, this);
                }
            }
        }
        return res;
    }
});

Object.defineProperty(ObservableArray.prototype, 'length', {
    set: function (value) {
        var n = Number(value);
        var length = this._array.length;
        if (n % 1 === 0 && n >= 0) {
            if (n < length) {
                this.splice(n);
            }
            else if (n > length) {
                this.push.apply(this, new Array(n - length));
            }
        }
        else {
            throw new RangeError("Invalid array length");
        }
        this._array.length = n;
    },
    get: function () {
        return this._array.length;
    }
});


Object.getOwnPropertyNames(Array.prototype).forEach(function (name) {
    if (!(name in ObservableArray.prototype)) {
        Object.defineProperty(ObservableArray.prototype, name, {
            configurable: false,
            enumerable: false,
            writable: false,
            value: Array.prototype[name]
        });
    }
});

Object.getOwnPropertyNames(EventEmitter/* default.prototype */.ZP.prototype).forEach(function (name) {
    if (!(name in ObservableArray.prototype)) {
        Object.defineProperty(ObservableArray.prototype, name, {
            configurable: false,
            enumerable: false,
            writable: false,
            value: EventEmitter/* default.prototype */.ZP.prototype[name]
        });
    }
});

/* harmony default export */ const AppPattern_ObservableArray = (ObservableArray);


;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/ObservableStruct.js


/***
 * @extends EventEmitter
 * @param {Object} o
 * @constructor
 */
function ObservableStruct(o) {
    EventEmitter/* default.call */.ZP.call(this);
    Object.defineProperty(this, '__o__', {
        configurable: false,
        enumerable: false,
        value: o
    });
    for (var key in o) this.defineProperty(key);
}

Object.defineProperty(ObservableStruct.prototype, 'defineProperty', {
    configurable: false,
    enumerable: false,
    writable: false,
    /***
     *
     * @param {string} name
     * @param {*=} value
     */
    value: function (name, value) {
        if (!(name in this)) {
            Object.defineProperty(this, name, {
                set: function (value) {
                    var oldValue = this.__o__[name]
                    this.__o__[name] = value;
                    this.emit('setproperty', {
                        type: 'setproperty',
                        target: this,
                        oldValue: oldValue,
                        vale: value,
                        name: name
                    }, this);
                },
                get: function () {
                    return this.__o__[name];
                },
                configurable: true,
                enumerable: true
            });
        }
    }
});


Object.getOwnPropertyNames(EventEmitter/* default.prototype */.ZP.prototype).forEach(function (name) {
    if (!(name in ObservableStruct.prototype)) {
        Object.defineProperty(ObservableStruct.prototype, name, {
            configurable: false,
            enumerable: false,
            writable: false,
            value: EventEmitter/* default.prototype */.ZP.prototype[name]
        });
    }
});

/* harmony default export */ const AppPattern_ObservableStruct = (ObservableStruct);

// EXTERNAL MODULE: ./node_modules/absol/src/Code/safeThrow.js
var safeThrow = __webpack_require__(5650);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/circuit/CCBlock.js



/***
 *
 * @param {{id?:string}=} opt
 * @constructor
 */
function CCBlock(opt) {
    opt = opt || {};
    this.id = opt.id || (0,stringGenerate.randomIdent)(16);
    Object.defineProperty(this, '__cc_listener__', {
        enumerable: false,
        configurable: true,
        writable: false,
        value: {}
    });

    Object.defineProperty(this, '__cc_line_list_by_id__', {
        enumerable: false,
        configurable: true,
        writable: false,
        value: {}
    });
}

/***
 *
 * @param {string} pinName
 * @param {function} listener
 * @return {CCBlock}
 */
CCBlock.prototype.pinOn = function (pinName, listener) {
    var cbList;
    if (this.__cc_listener__[pinName]) {
        cbList = this.__cc_listener__[pinName];
    } else {
        cbList = [];
        this.__cc_listener__[pinName] = cbList;

    }
    if (cbList.indexOf(listener) < 0) {
        cbList.push(listener);
    } else {
        console.warn("Duplicate pin listener!");
    }
    return this;
};

CCBlock.prototype.pinOff = function (pinName, listener) {
    if (!this.__cc_listener__[pinName]) return this;
    var cbList = this.__cc_listener__[pinName];
    var cbIdx = cbList.indexOf(listener);
    if (cbIdx >= 0) {
        cbList.splice(cbIdx);
    }
    return this;
};

CCBlock.prototype.pinFire = function (pinName) {
    if (!this.__cc_listener__[pinName]) return this;
    var cbList = this.__cc_listener__[pinName].slice();
    if (cbList.length === 0) return; //avoid call pinGetValue
    var args = Array.prototype.slice.call(arguments, 1);
    if (args.length === 0 && this.pinHandlers[pinName] && this.pinHandlers[pinName].get && cbList.length > 0)
        args.push(this.pinGetValue(pinName));
    for (var i = 0; i < cbList.length; ++i) {
        try {
            cbList[i].apply(this, args);
        } catch (e) {
            (0,safeThrow/* default */.Z)(e);
        }
    }
};

CCBlock.prototype.pinFireAll = function () {
    var pinNames = Object.keys(this.pinHandlers);
    var pinName;
    for (var i = 0; i < pinNames.length; ++i) {
        pinName = pinNames[i];
        if (this.pinHandlers[pinName] && this.pinHandlers[pinName].get)
            this.pinFire(pinName);
    }
};


CCBlock.prototype.pinReceives = function (pinName) {
    var args = Array.prototype.slice.call(arguments, 1);
    if (this.pinHandlers[pinName] && this.pinHandlers[pinName].receives) {
        this.pinHandlers[pinName].receives.apply(this, args);
    }
};

CCBlock.prototype.pinGetValue = function (pinName) {
    var args = Array.prototype.slice.call(arguments, 1);
    if (this.pinHandlers[pinName] && this.pinHandlers[pinName].get) {
        return this.pinHandlers[pinName].get.apply(this, args);
    }
    return undefined;
};


CCBlock.prototype.pinGetDescriptor = function (pinName) {
    var args = Array.prototype.slice.call(arguments, 1);
    var descriptor = this.pinHandlers[pinName] && this.pinHandlers[pinName].descriptor;
    if (descriptor) {
        if (typeof descriptor === "function")
            return this.pinHandlers[pinName].get.apply(this, args);
        return descriptor;
    }
    return undefined;
};

Object.defineProperty(CCBlock.prototype, 'pinLines', {
    get: function () {
        var lineList = this.__cc_line_list_by_id__;
        return Object.keys(lineList).map(function (id) {
            return lineList[id];
        });
    }
});


CCBlock.prototype.pinHandlers = {};

/* harmony default export */ const circuit_CCBlock = (CCBlock);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/circuit/CCLine.js



/***
 *
 * @param {CCBlock} u
 * @param {string} uPinName
 * @param {CCBlock} v
 * @param {string} vPinName
 * @param {boolean=} twoWay
 * @param {{id?:string}=} opt
 * @constructor
 */
function CCLine(u, uPinName, v, vPinName, twoWay, opt) {
    opt = opt || {};
    twoWay = !!twoWay;
    Object.defineProperty(this, 'id', {
        enumerable: true, writable: false, value: opt.id || (0,stringGenerate.randomIdent)(32)
    });
    Object.defineProperty(this, 'u', {
        enumerable: true, writable: false, value: u
    });
    Object.defineProperty(this, 'v', {
        enumerable: true, writable: false, value: v
    });
    Object.defineProperty(this, 'uPinName', {
        enumerable: true, writable: false, value: uPinName
    });
    Object.defineProperty(this, 'vPinName', {
        enumerable: true, writable: false, value: vPinName
    });

    Object.defineProperty(this, 'twoWay', {
        enumerable: true, writable: false, value: twoWay
    });

    this.vToU = this.vToU.bind(this);
    this.uToV = this.uToV.bind(this);
    this.u.pinOn(this.uPinName, this.uToV);
    if (this.twoWay)
        this.v.pinOn(this.vPinName, this.vToU);
    this.u.__cc_line_list_by_id__[this.id] = this;
    this.v.__cc_line_list_by_id__[this.id] = this;
}


CCLine.prototype.remove = function () {
    this.u.pinOff(this.uPinName, this.uToV);
    if (this.twoWay)
        this.v.pinOff(this.vPinName, this.vToU);
    delete this.u.__cc_line_list_by_id__[this.id];
    delete this.v.__cc_line_list_by_id__[this.id];
};

CCLine.prototype.uToV = function () {
    var args = [this.vPinName].concat(Array.prototype.slice.call(arguments));
    this.v.pinReceives.apply(this.v, args);
};

CCLine.prototype.vToU = function () {
    var args = [this.uPinName].concat(Array.prototype.slice.call(arguments));
    this.u.pinReceives.apply(this.u, args);
};


/* harmony default export */ const circuit_CCLine = (CCLine);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/FileSaver.js
var FileSaver = __webpack_require__(5447);
// EXTERNAL MODULE: ./node_modules/absol/src/Network/Thread.js + 1 modules
var Thread = __webpack_require__(6672);
// EXTERNAL MODULE: ./node_modules/absol/src/JSMaker/generator.js
var generator = __webpack_require__(2914);
;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/ShareConfiguration.js



/**
 *
 * @param {{storageKey: string}} opt
 * @constructor
 */
function ShareConfiguration(opt) {
    this.opt = Object.assign({
        storageKey: "AS_SHARE_CONFIGURATION",
    }, opt);
    Object.defineProperty(this, 'data', {
        value: {},
        enumerable: true,
        writable: false
    });

    Object.defineProperty(this, '__listener__', {
        value: {},
        enumerable: false,
        writable: false
    });
    this.to = -1;
    this._load();
}

ShareConfiguration.prototype.version = 1;

ShareConfiguration.prototype._load = function () {
    var js = localStorage.getItem(this.opt.storageKey);
    if (!js) return;
    try {
        var obj = (new Function('return ' + js))();
        if (obj && obj.version === this.version) {
            Object.assign(this.data, obj.data || {});
        }
    } catch (e) {

    }
};

/***
 *
 * @param {string} key
 * @param {*|undefined} value
 * @returns this
 */
ShareConfiguration.prototype.set = function (key, value) {
    var prev = this.data[key];
    if (value === undefined) {
        delete this.data[key];
    }
    else {
        this.data[key] = value;
    }
    if (value !== prev) {
        this.emit(key, value, this);
    }
    return this;
};

/***
 *@returns this
 */
ShareConfiguration.prototype.save = function () {
    clearTimeout(this.to);
    var obj = {
        data: this.data,
        version: this.version
    };
    var js = (0,generator/* generateJSVariable */.NQ)(obj);
    localStorage.setItem(this.opt.storageKey, js);
};

/***
 *@returns this
 */
ShareConfiguration.prototype.saveDelay = function () {
    clearTimeout(this.to);
    this.to = setTimeout(() => this.save(), 100);
};


ShareConfiguration.prototype.emit = function (key) {
    var args = Array.prototype.slice.call(arguments, 1);
    var self = this;
    if (this.__listener__[key]) {
        this.__listener__[key].slice().forEach(function (f) {
            try {
                f.apply(self, args);
            } catch (err) {
                (0,safeThrow/* default */.Z)(err);
            }
        });
    }
    return this;
};

/***
 *
 * @param {string|Object} key
 * @param {function=}listener
 * @return {ShareConfiguration}
 */
ShareConfiguration.prototype.on = function (key, listener) {
    if (typeof key === "string") {
        if (!this.__listener__[key]) this.__listener__[key] = [];
        if (this.__listener__[key].indexOf(listener) < 0) {
            this.__listener__[key].push(listener);
        }
    }
    else if (typeof key === "object") {
        for (var key1 in key) {
            this.on(key1, key[key1]);
        }
    }
    return this;
};

/***
 *
 * @param {string|Object} key
 * @param {function=}listener
 * @return {ShareConfiguration}
 */
ShareConfiguration.prototype.off = function (key, listener) {
    if (typeof key === "string" && this.__listener__[key]) {
        var idx = this.__listener__[key].indexOf(listener);
        if (idx >= 0) {
            this.__listener__[key].splice(idx, 1);
        }
    }
    else if (typeof key === "object") {
        for (var key1 in key) {
            this.off(key1, key[key1]);
        }
    }
    return this;
};

/***
 *
 * @param {string} key
 * @param {*=} defaultValue
 * @return {*}
 */
ShareConfiguration.prototype.get = function (key, defaultValue) {
    var value = this.data[key];
    if (value === undefined)
        return defaultValue;
    return value;
};

ShareConfiguration.prototype.contains = function (key) {
    return this.data[key] !== undefined;
};

ShareConfiguration.instance = new ShareConfiguration();

/* harmony default export */ const AppPattern_ShareConfiguration = (ShareConfiguration);
// EXTERNAL MODULE: ./node_modules/absol/src/DataStructure/Array.js
var DataStructure_Array = __webpack_require__(7835);
;// CONCATENATED MODULE: ./node_modules/absol/src/Network/url.js
/***
 *
 * @param {string} current
 * @param {string} target
 * @return {string}
 */
function resolveUrl(current, target) {
    current = current.trim();
    target = target.trim();
    if (target.match(/[a-z]+:\/\//)) return target;

    var origin = current.match(/^[a-z]+:\/\/[a-zA-Z0-9._]+(:[0-9]+)?/);
    if (origin) origin = origin[0];
    var cPath = current.replace(/^[a-z]+:\/\/[a-zA-Z0-9._]+(:[0-9]+)?/, '');
    if (target.startsWith('/')) return origin ? origin + target : target;
    var cParts = cPath.split('/');
    cParts.pop();
    var tParts = target.split('/');
    var t;
    //todo: normal current
    while (tParts.length > 0) {
        t = tParts.shift().trim();
        if (t === '..') {
            cParts.pop();
        }
        else if (t !== '.' && t.length > 0) {
            cParts.push(t);
        }
    }
    if (origin) {
        if (cParts[0].length === 0) cParts.shift();
        cParts.unshift(origin)
    }

    return cParts.join('/');
}


;// CONCATENATED MODULE: ./node_modules/absol/src/Network/remoteRequireNodeAsync.js


function remoteRequireNodeAsync(filename, entry) {
    var moduleCache = {};
    var factors = {};
    var resources = {};


    function getFileName(path) {
        return path.split('/').pop();
    }

    function getExtension(fileName) {
        return fileName.split('.').slice(1).pop() || null;
    }

    function require(currentLoc, fn) {
        var fullPath = resolveUrl(currentLoc, fn);
        if (factors[fullPath + '.js']) fullPath = fullPath + '.js';
        var filename = getFileName(fullPath);//__filename
        var module = moduleCache[fullPath];
        if (!module) {
            if (factors[fullPath]) {
                module = { 'exports': {} };
                moduleCache[fullPath] = module;
                factors[fullPath](require.bind(null, fullPath), module, module.exports, resolveUrl(fullPath, '.'), filename, window)
            }
            else {
                throw new Error("Could not find module :" + fullPath);
            }
        }
        return module.exports;
    }


    function findAllRequire(s) {
        var regex0 = /[^a-zA-Z_.0-9]require\s*\([^\)]+\)/gm;
        var regex1 = /require\s*\([^)]+\)/gm;
        var regex2 = /\([^)]+\)/gm;
        var es = s.match(regex0);

        if (!es) return [];
        return es.map(function (s) {
            s = s.match(regex1)[0];
            s = s.match(regex2)[0];
            s = s.replace(/['"()]/gm, '');
            if (!getExtension(getFileName(s))) s += '.js';
            return s;
        });
    }

    function fetchResource(fullPath) {
        if (resources[fullPath]) return Promise.resolve();
        var resource = {};
        resources[fullPath] = resource;
        var ext = getExtension(getFileName(fullPath));
        resource.sync = fetch(fullPath, { cache: "no-cache" }).then(res => res.text()).then(text => {
            resource.text = text;
            switch (ext) {
                case 'js':
                    factors[fullPath] = new Function('require', 'module', 'exports', '__dir', '__filename', 'global', text)
                    break;
                case 'json':
                    factors[fullPath] = true;
                    moduleCache[fullPath] = { exports: JSON.parse(text) };
                    break;
                default:
                    factors[fullPath] = true;
                    moduleCache[fullPath] = { exports: text };
            }
            var requiredNodes;
            if (ext === 'js') {
                requiredNodes = findAllRequire(text);
                var syncs = requiredNodes.map(ident => fetchResource(resolveUrl(fullPath, ident)));
                return Promise.all(syncs);
            }
        });

        return resource.sync;
    }

    var absoluteEntry = location.href;

    function requireCode(filename, entry, fileList) {
        if (!fileList) fileList = {};
        if (!entry) entry = absoluteEntry;
        var fullPath = resolveUrl(entry, filename);
        if (fileList[fullPath] === 'pending') {
            return Promise.resolve();
        }
        else if (fileList[fullPath] !== undefined && fileList[fullPath] !== 'pending') {
            return Promise.resolve();
        }
        fileList[fullPath] = true;
        fileList[fullPath] = 'pending';
        return fetch(fullPath, { cache: "no-cache" }).then(res => res.text()).then(text => {
            fileList[fullPath] = text;
            var requirePath = findAllRequire(text);
            var waitCode = requirePath.map(function (e) {
                return requireCode(e, fullPath, fileList);
            });
            return Promise.all(waitCode).then(function () {
                return fileList;
            });
        });
    }


    if (!entry) entry = absoluteEntry;
    if (!getExtension(filename)) filename += '.js';
    var fullPath = resolveUrl(entry, filename);
    return fetchResource(fullPath).then(() => {
        return require('', fullPath);
    });
}

// EXTERNAL MODULE: ./node_modules/absol/src/Math/Polygon.js
var Polygon = __webpack_require__(9894);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DynamicCSS.js
var HTML5_DynamicCSS = __webpack_require__(488);
// EXTERNAL MODULE: ./node_modules/absol/src/Pharse/DPParser.js + 1 modules
var DPParser = __webpack_require__(3281);
// EXTERNAL MODULE: ./node_modules/absol/src/SCLang/SCGrammar.js
var SCGrammar = __webpack_require__(3224);
;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCParser.js




/***
 * @type {DPParser}
 */
var SCParser = new DPParser/* default */.Z(SCGrammar/* default */.Z);
/* harmony default export */ const SCLang_SCParser = (SCParser);
;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCOperatorExecutor.js
function OperatorExecutor() {
    this.oFXYs = {};
    this.oFXs = {};
}

/***
 *
 * @param {string} operator
 * @param {function(x, y, next: function):void} fxy
 */
OperatorExecutor.prototype.addBinaryOperator = function (operator, fxy) {
    if (!this.oFXYs[operator]) this.oFXYs[operator] = [];
    this.oFXYs[operator].unshift(fxy);
};


/***
 *
 * @param {string} operator
 * @param {function(x,  next: function):void} fx
 */
OperatorExecutor.prototype.addUnaryOperator = function (operator, fx) {
    if (!this.oFXs[operator]) this.oFXs[operator] = [];
    this.oFXs[operator].unshift(fx);
};

OperatorExecutor.prototype.executeBinaryOperator = function (operator, x, y) {
    var fXYs = this.oFXYs[operator];
    var i, next;
    if (fXYs) {
        i = -1;
        next = () => {
            ++i;
            if (i >= fXYs.length) throw  {
                message: 'Could not match any function for operator' + operator,
                x: x,
                y: y
            };
            return fXYs[i](x, y, next);
        };
        return next();
    }
    else {
        throw { message: 'Could not find operate: ' + operator };
    }
};


OperatorExecutor.prototype.executeUnaryOperator = function (operator, x) {
    var fXs = this.oFXs[operator];
    var i, next;
    if (fXs) {
        i = -1;
        next = () => {
            ++i;
            if (i >= fXs.length) throw  {
                message: 'Could not match any function for operator' + operator,
                x: x
            };
            return fXs[i](x, next);
        };
        return next();
    }
    else {
        throw { message: 'Could not find operate: ' + operator };
    }
};

/***
 * @type {OperatorExecutor}
 */
var SCOperatorExecutor = new OperatorExecutor();
/* harmony default export */ const SCLang_SCOperatorExecutor = (SCOperatorExecutor);
;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCOperators.js




function ADD(a, b) {
    var type_a = typeof a;
    var type_b = typeof b;
    if (type_a === "number") {
        if (type_b === "number" || type_b === 'string')
            return a + b;
    }
    if (type_a === "undefined" && type_b === "undefined")
        return undefined;
    if (type_a === 'string') {
        if (type_b === "string")
            return a + b;
        if (b instanceof Date) return a + (0,datetime.formatDateTime)(b, 'dd/MM/yyyy');
        if (type_b === "number") return a + b;
    }
    if (a instanceof Date) {
        if (type_b === 'number') {
            return new Date(a.getTime() + datetime.MILLIS_PER_DAY * b);
        }
        else if (type_b === 'string') {
            return (0,datetime.formatDateTime)(a, 'dd/MM/yyyy') + b;
        }
    }
    if (a.add && a.constructor === b.constructor) return a.add(b);

    console.error("Can not add: ", a, b);
    return NaN;
}

SCLang_SCOperatorExecutor.addBinaryOperator('+', ADD);


function SUB(a, b) {
    var type_a = typeof a;
    var type_b = typeof b;
    if (type_a === "number" && type_b === "number") {
        return a - b;
    }
    if (type_a === "undefined" && type_b === "undefined")
        return undefined;
    if (a instanceof Date) {
        if (type_b === 'number') {
            return new Date(a.getTime() - datetime.MILLIS_PER_DAY * b);
        }
    }
    if (a.sub && a.constructor === b.constructor) return a.sub(b);

    console.error("Can not sub: ", a, b);
    return NaN;
}

SCLang_SCOperatorExecutor.addBinaryOperator('-', SUB);


function MUL(a, b) {
    var type_a = typeof a;
    var type_b = typeof b;
    if (type_a === "number" && type_b === "number") {
        return a * b;
    }
    if (type_a === "undefined" && type_b === "undefined")
        return undefined;
    if (type_a === "string" && type_b === "number") {
        return a.repeat(b);
    }
    console.error("Can not mul: ", a, b);
    return NaN;
}

SCLang_SCOperatorExecutor.addBinaryOperator('*', MUL);


function DIV(a, b) {
    var type_a = typeof a;
    var type_b = typeof b;
    if (type_a === "number" && type_b === "number") {
        return a / b;
    }
    if (type_a === "undefined" && type_b === "undefined")
        return undefined;
    console.error("Can not div: ", a, b);
    return NaN;
}

SCLang_SCOperatorExecutor.addBinaryOperator('/', DIV);


function MOD(x, m) {
    return x % m;
}

SCLang_SCOperatorExecutor.addBinaryOperator('%', MOD);


function NEGATIVE(x) {
    return -x;
}

SCLang_SCOperatorExecutor.addUnaryOperator('-', NEGATIVE);


function POSITIVE(x) {
    return x;
}

SCLang_SCOperatorExecutor.addUnaryOperator('+', POSITIVE);

function NOT(x) {
    return !x;
}

SCLang_SCOperatorExecutor.addUnaryOperator('!', NOT);


function LESS_THAN(a, b) {
    if (a instanceof Date) a = a.getTime();
    if (b instanceof Date) b = b.getTime();
    return (a < b);
}

SCLang_SCOperatorExecutor.addBinaryOperator('<', LESS_THAN);


function MORE_THAN(a, b) {
    if (a instanceof Date) a = a.getTime();
    if (b instanceof Date) b = b.getTime();
    return (a > b);
}

SCLang_SCOperatorExecutor.addBinaryOperator('>', MORE_THAN);


function EQUAL(a, b) {
    if (a instanceof Date) a = a.getTime();
    if (b instanceof Date) b = b.getTime();
    return (a == b);
}

SCLang_SCOperatorExecutor.addBinaryOperator('==', EQUAL);

function EXTRACT_EQUAL(a, b) {
    if (a instanceof Date) a = a.getTime();
    if (b instanceof Date) b = b.getTime();
    return (a === b);
}

SCLang_SCOperatorExecutor.addBinaryOperator('===', EXTRACT_EQUAL);


function LESS_AND_EQUAL(a, b) {
    if (a instanceof Date) a = a.getTime();
    if (b instanceof Date) b = b.getTime();
    return (a <= b);
}

SCLang_SCOperatorExecutor.addBinaryOperator('<=', LESS_AND_EQUAL);


function MORE_AND_EQUAL(a, b) {
    if (a instanceof Date) a = a.getTime();
    if (b instanceof Date) b = b.getTime();
    return (a >= b);
}

SCLang_SCOperatorExecutor.addBinaryOperator('>=', MORE_AND_EQUAL);


function NOT_EQUAL(a, b) {
    if (a instanceof Date) a = a.getTime();
    if (b instanceof Date) b = b.getTime();
    return (a != b);
}

SCLang_SCOperatorExecutor.addBinaryOperator('!=', NOT_EQUAL);

function AND(a, b) {
    return a && b;
}

SCLang_SCOperatorExecutor.addBinaryOperator('&&', AND);

function OR(a, b) {
    return a || b;
}

SCLang_SCOperatorExecutor.addBinaryOperator('||', OR);


;// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Const.js
/***
 *
 * @param {T} value
 * @param {*=} type
 * @constructor
 * @template T
 */
function Const(value, type) {
    this.value = value;
    this.type = type;
}

Const.prototype.toString = function () {
    return this.value + '';
};

/***
 *
 * @return {T}
 */
Const.prototype.valueOf = function () {
    return this.value;
};

/**
 *
 * @return {T}
 */
Const.prototype.get = function () {
    return this.value;
}

/* harmony default export */ const AppPattern_Const = (Const);






;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCScope.js



/***
 *
 * @param {SCScope=} parent
 * @constructor
 */
function SCScope(parent) {
    this.parent = parent;
    /***
     *
     * @type {Object<string, Ref|Const>}
     */
    this.data = {};
}

SCScope.prototype.set = function (name, value) {
    var ref = this.findRef(name);
    if (!ref) throw new Error('"' + name + '" was not declared!');
    if (ref.set) {
        ref.set(value);
    }
    else {
        throw new Error('"' + name + '" defined with const cannot be modified!');
    }
};


SCScope.prototype.get = function (name) {
    var ref = this.findRef(name);
    if (!ref) throw new Error('"' + name + '" was not declared!');
    return ref.get();
};

SCScope.prototype.declareConst = function (name, value, force, type) {
    if ((name in this.data) && !force) throw new Error("Cannot redefine variable, " + name + " is already declared!");
    this.data[name] = new AppPattern_Const(value, type);
};


SCScope.prototype.declareVar = function (name, value, force, type) {
    if ((name in this.data) && !force) throw new Error("Cannot redefine variable, " + name + " is already declared!");
    this.data[name] = new Ref/* default */.Z(value, type);
};

SCScope.prototype.revoke = function (name) {
    delete this.data[name];
};

/***
 *
 * @param {string} name
 * @return {Ref|Const|null}
 */
SCScope.prototype.findRef = function (name) {
    return this.data[name] || (this.parent && this.parent.findRef(name)) || null;
};


/***
 *
 * @param {string} name
 * @return {SCScope|null}
 */
SCScope.prototype.findScope = function (name) {
    if (this.data[name]) return this;
    if (this.parent) return this.parent.findScope(name);
    return null;
};

/**
 *
 * @returns {SCScope}
 */
SCScope.prototype.makeFlattenedScope = function () {
    var res;
    if (this.parent) res = this.parent.makeFlattenedScope();
    else res = new SCScope();
    Object.assign(res.data, this.data);
    return res;
};


/* harmony default export */ const SCLang_SCScope = (SCScope);
;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCCodeGenerator.js



/***
 *
 * @constructor
 */
function SCCodeGenerator() {

}


SCCodeGenerator.prototype.accept = function (node) {
    if (!node) return '/*TODO*/';
    var visitor = this.visitors[node.type];
    if (visitor) {
        try {
            return this.visitors[node.type].apply(this, arguments);
        } catch (e) {
            console.error(e, node)
        }
    }
    else {
        return '[' + node.type + ']';
        // throw { message: 'Can not handle ', node: node };
    }
};

SCCodeGenerator.prototype.generate = function (ast) {
    return this.accept(ast);
};


/***
 *
 * @type {Object<string, function>}
 */
SCCodeGenerator.prototype.visitors = {
    Program: function (node) {
        return node.body.map(st => this.accept(st)).join('\n');
    },
    FunctionDeclaration: function (node) {
        var bodyCode = this.accept(node.body);
        var argsCode = node.params.map(arg => this.accept(arg)).join(', ');
        return `function ${node.id.name}(${argsCode}) ${bodyCode}`;
    },
    ArgumentDeclaration: function (node) {
        var res = node.id.name;
        var typeText;
        if (node.typeAnnotation) typeText = this.accept(node.typeAnnotation);
        if (typeText && typeText !== 'any') res += ': ' + typeText;
        return res;
    },
    TypeAnnotation: function (node) {
        return this.accept(node.typeAnnotation);
    },
    GenericType: function (node) {
        var typeText = this.accept(node.id);
        if (node.typeParameters && node.typeParameters.length > 0) {
            typeText += '<';
            typeText += node.typeParameters.map(it => this.accept(it)).join(', ');
            typeText += '>';
        }
        return typeText;
    },
    LinkedType: function (node) {
        return 'linktype ' + this.accept(node.address);
    },
    Identifier: function (node) {
        return node.name;
    },
    VariableDeclarator: function (node) {
        var res =  node.id.name;
        var typeText;
        if (node.typeAnnotation) typeText = this.accept(node.typeAnnotation);
        if (typeText && typeText !== 'any') res += ': ' + typeText;
        if (node.init) res += ' = ' + this.accept(node.init);
        res += ';';
        return res;
    },
    VariableDeclaration: function (node) {
        var res = 'var ';
        if (node.declarations) {
            res += node.declarations.map(arg => this.accept(arg)).join(', ');
        }
        else {
            node  = Object.assign({}, node);
            node.type = 'VariableDeclarator';
            res += this.accept(node); //adapter for old version
        }
        return res;
    },
    BlockStatement: function (node) {
        var bodyCode = node.body.map(it => this.accept(it)).join('\n');
        if (bodyCode.length > 0) {
            bodyCode = bodyCode.split('\n').map(r => '    ' + r).join('\n');
        }
        return ['{', bodyCode, '}'].join('\n');
    },
    AssignStatement: function (node) {
        //@deprecated
        return this.accept(node.left) + ' = ' + this.accept(node.right) + ';';
    },
    AssignmentExpression: function (node) {
        return this.accept(node.left) + ' = ' + this.accept(node.right);
    },
    BooleanLiteral: function (node) {
        return node.value ? 'true' : 'false';
    },
    NullLiteral: function (node) {
        return "null";
    },
    NewExpression: function (node) {
        var res = 'new ';
        if (node.callee.type === 'Identifier' || node.callee.type === 'MemberExpression') {
            res += this.accept(node.callee);
        }
        else {
            res += '(' + this.accept(node.callee) + ')';
        }

        res += '(';
        res += node.arguments.map(arg => this.accept(arg)).join(', ');
        res += ')';
        return res;
    },
    CallExpression: function (node) {
        var res = '';
        if (node.callee && (node.callee.type === 'Identifier' || node.callee.type === 'MemberExpression')) {
            res += this.accept(node.callee);
        }
        else {
            res += '(' + this.accept(node.callee) + ')';
        }

        res += '(';
        res += node.arguments.map(arg => this.accept(arg)).join(', ');
        res += ')';
        return res;
    },
    MemberExpression: function (node) {
        var res = '';
        if (node.object.type === 'Identifier' || node.object.type === 'MemberExpression') {
            res += this.accept(node.object);
        }
        else {
            res += '(' + this.accept(node.object) + ')';
        }
        if (node.computed) {
            res += '[';
            res += this.accept(node.property);
            res += ']';
        }
        else {
            res += '.';
            res += this.accept(node.property);
        }
        return res;
    },
    IfStatement: function (node) {
        var res = 'if (';
        res += this.accept(node.test);
        res += ') ';
        res += this.accept(node.consequent);
        if (node.alternate) {
            res += '\nelse ';
            res += this.accept(node.alternate);
        }
        return res;
    },

    WhileStatement: function (node) {
        var res = 'while (';
        res += this.accept(node.test);
        res += ') ';
        res += this.accept(node.body);
        return res;
    },
    ForCountStatement: function (node) {
        var res = ['for', this.accept(node.for), 'from', this.accept(node.from), 'to', this.accept(node.to)].join(' ') + ' ';
        res += this.accept(node.body)
        return res;
    },
    ForOfStatement: function (node) {
        var res = ['for', this.accept(node.for), 'of', this.accept(node.of)].join(' ') + ' ';
        res += this.accept(node.body)
        return res;
    },
    ForInStatement: function (node) {
        var res = ['for', this.accept(node.for), 'in', this.accept(node.in)].join(' ') + ' ';
        res += this.accept(node.body);
        return res;
    },
    BreakStatement: function () {
        return 'break;';
    },
    ReturnStatement: function (node) {
        if (node.argument)
            return 'return ' + this.accept(node.argument) + ';';
        return 'return;';
    },
    BinaryExpression: function (node) {
        var callOrderOf = snode => {
            if (!snode) return 100;
            if (snode.type === 'BinaryExpression') {
                return Math.max(SCGrammar/* default.operatorOrder */.Z.operatorOrder[snode.operator.content], callOrderOf(snode.right), callOrderOf(snode.right));
            }
            else if (snode.type === 'UnaryExpression') return -1;
            else return -2;
        };
        var operatorContent = node.operator.content;
        var cOrder = SCGrammar/* default.operatorOrder */.Z.operatorOrder[operatorContent];
        var left = this.accept(node.left);
        var right = this.accept(node.right);
        var leftOrder = callOrderOf(node.left);
        var rightOrder = callOrderOf(node.right);
        if (leftOrder > cOrder) left = '(' + left + ')';
        if (rightOrder >= cOrder) right = '(' + right + ')';
        return [left, operatorContent, right].join(' ');
    },
    UnaryExpression: function (node) {
        var res = node.operator.content;
        if (node.argument && node.argument.type === 'BinaryExpression') {
            res += '(' + this.accept(node.argument) + ')';
        }
        else {
            res += this.accept(node.argument);
        }
        return res;
    },
    ExpressionStatement: function (node) {
        return this.accept(node.expression) + ';';
    },
    NumericLiteral: function (node) {
        if (typeof node.value === "number")
            return node.value.toString();
        return '0';
    },
    StringLiteral: function (node) {
        return JSON.stringify(node.value);
    },
    ArrayExpression: function (node) {
        var res = '[';
        var elementTexts = node.elements.map(arg => this.accept(arg));
        var needWrap = elementTexts.some(et => {
            return et.length > 60;
        });
        if (needWrap) {
            res += '\n';
            res += elementTexts.join(',\n').split('\n').map(t => '    ' + t).join('\n');
            res += '\n';
        }
        else {
            res += elementTexts.join(', ');
        }
        res += ']';
        return res;
    },
    ObjectProperty: function (node) {
        return this.accept(node.key) + ': ' + this.accept(node.value);
    },
    ObjectExpression: function (node) {
        var res = '{';
        var propertyTexts = node.properties.map(arg => this.accept(arg));
        var needWrap = propertyTexts.some(et => {
            return et.length > 60;
        });
        if (needWrap) {
            res += '\n';
            res += propertyTexts.join(',\n').split('\n').map(t => '    ' + t).join('\n');
            res += '\n';
        }
        else {
            res += propertyTexts.join(', ');
        }
        res += '}';
        return res;
    },
    ConditionalExpression: function (node) {
        return [this.accept(node.test), '?', this.accept(node.consequent), ':', this.accept(node.alternate)].join(' ');
    }
};


/* harmony default export */ const SCLang_SCCodeGenerator = (SCCodeGenerator);

/***
 * @extends SCCodeGenerator
 * @constructor
 */
function SCCodeHighlightingGenerator() {
    SCCodeGenerator.apply(this, arguments);
}

OOP/* default.mixClass */.ZP.mixClass(SCCodeHighlightingGenerator, SCCodeGenerator);

SCCodeHighlightingGenerator.prototype.accept = function (node) {
    if (!node) return '/*TODO*/';
    var visitor = this.visitors[node.type];
    if (visitor) {
        try {
            return `<div class="sclang-node sclang-${node.type}${node.error ? ' sclang-error' : ''}"${node.error ? ('title=' + JSON.stringify(node.error)) : ''}>${this.visitors[node.type].apply(this, arguments)}</div>`;
        } catch (e) {
            console.error(e, node)
        }
    }
    else {
        return '[' + node.type + ']';
        // throw { message: 'Can not handle ', node: node };
    }
};

SCCodeHighlightingGenerator.prototype.visitors = Object.assign({}, SCCodeGenerator.prototype.visitors, {
    IfStatement: function (node) {
        var res = '<span class="sclang-keyword">if</span> (';
        res += this.accept(node.test);
        res += ') ';
        res += this.accept(node.consequent);
        if (node.alternate) {
            res += '\n<span class="sclang-keyword">else</span> ';
            res += this.accept(node.alternate);
        }
        return res;
    },
    FunctionDeclaration: function (node) {
        var bodyCode = this.accept(node.body);
        var argsCode = node.params.map(arg => this.accept(arg)).join(', ');
        return `<span class="sclang-keyword">function</span> ${node.id.name}(${argsCode}) ${bodyCode}`;
    },
    ForStatement: function (node) {

    },
    ForCountStatement: function (node) {
        var res = ['<span class="sclang-keyword">for</span>', this.accept(node.for), '<span class="sclang-keyword">from</span>', this.accept(node.from), '<span class="sclang-keyword">to</span>', this.accept(node.to)].join(' ') + ' ';
        res += this.accept(node.body)
        return res;
    },
    ForOfStatement: function (node) {
        var res = ['<span class="sclang-keyword">for</span>', this.accept(node.for), '<span class="sclang-keyword">of</span>', this.accept(node.of)].join(' ') + ' ';
        res += this.accept(node.body)
        return res;
    },
    ForInStatement: function (node) {
        var res = ['<span class="sclang-keyword">for</span>', this.accept(node.for), '<span class="sclang-keyword">in</span>', this.accept(node.in)].join(' ') + ' ';
        res += this.accept(node.body)
        return res;
    },
    VariableDeclarator: function (node) {
        var res = node.id.name;
        var typeText;
        if (node.typeAnnotation) typeText = this.accept(node.typeAnnotation);
        if (typeText && typeText !== 'any') res += ': ' + typeText;
        if (node.init) res += ' = ' + this.accept(node.init);
        return res;
    },
    VariableDeclaration: function (node) {
        var res = '<span class="sclang-keyword">var</span> ';
        if (node.declarations) {
            res += node.declarations.map(arg => this.accept(arg)).join(', ');
        }
        else {
            node  = Object.assign({}, node);
            node.type = 'VariableDeclarator';
            res += this.accept(node); //adapter for old version
        }
        res += ';';
        return res;
    },
    LinkedType: function (node) {
        return '<span class="sclang-keyword">linktype</span>&nbsp;' + this.accept(node.address);
    },
});


SCCodeHighlightingGenerator.prototype.generate = function (ast) {
    var text = this.accept(ast);
    return text.split('\n').map(text => {
        return text.replace(/^\s+/, (full) => {
            return `<span>${'&nbsp;'.repeat(full.length)}</span>`
        });
    }).join('<br>');
};


function generateSCCode(ast) {
    var generator = new SCCodeGenerator();
    return generator.generate(ast);
}


function generateSCHighlightPreviewCode(ast) {
    var generator = new SCCodeHighlightingGenerator();
    return generator.generate(ast);
}
// EXTERNAL MODULE: ./node_modules/absol/src/Converter/ext2MineType.js
var ext2MineType = __webpack_require__(9691);
;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCProgramInstance.js








var SCStaticLibScope = new SCLang_SCScope();
var SCDynamicLibScope = new SCLang_SCScope(SCStaticLibScope);


function SCProgramInstance(ast, env) {
    env = env || {};
    if (env instanceof SCLang_SCScope) {
        this.global = env;
    }
    else {
        this.global = new SCLang_SCScope(SCDynamicLibScope);
        Object.keys(env).forEach(key => {
            this.global.declareConst(key, env[key]);
        });
    }
    this.topScope = this.global;
    this.stack = [{
        scope: this.global
    }];

    this.ast = ast;
}

SCProgramInstance.prototype.exec = function () {
    return this.accept(this.ast);
};

SCProgramInstance.prototype.accept = function (node) {
    var visitor = this.visitors[node.type];
    if (visitor) {
        return this.visitors[node.type].apply(this, arguments);
        // try {
        //
        // } catch (e) {
        //     console.error(e, node)
        // }
    }
    else {
        throw this.makeError("NotHandle", 'Can not handle node type ' + node && node.type, node);
    }
};

SCProgramInstance.prototype.makeError = function (type, message, node) {
    var err = {};
    var copy = o => {
        if (!o) return o;
        if (o instanceof Array) {
            return o.map(e => copy(e));
        }
        if (o instanceof Date) return new Date(o.getTime());
        if (o.constructor === Object) return Object.keys(o).reduce((ac, key) => {
            ac[key] = copy(o[key]);
            return ac;
        }, o === node ? { error: message || type || true } : {});
        return o;
    }

    err.ast = copy(this.ast);
    err.message = message;
    err.errorNode = node;
    err._shown = false;
    Object.defineProperty(err, 'SHOW_ERROR', {
        enumerable: false,
        get: function () {
            if (this._shown) return;
            this._shown = true;
            var text = generateSCHighlightPreviewCode(this.ast);
            var html = `<html><head><title>Error</title>
<style> 
 .sclang-Program {
    font-family: Consolas, serif;
    white-space: pre-wrap;
    line-height: 1.5;
}
.sclang-keyword {
    color: #2C82FF;
}
.sclang-node {
    display: inline;
}
 .sclang-error {
    animation: 1s linear infinite condemned_blink_effect;
 }
 


@keyframes condemned_blink_effect {
  0% {
    background-color: transparent;
  }
  50% {
    background-color: transparent;
  }
  51% {
     background-color: #f76868;
  }
  100% {
      background-color: #f76868;
  }
}
.sclang-CallExpression > .sclang-MemberExpression:first-child > .sclang-Identifier:last-child,
.sclang-CallExpression > .sclang-Identifier:first-child{
    color: #41a01b;
}</style></head><body>${text}</body></html>`
            var blob = new Blob([html], { type: ext2MineType/* default.html */.Z.html });
            var url = URL.createObjectURL(blob);
            window.open(url, '_blank');
            setTimeout(() => {
                URL.revokeObjectURL(url);
            }, 4000);
            return true;
        }
    })

    return err;
};

SCProgramInstance.prototype.getRefOf = function (name) {
    return this.topScope.findRef(name);
};

SCProgramInstance.prototype.isFunctionReturned = function () {
    var topStack = this.stack[this.stack.length - 1];
    if (topStack.isFunctionReturned) {
        return topStack.isFunctionReturned();
    }
    return false;
};

SCProgramInstance.prototype.functionReturn = function (res) {
    var topStack = this.stack[this.stack.length - 1];
    if (topStack.functionReturn) {
        return topStack.functionReturn(res);
    }
};

SCProgramInstance.prototype.isLoopBroken = function () {
    var topStack = this.stack[this.stack.length - 1];
    if (topStack.loop && topStack.loop.length > 0) {
        // console.log(topStack.loop[topStack.loop.length - 1].isBroken());
        return topStack.loop[topStack.loop.length - 1].isBroken()
    }
    return false;
};

SCProgramInstance.prototype.loopPush = function (holder) {
    var topStack = this.stack[this.stack.length - 1];
    topStack.loop = topStack.loop || [];
    topStack.loop.push(holder);
};

SCProgramInstance.prototype.loopPop = function () {
    var topStack = this.stack[this.stack.length - 1];
    topStack.loop.pop();
};


SCProgramInstance.prototype.loopBreak = function () {
    var topStack = this.stack[this.stack.length - 1];
    topStack.loop[topStack.loop.length - 1].break();
}


SCProgramInstance.prototype.visitors = {
    Program: function (node) {
        var i = 0;
        var statements = node.body;
        var returnWith;
        var res = new Promise(rs => returnWith = rs);
        var runStep = () => {
            var statement;
            var sResult;
            while (i < statements.length) {
                statement = statements[i++];
                sResult = this.accept(statement);
                if (sResult && sResult.then) {
                    sResult.then(runStep);
                    return;
                }
            }
            returnWith(0);
        }

        runStep();

        return res;
    },

    BooleanLiteral: function (node) {
        return node.value;
    },
    BlockStatement: function (node) {
        var i = 0;
        var statements = node.body;
        var returnWith;
        var resolved = false;
        var result = undefined;
        var sync = new Promise(rs => {
            returnWith = (res) => {
                resolved = true;
                result = res;
                rs(res);
            }
        });
        var runStep = () => {
            var statement;
            var sResult;
            while (i < statements.length && !this.isFunctionReturned() && !this.isLoopBroken()) {
                statement = statements[i++];
                sResult = this.accept(statement);
                if (sResult && sResult.then) {
                    sResult.then(runStep);
                    return;
                }
            }
            returnWith(0);
        }

        runStep();
        if (resolved) {
            return this.result;
        }
        else return sync;
    },


    ExpressionStatement: function (node) {
        return this.accept(node.expression);
    },
    VariableDeclarator: function (node, kind) {
        var initValue = null;
        if (node.init) {
            initValue = this.accept(node.init, 'const');
        }
        if (initValue && initValue.then) {
            return initValue.then((result) => {
                if (kind === 'const') {
                    this.topScope.declareConst(node.id.name, result);
                }
                else {
                    this.topScope.declareVar(node.id.name, result);

                }
            });
        }
        else {
            if (kind === 'const') {
                this.topScope.declareConst(node.id.name, initValue);
            }
            else {
                this.topScope.declareVar(node.id.name, initValue);
            }
        }
    },

    VariableDeclaration: function (node) {
        var resolved = false;
        var sync;
        var resolve;
        var doStep;
        var i;
        var declarations = node.declarations;
        if (declarations) {
            i = 0;
            doStep = () => {
                var dResult;
                while (i < declarations.length) {
                    dResult = this.accept(declarations[i++], node.kind);
                    if (dResult && dResult.then) {
                        if (!sync) {
                            sync = new Promise(rs => {
                                resolve = rs;
                            });
                        }
                        dResult.then(doStep);
                        return;
                    }
                }
                if (resolve) resolve();
                else
                    resolved = true;
            }
            doStep();
            if (!resolved) return sync;
        }
        else {
            node = Object.assign({}, node);
            node.type = 'VariableDeclarator';
            return this.accept(node); //adapter for old version
        }
    },

    ArrayExpression: function (node) {
        var res = [];
        var resolved = false;
        var resolve;
        var sync = new Promise(rs => {
            resolve = () => {
                resolved = true;
                rs(res);
            };
        });
        var elements = node.elements;
        var i = 0;
        var doStep = () => {
            var eResult;
            while (i < elements.length) {
                eResult = this.accept(elements[i++], 'const');
                if (eResult && eResult.then) {
                    eResult.then((item) => {
                        res.push(item);
                        doStep();
                    });
                    return;
                }
                else {
                    res.push(eResult);
                }
            }

            resolve();
        }

        doStep();

        if (resolved) {
            return res;
        }
        else {
            return sync;
        }
    },
    ForCountStatement: function (node) {
        var idRef = this.accept(node.for, 'ref');
        var from = this.accept(node.from, 'const');
        var to = this.accept(node.to, 'const');
        var result;
        var resolved = false;
        var resolveWith;
        var sync = new Promise(function (rs) {
            resolveWith = (res) => {
                result = res;
                resolved = true;
                rs(res);
            }
        });
        var i = from;
        var runStep = () => {
            while (i <= to) {
                idRef.set(i);
                ++i;
                var stResult = this.accept(node.body);
                if (stResult && stResult.then) {
                    stResult.then(runStep);
                    return;
                }
            }
            resolveWith(0);
        }
        runStep();
        if (resolved) {
            return result;
        }
        else {
            return sync;
        }

    },

    WhileStatement: function (node) {
        var resolved = false;
        var resolve;
        var sync = new Promise(rs => {
            resolve = () => {
                resolved = true;

                rs(undefined);
            };
        });
        this.loopPush({
            break: () => {
                resolved = true;
            },
            isBroken: () => {
                return resolved;
            }
        });
        var state = 0;
        var doStep = () => {
            var sResult;
            while (!resolved) {
                if (this.isFunctionReturned()) {
                    resolve();
                    return;
                }

                if (state === 0) {
                    sResult = this.accept(node.test, 'const');
                    state = 1;
                }
                else {
                    sResult = this.accept(node.body);
                    state = 0;
                }
                if (sResult && (typeof sResult.then === "function")) {
                    sResult.then((sResult) => {
                        if (state === 0 || sResult) {
                            doStep();
                        }
                        else {
                            resolve();
                        }
                    });
                    return;
                }
                else {
                    if (state === 1 && !sResult) {
                        resolve();
                    }
                }
            }
        }

        doStep();

        if (resolved) {
            this.loopPop();
            return undefined;
        }
        else {
            return sync.then(() => this.loopPop());
        }

    },
    DoWhileStatement: function (node) {
        var resolved = false;
        var resolve;
        var sync = new Promise(rs => {
            resolve = () => {
                resolved = true;
                rs(undefined);
            };
        });
        var state = 1;
        var doStep = () => {
            var sResult;
            while (!resolved) {
                if (state === 0) {
                    sResult = this.accept(node.test, 'const');
                    state = 1;
                }
                else {
                    sResult = this.accept(node.body);
                    state = 0;
                }
                if (sResult && (typeof sResult.then === "function")) {
                    sResult.then((sResult) => {
                        if (state === 0 || sResult) {
                            doStep();
                        }
                        else {
                            resolve();
                        }
                    });
                    return;
                }
                else {
                    if (state === 1 && !sResult) {
                        resolve();
                    }
                }
            }
        }

        doStep();

        if (resolved) {
            return undefined;
        }
        else {
            return sync;
        }
    },

    ForOfStatement: function (node) {
        var valRef = this.accept(node.for, 'ref');
        var of = this.accept(node.of, 'const');
        var values;
        var result;
        var resolved = false;
        var resolveWith;
        var sync = new Promise(function (rs) {
            resolveWith = (res) => {
                result = res;
                resolved = true;
                rs(res);
            }
        });
        var i = 0;

        var runStep = () => {
            while (i < values.length) {
                valRef.set(values[i]);
                ++i;
                var stResult = this.accept(node.body);
                if (stResult && stResult.then) {
                    stResult.then(runStep);
                    return;
                }
            }
            resolveWith(0);
        }
        if (of.then)
            of.then((value) => {
                of = value;
                values = (of instanceof Array) ? of : Object.values(value);
                runStep();
            });
        else {
            values = (of instanceof Array) ? of : Object.values(value);
            runStep();
        }
        if (resolved) {
            return result;
        }
        else {
            return sync;
        }

    },

    ForInStatement: function (node) {
        var valRef = this.accept(node.for, 'ref');
        var inObj = this.accept(node.in, 'const');
        var keys;
        var result;
        var resolved = false;
        var resolveWith;
        var sync = new Promise(function (rs) {
            resolveWith = (res) => {
                result = res;
                resolved = true;
                rs(res);
            }
        });
        var i = 0;

        var runStep = () => {
            while (i < keys.length) {
                valRef.set(keys[i]);
                ++i;
                var stResult = this.accept(node.body);
                if (stResult && stResult.then) {
                    stResult.then(runStep);
                    return;
                }
            }
            resolveWith(0);
        }
        if (inObj.then)
            inObj.then((value) => {
                inObj = value;
                keys = Object.keys(inObj);
                runStep();
            });
        else {
            keys = Object.keys(inObj)
            runStep();
        }
        if (resolved) {
            return result;
        }
        else {
            return sync;
        }

    },

    AssignStatement: function (node) {
        //@deprecated
        var leftRef = this.accept(node.left, 'ref');
        var right = this.accept(node.right, 'const');
        if (right && right.then) {
            return right.then(function (value) {
                leftRef.set(value);
                return value;
            });
        }
        else {
            leftRef.set(right);
            return right;
        }
    },
    AssignmentExpression: function (node) {
        var leftRef = this.accept(node.left, 'ref');
        var right = this.accept(node.right, 'const');
        if (right && right.then) {
            return right.then(function (value) {
                leftRef.set(value);
                return value;
            });
        }
        else {
            leftRef.set(right);
            return right;
        }
    },
    IfStatement: function (node) {
        var test = this.accept(node.test, 'const');
        if (test && (typeof test.then === 'function')) {
            return test.then((test) => {
                if (test) {
                    return this.accept(node.consequent);
                }
                else if (node.alternate) {
                    return this.accept(node.alternate);
                }
            });
        }
        else {
            if (test) {
                return this.accept(node.consequent);
            }
            else if (node.alternate) {
                return this.accept(node.alternate);
            }
        }
    },
    ConditionalExpression: function (node) {
        var test = this.accept(node.test, 'const');
        if (test && (typeof test.then === 'function')) {
            return test.then((test) => {
                if (test) {
                    return this.accept(node.consequent);
                }
                else {
                    return this.accept(node.alternate);
                }
            });
        }
        else {
            if (test) {
                return this.accept(node.consequent);
            }
            else {
                return this.accept(node.alternate);
            }
        }
    },

    NullLiteral: function (node) {
        return null;
    },
    NumericLiteral: function (node) {
        return (node.value);
    },
    StringLiteral: function (node) {
        return node.value;
    },
    BinaryExpression: function (node) {
        var op = node.operator.content;
        var leftValue = this.accept(node.left, 'const');
        if (op === '&&' && !leftValue) {
            return leftValue;
        }
        else if (op === '||' && (leftValue && !leftValue.then)) {
            return leftValue;
        }
        var rightValue = this.accept(node.right, 'const');
        var sync = [];
        if (leftValue && leftValue.then) {
            sync.push(leftValue);
            leftValue.then(result => leftValue = result);
        }
        if (rightValue && rightValue.then) {
            sync.push(rightValue);
            rightValue.then(result => rightValue = result);
        }
        if (sync.length === 0) {
            return SCLang_SCOperatorExecutor.executeBinaryOperator(node.operator.content, leftValue, rightValue);
        }
        else {
            return Promise.all(sync).then(u => {
                return SCLang_SCOperatorExecutor.executeBinaryOperator(node.operator.content, leftValue, rightValue);
            });
        }
    },
    UnaryExpression: function (node) {
        var arg = this.accept(node.argument, 'const');
        if (arg && arg.then) {
            return arg.then(value => SCLang_SCOperatorExecutor.executeUnaryOperator(node.operator.content, value));
        }
        else {
            return SCLang_SCOperatorExecutor.executeUnaryOperator(node.operator.content, arg);
        }
    },
    Identifier: function (node, type) {
        var ref;
        if (type === 'const') {
            ref = this.getRefOf(node.name);
            if (ref) {
                return ref.get();
            }
            else {
                throw this.makeError("NotDeclare", "", node);
            }
        }
        else if (type === 'ref') {
            ref = this.getRefOf(node.name);
            if (ref) {
                return ref;
            }
            else {
                this.makeError("NotDeclare", "", node);
            }
        }
        return node.name;
    },
    CallExpression: function (node) {
        var calleeFunction;
        var object = null;
        var ref;
        if (node.callee.type === "Identifier") {
            ref = this.getRefOf(node.callee.name);
            calleeFunction = ref.get();
        }
        else if (node.callee.type === 'MemberExpression') {
            ref = this.accept(node.callee);
            calleeFunction = ref.get();
            object = ref.object;
        }
        var argumentValues = node.arguments.map((exp) => {
            return this.accept(exp, 'const');
        });
        var sync = [];
        argumentValues.forEach((arg, i) => {
            if (arg && arg.then) {
                sync.push(arg.then(result => {
                    argumentValues[i] = result;
                }));
            }
        });
        if (sync.length > 0) {
            return Promise.all(sync).then(() => {
                if (!calleeFunction) {
                    throw { message: 'Undefined function ' + generateSCCode(node.callee), ast: node }
                }
                return calleeFunction.apply(object, argumentValues);
            });
        }
        else {
            if (!calleeFunction) {
                throw { message: 'Undefined function ' + generateSCCode(node.callee), ast: node }
            }
            return calleeFunction.apply(object, argumentValues);
        }
    },
    NewExpression: function (node) {
        var calleeFunction;
        var ref;
        if (node.callee.type === "Identifier") {
            ref = this.getRefOf(node.callee.name);
            calleeFunction = ref.get();
        }
        else if (node.callee.type === 'MemberExpression') {
            ref = this.accept(node.callee);
            calleeFunction = ref.get();
        }
        var argumentValues = node.arguments.map((exp) => {
            return this.accept(exp, 'const');
        });

        var code = `return new clazz(${argumentValues.map((u, i) => `args[${i}]`).join(', ')});`;
        var f = new Function('clazz', 'args', code);
        return f(calleeFunction, argumentValues);
    },
    MemberExpression: function (node, type) {
        var object = this.accept(node.object, 'const');
        var key;
        if (node.property.type === 'Identifier' && !node.computed) {
            key = node.property.name;
        }
        else {
            key = this.accept(node.property, 'const');
        }

        if (key && key.then) {
            return key.then(key => {
                if (!object) {
                    throw {
                        message: 'Can not access ' + JSON.stringify(key) + ' from ' + generateSCCode(node.object)
                    };
                }

                if (type === 'const') return object[key];
                return {
                    set: function (value) {
                        return object[key] = value;
                    },
                    get: function () {
                        return object[key];
                    },
                    object: object
                }
            });
        }
        else {
            if (type === 'const') return object[key];
            return {
                set: function (value) {
                    return object[key] = value;
                },
                get: function () {
                    return object[key];
                },
                object: object
            }
        }
    },

    ObjectProperty: function (node) {
        var res = {};
        var key = this.accept(node.key);
        var value = this.accept(node.value, 'const');
        if (value && (typeof value.then === 'function')) {
            return value.then(value => {
                res[key] = value;
                return res;
            });
        }
        else {
            res[key] = value;
        }
        return res;
    },
    ObjectExpression: function (node) {
        var res = {};
        var resolved = false;
        var resolve;
        var sync = new Promise(rs => {
            resolve = () => {
                resolved = true;
                rs(res);
            }
        });
        var i = 0;
        var properties = node.properties;
        var doStep = () => {
            var pResult;
            while (i < properties.length) {
                pResult = this.accept(properties[i++]);
                if (pResult && (typeof pResult.then === "function")) {
                    pResult.then((pO) => {
                        Object.assign(res, pO);
                    });
                    return;
                }
                else {
                    Object.assign(res, pResult);
                }
            }
            resolve();
        };

        doStep();

        if (resolved) {
            return res;
        }
        else {
            return sync;
        }

    },
    FunctionDeclaration: function (node) {
        var self = this;
        //todo: overloading
        var functionName = node.id.name;

        function f() {
            var scope = new SCLang_SCScope(self.topScope);
            var result = undefined;
            var resolved = false;
            var functionReturn = (res) => {
                resolved = true;
                result = res;
            }
            var isFunctionReturned = () => {
                return resolved;
            }
            self.stack.push({ scope: scope, functionReturn: functionReturn, isFunctionReturned: isFunctionReturned });
            self.topScope = scope;
            for (var i = 0; i < node.params.length; ++i) {
                scope.declareVar(node.params[i].id.name, arguments[i]);
            }

            scope.declareVar('arguments', arguments);
            var res = self.accept(node.body);
            if (res && (typeof res.then === "function")) {
                return res.then(res => {
                    if (self.stack[self.stack.length - 1].scope === scope) {
                        self.stack.pop();
                        self.topScope = self.stack[self.stack.length - 1].scope;
                        return result;
                    }
                    else {
                        throw new Error('EngineError: Bug in stack!');
                    }
                });
            }
            else {
                if (self.stack[self.stack.length - 1].scope === scope) {
                    self.stack.pop();
                    self.topScope = self.stack[self.stack.length - 1].scope;
                    return result;
                }
                else {
                    throw new Error('EngineError: Bug in stack!');
                }
            }

        }

        var code = `return function ${functionName}(${node.params.map(pr => pr.id.name || (0,stringGenerate.randomIdent)(5)).join(',')}) { return f.apply(this, arguments); }`;
        var func = (new Function('f', code))(f);
        this.topScope.declareVar(functionName, func);
        return func;
    },
    BreakStatement: function (node) {
        this.loopBreak();
    },

    ReturnStatement: function (node) {
        var res = undefined;
        if (node.argument) {
            res = this.accept(node.argument, 'const');
        }

        if (res && res.then) {
            res.then(res => {
                this.functionReturn(res);
            });
        }
        else {
            this.functionReturn(res);
        }
    }
};


/* harmony default export */ const SCLang_SCProgramInstance = (SCProgramInstance);
// EXTERNAL MODULE: ./node_modules/absol/src/Print/printer.js + 2 modules
var Print_printer = __webpack_require__(2691);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/measurements.js
function feetToMeter(ft) {
    return ft / 3.28084;
}

function meterToFeet(mt) {
    return mt * 3.28084;
}

function meterToInch(mt) {
    return mt * 39.3701;
}

function mileToMeter(ml) {
    return ml * 1609.34;
}


function meterToMile(ml) {
    return ml / 1609.34;
}

function meterToYard(mt) {
    return mt * 1.09361
}


function yardToMeter(yd) {
    return yd / 1.09361;
}

/**
 * dot is same pixel in web
 * @param p
 * @returns {number}
 */
function pointToDot(p) {
    return p * 72 / 96;
}


function dotToPoint(d) {
    return d * 96 / 72;
}


function pxToCentimeter(px) {

}

function centimeterToPx(cm) {
    return meterToInch(cm / 100) * 96;
}


var PAGE_SIZE_IN_DOT = {
    a0: [2383.94, 3370.39],
    a1: [1683.78, 2383.94],
    a2: [1190.55, 1683.78],
    a3: [841.89, 1190.55],
    a4: [595.28, 841.89],

    a5: [419.53, 595.28],
    a6: [297.64, 419.53],
    a7: [209.76, 297.64],
    a8: [147.4, 209.76],
    a9: [104.88, 147.4],
    a10: [73.7, 104.88],
    b0: [2834.65, 4008.19],
    b1: [2004.09, 2834.65],
    b2: [1417.32, 2004.09],
    b3: [1000.63, 1417.32],
    b4: [708.66, 1000.63],
    b5: [498.9, 708.66],
    b6: [354.33, 498.9],
    b7: [249.45, 354.33],
    b8: [175.75, 249.45],
    b9: [124.72, 175.75],
    b10: [87.87, 124.72],
    c0: [2599.37, 3676.54],
    c1: [1836.85, 2599.37],
    c2: [1298.27, 1836.85],
    c3: [918.43, 1298.27],
    c4: [649.13, 918.43],
    c5: [459.21, 649.13],
    c6: [323.15, 459.21],
    c7: [229.61, 323.15],
    c8: [161.57, 229.61],
    c9: [113.39, 161.57],
    c10: [79.37, 113.39],
    dl: [311.81, 623.62],
    letter: [612, 792],
    "government-letter": [576, 756],
    legal: [612, 1008],
    "junior-legal": [576, 360],
    ledger: [1224, 792],
    tabloid: [792, 1224],
    "credit-card": [153, 243]
};


var PAGE_SIZE_IN_POINT = Object.keys(PAGE_SIZE_IN_DOT).reduce((ac, key) => {
    ac[key] = PAGE_SIZE_IN_DOT[key].map(d => dotToPoint(d));
    return ac;
}, {});


function latLngRectFromCenter(center, distance) {
    var lat = center.latitude;
    var lng = center.longitude;
    var r_earth = 6378;
    var pi = Math.PI;

    var northLat = lat + (distance / r_earth) * (180 / pi);
    var eastLng = lng + (distance / r_earth) * (180 / pi) / Math.cos(lat * pi / 180);
    var southLat = lat - (distance / r_earth) * (180 / pi);
    var westLng = lng - (distance / r_earth) * (180 / pi) / Math.cos(lat * pi / 180)
    return {
        latitude: { min: Math.min(northLat, southLat), max: Math.max(northLat, southLat) },
        longitude: { min: Math.min(eastLng, westLng), max: Math.max(eastLng, westLng) }
    }
}




/***
 *
 * @param p0
 * @param p1
 * @returns {number} in km
 */
function latLngDistance(p0, p1) {
    var lat0 = p0.latitude;
    var lat1 = p1.latitude;
    var lng0 = p0.longitude;
    var lng1 = p1.longitude;

    var toRad = function (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));
    return  R * c;
}

;// CONCATENATED MODULE: ./node_modules/absol/src/Converter/QRCode.js
function QR8bitByte(data) {
    this.mode = QRMode.MODE_8BIT_BYTE;
    this.data = data;
    this.parsedData = [];

    // Added to support UTF-8 Characters
    for (var i = 0, l = this.data.length; i < l; i++) {
        var byteArray = [];
        var code = this.data.charCodeAt(i);

        if (code > 0x10000) {
            byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
            byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
            byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
            byteArray[3] = 0x80 | (code & 0x3F);
        }
        else if (code > 0x800) {
            byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
            byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
            byteArray[2] = 0x80 | (code & 0x3F);
        }
        else if (code > 0x80) {
            byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
            byteArray[1] = 0x80 | (code & 0x3F);
        }
        else {
            byteArray[0] = code;
        }

        this.parsedData.push(byteArray);
    }

    this.parsedData = Array.prototype.concat.apply([], this.parsedData);

    if (this.parsedData.length !== this.data.length) {
        this.parsedData.unshift(191);
        this.parsedData.unshift(187);
        this.parsedData.unshift(239);
    }
}

QR8bitByte.prototype.getLength = function () {
    return this.parsedData.length;
};


QR8bitByte.prototype.write = function (buffer) {
    for (var i = 0, l = this.parsedData.length; i < l; i++) {
        buffer.put(this.parsedData[i], 8);
    }
}


function QRCodeModel(typeNumber, errorCorrectLevel) {
    this.typeNumber = typeNumber;
    this.errorCorrectLevel = errorCorrectLevel;
    this.modules = null;
    this.moduleCount = 0;
    this.dataCache = null;
    this.dataList = [];
}

QRCodeModel.prototype.addData = function (data) {
    var newData = new QR8bitByte(data);
    this.dataList.push(newData);
    this.dataCache = null;
};

QRCodeModel.prototype.isDark = function (row, col) {
    if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
        throw new Error(row + "," + col);
    }
    return this.modules[row][col];
};

QRCodeModel.prototype.getModuleCount = function () {
    return this.moduleCount;
};

QRCodeModel.prototype.make = function () {
    this.makeImpl(false, this.getBestMaskPattern());
};

QRCodeModel.prototype.makeImpl = function (test, maskPattern) {
    this.moduleCount = this.typeNumber * 4 + 17;
    this.modules = new Array(this.moduleCount);
    for (var row = 0; row < this.moduleCount; row++) {
        this.modules[row] = new Array(this.moduleCount);
        for (var col = 0; col < this.moduleCount; col++) {
            this.modules[row][col] = null;
        }
    }
    this.setupPositionProbePattern(0, 0);
    this.setupPositionProbePattern(this.moduleCount - 7, 0);
    this.setupPositionProbePattern(0, this.moduleCount - 7);
    this.setupPositionAdjustPattern();
    this.setupTimingPattern();
    this.setupTypeInfo(test, maskPattern);
    if (this.typeNumber >= 7) {
        this.setupTypeNumber(test);
    }
    if (this.dataCache == null) {
        this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
    }
    this.mapData(this.dataCache, maskPattern);
};

QRCodeModel.prototype.setupPositionProbePattern = function (row, col) {
    for (var r = -1; r <= 7; r++) {
        if (row + r <= -1 || this.moduleCount <= row + r) continue;
        for (var c = -1; c <= 7; c++) {
            if (col + c <= -1 || this.moduleCount <= col + c) continue;
            if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) {
                this.modules[row + r][col + c] = true;
            }
            else {
                this.modules[row + r][col + c] = false;
            }
        }
    }
};

QRCodeModel.prototype.getBestMaskPattern = function () {
    var minLostPoint = 0;
    var pattern = 0;
    for (var i = 0; i < 8; i++) {
        this.makeImpl(true, i);
        var lostPoint = QRUtil.getLostPoint(this);
        if (i == 0 || minLostPoint > lostPoint) {
            minLostPoint = lostPoint;
            pattern = i;
        }
    }
    return pattern;
};


QRCodeModel.prototype.setupTimingPattern = function () {
    for (var r = 8; r < this.moduleCount - 8; r++) {
        if (this.modules[r][6] != null) {
            continue;
        }
        this.modules[r][6] = (r % 2 == 0);
    }
    for (var c = 8; c < this.moduleCount - 8; c++) {
        if (this.modules[6][c] != null) {
            continue;
        }
        this.modules[6][c] = (c % 2 == 0);
    }
};

QRCodeModel.prototype.setupPositionAdjustPattern = function () {
    var pos = QRUtil.getPatternPosition(this.typeNumber);
    for (var i = 0; i < pos.length; i++) {
        for (var j = 0; j < pos.length; j++) {
            var row = pos[i];
            var col = pos[j];
            if (this.modules[row][col] != null) {
                continue;
            }
            for (var r = -2; r <= 2; r++) {
                for (var c = -2; c <= 2; c++) {
                    if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) {
                        this.modules[row + r][col + c] = true;
                    }
                    else {
                        this.modules[row + r][col + c] = false;
                    }
                }
            }
        }
    }
};

QRCodeModel.prototype.setupTypeNumber = function (test) {
    var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
    for (var i = 0; i < 18; i++) {
        var mod = (!test && ((bits >> i) & 1) == 1);
        this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
    }
    for (var i = 0; i < 18; i++) {
        var mod = (!test && ((bits >> i) & 1) == 1);
        this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
    }
};

QRCodeModel.prototype.setupTypeInfo = function (test, maskPattern) {
    var data = (this.errorCorrectLevel << 3) | maskPattern;
    var bits = QRUtil.getBCHTypeInfo(data);
    for (var i = 0; i < 15; i++) {
        var mod = (!test && ((bits >> i) & 1) == 1);
        if (i < 6) {
            this.modules[i][8] = mod;
        }
        else if (i < 8) {
            this.modules[i + 1][8] = mod;
        }
        else {
            this.modules[this.moduleCount - 15 + i][8] = mod;
        }
    }
    for (var i = 0; i < 15; i++) {
        var mod = (!test && ((bits >> i) & 1) == 1);
        if (i < 8) {
            this.modules[8][this.moduleCount - i - 1] = mod;
        }
        else if (i < 9) {
            this.modules[8][15 - i - 1 + 1] = mod;
        }
        else {
            this.modules[8][15 - i - 1] = mod;
        }
    }
    this.modules[this.moduleCount - 8][8] = (!test);
};

QRCodeModel.prototype.mapData = function (data, maskPattern) {
    var inc = -1;
    var row = this.moduleCount - 1;
    var bitIndex = 7;
    var byteIndex = 0;
    for (var col = this.moduleCount - 1; col > 0; col -= 2) {
        if (col == 6) col--;
        while (true) {
            for (var c = 0; c < 2; c++) {
                if (this.modules[row][col - c] == null) {
                    var dark = false;
                    if (byteIndex < data.length) {
                        dark = (((data[byteIndex] >>> bitIndex) & 1) == 1);
                    }
                    var mask = QRUtil.getMask(maskPattern, row, col - c);
                    if (mask) {
                        dark = !dark;
                    }
                    this.modules[row][col - c] = dark;
                    bitIndex--;
                    if (bitIndex == -1) {
                        byteIndex++;
                        bitIndex = 7;
                    }
                }
            }
            row += inc;
            if (row < 0 || this.moduleCount <= row) {
                row -= inc;
                inc = -inc;
                break;
            }
        }
    }
};

QRCodeModel.PAD0 = 0xEC;
QRCodeModel.PAD1 = 0x11;
QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {
    var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
    var buffer = new QRBitBuffer();
    for (var i = 0; i < dataList.length; i++) {
        var data = dataList[i];
        buffer.put(data.mode, 4);
        buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber));
        data.write(buffer);
    }
    var totalDataCount = 0;
    for (var i = 0; i < rsBlocks.length; i++) {
        totalDataCount += rsBlocks[i].dataCount;
    }
    if (buffer.getLengthInBits() > totalDataCount * 8) {
        throw new Error("code length overflow. ("
            + buffer.getLengthInBits()
            + ">"
            + totalDataCount * 8
            + ")");
    }
    if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
        buffer.put(0, 4);
    }
    while (buffer.getLengthInBits() % 8 != 0) {
        buffer.putBit(false);
    }
    while (true) {
        if (buffer.getLengthInBits() >= totalDataCount * 8) {
            break;
        }
        buffer.put(QRCodeModel.PAD0, 8);
        if (buffer.getLengthInBits() >= totalDataCount * 8) {
            break;
        }
        buffer.put(QRCodeModel.PAD1, 8);
    }
    return QRCodeModel.createBytes(buffer, rsBlocks);
};
QRCodeModel.createBytes = function (buffer, rsBlocks) {
    var offset = 0;
    var maxDcCount = 0;
    var maxEcCount = 0;
    var dcdata = new Array(rsBlocks.length);
    var ecdata = new Array(rsBlocks.length);
    for (var r = 0; r < rsBlocks.length; r++) {
        var dcCount = rsBlocks[r].dataCount;
        var ecCount = rsBlocks[r].totalCount - dcCount;
        maxDcCount = Math.max(maxDcCount, dcCount);
        maxEcCount = Math.max(maxEcCount, ecCount);
        dcdata[r] = new Array(dcCount);
        for (var i = 0; i < dcdata[r].length; i++) {
            dcdata[r][i] = 0xff & buffer.buffer[i + offset];
        }
        offset += dcCount;
        var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
        var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
        var modPoly = rawPoly.mod(rsPoly);
        ecdata[r] = new Array(rsPoly.getLength() - 1);
        for (var i = 0; i < ecdata[r].length; i++) {
            var modIndex = i + modPoly.getLength() - ecdata[r].length;
            ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0;
        }
    }
    var totalCodeCount = 0;
    for (var i = 0; i < rsBlocks.length; i++) {
        totalCodeCount += rsBlocks[i].totalCount;
    }
    var data = new Array(totalCodeCount);
    var index = 0;
    for (var i = 0; i < maxDcCount; i++) {
        for (var r = 0; r < rsBlocks.length; r++) {
            if (i < dcdata[r].length) {
                data[index++] = dcdata[r][i];
            }
        }
    }
    for (var i = 0; i < maxEcCount; i++) {
        for (var r = 0; r < rsBlocks.length; r++) {
            if (i < ecdata[r].length) {
                data[index++] = ecdata[r][i];
            }
        }
    }
    return data;
};
var QRMode = { MODE_NUMBER: 1 << 0, MODE_ALPHA_NUM: 1 << 1, MODE_8BIT_BYTE: 1 << 2, MODE_KANJI: 1 << 3 };
var QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 };
var QRMaskPattern = {
    PATTERN000: 0,
    PATTERN001: 1,
    PATTERN010: 2,
    PATTERN011: 3,
    PATTERN100: 4,
    PATTERN101: 5,
    PATTERN110: 6,
    PATTERN111: 7
};
var QRUtil = {
    PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
    G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
    G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
    G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1),
    getBCHTypeInfo: function (data) {
        var d = data << 10;
        while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
            d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15)));
        }
        return ((data << 10) | d) ^ QRUtil.G15_MASK;
    },
    getBCHTypeNumber: function (data) {
        var d = data << 12;
        while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
            d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18)));
        }
        return (data << 12) | d;
    },
    getBCHDigit: function (data) {
        var digit = 0;
        while (data != 0) {
            digit++;
            data >>>= 1;
        }
        return digit;
    },
    getPatternPosition: function (typeNumber) {
        return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
    },
    getMask: function (maskPattern, i, j) {
        switch (maskPattern) {
            case QRMaskPattern.PATTERN000:
                return (i + j) % 2 === 0;
            case QRMaskPattern.PATTERN001:
                return i % 2 === 0;
            case QRMaskPattern.PATTERN010:
                return j % 3 === 0;
            case QRMaskPattern.PATTERN011:
                return (i + j) % 3 === 0;
            case QRMaskPattern.PATTERN100:
                return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0;
            case QRMaskPattern.PATTERN101:
                return (i * j) % 2 + (i * j) % 3 === 0;
            case QRMaskPattern.PATTERN110:
                return ((i * j) % 2 + (i * j) % 3) % 2 === 0;
            case QRMaskPattern.PATTERN111:
                return ((i * j) % 3 + (i + j) % 2) % 2 === 0;
            default:
                throw new Error("bad maskPattern:" + maskPattern);
        }
    },
    getErrorCorrectPolynomial: function (errorCorrectLength) {
        var a = new QRPolynomial([1], 0);
        for (var i = 0; i < errorCorrectLength; i++) {
            a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0));
        }
        return a;
    },
    getLengthInBits: function (mode, type) {
        if (1 <= type && type < 10) {
            switch (mode) {
                case QRMode.MODE_NUMBER:
                    return 10;
                case QRMode.MODE_ALPHA_NUM:
                    return 9;
                case QRMode.MODE_8BIT_BYTE:
                    return 8;
                case QRMode.MODE_KANJI:
                    return 8;
                default:
                    throw new Error("mode:" + mode);
            }
        }
        else if (type < 27) {
            switch (mode) {
                case QRMode.MODE_NUMBER:
                    return 12;
                case QRMode.MODE_ALPHA_NUM:
                    return 11;
                case QRMode.MODE_8BIT_BYTE:
                    return 16;
                case QRMode.MODE_KANJI:
                    return 10;
                default:
                    throw new Error("mode:" + mode);
            }
        }
        else if (type < 41) {
            switch (mode) {
                case QRMode.MODE_NUMBER:
                    return 14;
                case QRMode.MODE_ALPHA_NUM:
                    return 13;
                case QRMode.MODE_8BIT_BYTE:
                    return 16;
                case QRMode.MODE_KANJI:
                    return 12;
                default:
                    throw new Error("mode:" + mode);
            }
        }
        else {
            throw new Error("type:" + type);
        }
    },
    getLostPoint: function (qrCode) {
        var moduleCount = qrCode.getModuleCount();
        var lostPoint = 0;
        for (var row = 0; row < moduleCount; row++) {
            for (var col = 0; col < moduleCount; col++) {
                var sameCount = 0;
                var dark = qrCode.isDark(row, col);
                for (var r = -1; r <= 1; r++) {
                    if (row + r < 0 || moduleCount <= row + r) {
                        continue;
                    }
                    for (var c = -1; c <= 1; c++) {
                        if (col + c < 0 || moduleCount <= col + c) {
                            continue;
                        }
                        if (r == 0 && c == 0) {
                            continue;
                        }
                        if (dark == qrCode.isDark(row + r, col + c)) {
                            sameCount++;
                        }
                    }
                }
                if (sameCount > 5) {
                    lostPoint += (3 + sameCount - 5);
                }
            }
        }
        for (var row = 0; row < moduleCount - 1; row++) {
            for (var col = 0; col < moduleCount - 1; col++) {
                var count = 0;
                if (qrCode.isDark(row, col)) count++;
                if (qrCode.isDark(row + 1, col)) count++;
                if (qrCode.isDark(row, col + 1)) count++;
                if (qrCode.isDark(row + 1, col + 1)) count++;
                if (count == 0 || count == 4) {
                    lostPoint += 3;
                }
            }
        }
        for (var row = 0; row < moduleCount; row++) {
            for (var col = 0; col < moduleCount - 6; col++) {
                if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {
                    lostPoint += 40;
                }
            }
        }
        for (var col = 0; col < moduleCount; col++) {
            for (var row = 0; row < moduleCount - 6; row++) {
                if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {
                    lostPoint += 40;
                }
            }
        }
        var darkCount = 0;
        for (var col = 0; col < moduleCount; col++) {
            for (var row = 0; row < moduleCount; row++) {
                if (qrCode.isDark(row, col)) {
                    darkCount++;
                }
            }
        }
        var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
        lostPoint += ratio * 10;
        return lostPoint;
    }
};
var QRMath = {
    glog: function (n) {
        if (n < 1) {
            throw new Error("glog(" + n + ")");
        }
        return QRMath.LOG_TABLE[n];
    }, gexp: function (n) {
        while (n < 0) {
            n += 255;
        }
        while (n >= 256) {
            n -= 255;
        }
        return QRMath.EXP_TABLE[n];
    },

    LOG_TABLE: new Array(256)
};

QRMath.EXP_TABLE = (function () {
    var arr = Array(256);
    var i;
    for (i = 0; i < 8; ++i) {
        arr[i] = (1 << i);
    }
    for (i = 8; i < 256; ++i) {
        arr[i] = (arr[i - 4] ^ arr[i - 5] ^ arr[i - 6] ^ arr[i - 8]);
    }
    return arr;
})();

QRMath.LOG_TABLE = (function () {
    var arr = Array(256).fill(0);
    for (var i = 0; i < 255; i++) {
        arr[QRMath.EXP_TABLE[i]] = i;
    }
    return arr;
})();


function QRPolynomial(num, shift) {
    if (num.length == undefined) {
        throw new Error(num.length + "/" + shift);
    }
    var offset = 0;
    while (offset < num.length && num[offset] == 0) {
        offset++;
    }
    this.num = new Array(num.length - offset + shift);
    for (var i = 0; i < num.length - offset; i++) {
        this.num[i] = num[i + offset];
    }
}

QRPolynomial.prototype.get = function (index) {
    return this.num[index];
};
QRPolynomial.prototype.getLength = function () {
    return this.num.length;
};
QRPolynomial.prototype.multiply = function (e) {
    var num = new Array(this.getLength() + e.getLength() - 1);
    for (var i = 0; i < this.getLength(); i++) {
        for (var j = 0; j < e.getLength(); j++) {
            num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j)));
        }
    }
    return new QRPolynomial(num, 0);
};
QRPolynomial.prototype.mod = function (e) {
    if (this.getLength() - e.getLength() < 0) {
        return this;
    }
    var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0));
    var num = new Array(this.getLength());
    for (var i = 0; i < this.getLength(); i++) {
        num[i] = this.get(i);
    }
    for (var i = 0; i < e.getLength(); i++) {
        num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio);
    }
    return new QRPolynomial(num, 0).mod(e);
};


function QRRSBlock(totalCount, dataCount) {
    this.totalCount = totalCount;
    this.dataCount = dataCount;
}

QRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
    var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
    if (rsBlock == undefined) {
        throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
    }
    var length = rsBlock.length / 3;
    var list = [];
    for (var i = 0; i < length; i++) {
        var count = rsBlock[i * 3 + 0];
        var totalCount = rsBlock[i * 3 + 1];
        var dataCount = rsBlock[i * 3 + 2];
        for (var j = 0; j < count; j++) {
            list.push(new QRRSBlock(totalCount, dataCount));
        }
    }
    return list;
};
QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {
    switch (errorCorrectLevel) {
        case QRErrorCorrectLevel.L:
            return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
        case QRErrorCorrectLevel.M:
            return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
        case QRErrorCorrectLevel.Q:
            return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
        case QRErrorCorrectLevel.H:
            return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
        default:
            return undefined;
    }
};


function QRBitBuffer() {
    this.buffer = [];
    this.length = 0;
}

QRBitBuffer.prototype.get = function (index) {
    var bufIndex = Math.floor(index / 8);
    return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1;
};
QRBitBuffer.prototype.put = function (num, length) {
    for (var i = 0; i < length; i++) {
        this.putBit(((num >>> (length - i - 1)) & 1) === 1);
    }
};
QRBitBuffer.prototype.getLengthInBits = function () {
    return this.length;
};
QRBitBuffer.prototype.putBit = function (bit) {
    var bufIndex = Math.floor(this.length / 8);
    if (this.buffer.length <= bufIndex) {
        this.buffer.push(0);
    }
    if (bit) {
        this.buffer[bufIndex] |= (0x80 >>> (this.length % 8));
    }
    this.length++;
};


var QRCodeLimitLength = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]];

/**
 * Get the type by string length
 *
 * @private
 * @param {String} sText
 * @param {Number} nCorrectLevel
 * @return {Number} type
 */
function _getTypeNumber(sText, nCorrectLevel) {
    var nType = 1;
    var length = _getUTF8Length(sText);

    for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
        var nLimit = 0;

        switch (nCorrectLevel) {
            case QRErrorCorrectLevel.L :
                nLimit = QRCodeLimitLength[i][0];
                break;
            case QRErrorCorrectLevel.M :
                nLimit = QRCodeLimitLength[i][1];
                break;
            case QRErrorCorrectLevel.Q :
                nLimit = QRCodeLimitLength[i][2];
                break;
            case QRErrorCorrectLevel.H :
                nLimit = QRCodeLimitLength[i][3];
                break;
        }

        if (length <= nLimit) {
            break;
        }
        else {
            nType++;
        }
    }

    if (nType > QRCodeLimitLength.length) {
        throw new Error("Too long data");
    }

    return nType;
}

function _getUTF8Length(sText) {
    var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
    return replacedText.length + (replacedText.length != sText ? 3 : 0);
}


function QRCode(opt) {
    this.opt = {
        width: 255,
        height: 255,
        typeNumber: 4,
        correctLevel: QRErrorCorrectLevel.H
    };
    if (typeof opt === 'string') {
        this.opt.text = opt;
    }
    else Object.assign(this.opt, opt);
    if (this.opt.text) {
        this.makeCode(this.opt.text);
    }
}


/**
 * Make the QRCode
 *
 * @param {String} sText link data
 */
QRCode.prototype.makeCode = function (sText) {
    this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this.opt.correctLevel), this.opt.correctLevel);
    this._oQRCode.addData(sText);
    this._oQRCode.make();
};

QRCode.prototype.getBitmap = function () {
    var n = this._oQRCode.getModuleCount();
    return Array(n).fill(null).map((u, i) => Array(n).fill(null).map((u, j) => this._oQRCode.isDark(i, j)));
};


/**
 * @name QRCode.CorrectLevel
 */
QRCode.CorrectLevel = QRErrorCorrectLevel;

/* harmony default export */ const Converter_QRCode = (QRCode);

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DelaySignal.js
var DelaySignal = __webpack_require__(8098);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/BezierCurve.js


/**
 *
 * @param {Vec2} startPoint
 * @param {Vec2} ctrlPoint1
 * @param {Vec2} ctrlPoint2
 * @param {Vec2} endPoint
 * @constructor
 */
function BezierCurve(startPoint, ctrlPoint1, ctrlPoint2, endPoint) {
    this.startPoint = startPoint;
    this.ctrlPoint1 = ctrlPoint1;
    this.ctrlPoint2 = ctrlPoint2;
    this.endPoint = endPoint;
}

/**
 *
 * @param {number} t
 */
BezierCurve.prototype.pointAt = function (t) {
    var s1 = this.ctrlPoint1.sub(this.startPoint).mult(t).add(this.startPoint);
    var s2  = this.ctrlPoint2.sub(this.ctrlPoint1).mult(t).add(this.ctrlPoint1);
    var s3 = this.endPoint.sub(this.ctrlPoint2).mult(t).add(this.ctrlPoint2);

    var s4 = s2.sub(s1).mult(t).add(s1);
    var s5 = s3.sub(s2).mult(t).add(s2);
    return s5.sub(s4).mult(t).add(s4);
};


/**
 *
 * @param {Vec2} point
 * @returns {number}
 */
BezierCurve.prototype.nearestBzParamToPoint = function (point) {
    var low = 0;
    var high = 1;
    var ml;
    var mh;
    var delta = 0.00001;
    while (high - low > delta) {
        ml = low + (high - low) / 3;
        mh = high - (high - low) / 3;
        if (this.pointAt(ml).dist(point) < this.pointAt(mh).dist(point)) {
            high = mh;
        }
        else {
            low = ml;
        }
    }

    return (low + high) / 2;
};

/**
 *
 * @param {Vec2} point
 * @returns {*}
 */
BezierCurve.prototype.distanceToPoint = function (point) {
    return this.pointAt(this.nearestBzParamToPoint(point)).dist(point);
};
/**
 *
 * @param {BezierCurve} otherCurve
 * @returns {{current: number, other: number}}
 */
BezierCurve.prototype.nearestBParamToOtherBzCurve = function (otherCurve) {
    var res = { current: 0, other: 0 };
    var delta = 0.00001;
    var low = 0;
    var high = 1;
    var ml;
    var mh;
    var currentPointL, currentPointH;
    while (high - low > delta) {
        ml = low + (high - low) / 3;
        mh = high - (high - low) / 3;
        currentPointL = this.pointAt(ml);
        currentPointH = this.pointAt(mh);

        if (otherCurve.distanceToPoint(currentPointL) < otherCurve.distanceToPoint(currentPointH)) {
            high = mh;
        }
        else {
            low = ml;
        }
    }
    res.current = (low + high) / 2;
    currentPointL = this.pointAt(res.current);
    res.other = otherCurve.nearestBzParamToPoint(currentPointL);
    return res;
};

/**
 * @returns {BezierCurve}
 */
BezierCurve.prototype.copy = function () {
    return new BezierCurve(this.startPoint.copy(), this.ctrlPoint1.copy(), this.ctrlPoint2.copy(), this.endPoint.copy());
};


/* harmony default export */ const Math_BezierCurve = (BezierCurve);

;// CONCATENATED MODULE: ./node_modules/absol/src/SCLang/SCCodeValidation.js



/**
 * @typedef {Object} SCCodeValidationOption
 * @property {string} target - default: "program"
 * @variables {string[]} variables
 *
 */

/**
 *
 * @param {string} source
 * @param {SCCodeValidationOption} opt
 * @constructor
 */
function SCCodeValidation(source, opt) {
    this.source = source;
    this.opt = opt || {};
    this.error = null;
    this.parsed = null;
    this.usedGlobalVariables = [];
    this.glolbalScope = new VarScope/* default */.Z();
    this.topScope = new VarScope/* default */.Z(this.glolbalScope);
    console.log(this.topScope)
    this.stack = [
        {
            scope: this.glolbalScope,
        },
        {
            scope: this.topScope,
        }
    ];
    this.execute();
}

SCCodeValidation.prototype.execute = function () {
    this.parsed = SCLang_SCParser.parse(this.source, this.opt.target || 'program');
    this.calcErrorMessages();
    if (!this.parsed.error) {
        this.accept(this.parsed.ast);
        this.calcNameError();
    }
};

SCCodeValidation.prototype.accept = function (node) {
    var visitor = this.visitors[node.type];
    if (visitor) {
        return this.visitors[node.type].apply(this, arguments);
        // try {
        //
        // } catch (e) {
        //     console.error(e, node)
        // }
    }
    else {
        // throw this.makeError("NotHandle", 'Can not handle node type ' + node && node.type, node);
    }
};

SCCodeValidation.prototype.visitors = {
    Program: function (nd) {
        var i = 0;
        var statements = nd.body;
        while (i < statements.length) {
            this.accept(statements[i]);
            i++;
        }
    },
    BlockStatement: function (nd) {
        var i = 0;
        var statements = nd.body;
        while (i < statements.length) {
            this.accept(statements[i]);
            i++;
        }
    },
    ExpressionStatement: function (nd) {
        this.accept(nd.expression);
    },
    VariableDeclarator: function (nd) {
        var name = this.accept(nd.id);
        this.topScope.declare(name, null, true);
        if (nd.init) this.accept(nd.init, 'get_var');
    },
    VariableDeclaration: function (nd) {
        if (nd.declarations)
            nd.declarations.forEach(it => {
                this.accept(it);
            })
    },
    ArrayExpression: function (nd) {
        nd.elements.forEach(it => {
            this.accept(it);
        });
    },
    ForCountStatement: function (nd) {
        this.accept(nd.from, 'get_var');
        this.accept(nd.to, 'get_var');
        this.accept(nd.for, 'get_var');
        this.accept(nd.body);
    },
    WhileStatement: function (nd) {
        this.accept(nd.test, 'get_var');
        this.accept(nd.body);
    },
    DoWhileStatement: function (nd) {
        this.accept(nd.test, 'get_var');
        this.accept(nd.body);
    },
    ForOfStatement: function (nd) {
        this.accept(nd.for, 'get_var');
        this.accept(nd.of, 'get_var');
        this.accept(nd.body);
    },
    ForInStatement: function (nd) {
        this.accept(nd.for, 'get_var');
        this.accept(nd.in, 'get_var');
        this.accept(nd.body);
    },
    AssignmentExpression: function (nd) {
        this.accept(nd.left, 'get_var');
        this.accept(nd.right, 'get_var');
    },
    IfStatement: function (nd) {
        this.accept(nd.test, 'get_var');
        this.accept(nd.consequent);
        if (nd.alternate) {
            this.accept(nd.alternate);
        }
    },
    ConditionalExpression: function (nd) {
        this.accept(nd.test, 'get_var');
        this.accept(nd.consequent);
        this.accept(nd.alternate);
    },
    BinaryExpression: function (nd) {
        this.accept(nd.left, 'get_var');
        this.accept(nd.right, 'get_var');
    },
    UnaryExpression: function (nd) {
        this.accept(nd.argument, 'get_var');
    },
    CallExpression: function (nd) {
        this.accept(nd.callee, 'get_var');
        nd.arguments.forEach(it => {
            this.accept(it, 'get_var');
        });
    },
    FunctionDeclaration: function (nd) {

    },
    NewExpression: function (nd) {
        this.accept(nd.callee, 'get_var');
        nd.arguments.forEach(it => {
            this.accept(it, 'get_var');
        });
    },
    ObjectProperty: function (nd) {
        this.accept(nd.value, 'get_var');
    },
    ObjectExpression: function (nd) {
        nd.properties.forEach(it => {
            this.accept(it, 'get_var');
        })
    },
    /**
     * @this {SCCodeValidation}
     * @param nd
     */
    MemberExpression: function (nd) {
        this.accept(nd.object, 'get_var');
        if (nd.computed) {
            this.accept(nd.property, 'get_var');
        }
    },
    ReturnStatement: function (nd){
        this.accept(nd.argument, 'get_var');
    },
    Identifier: function (nd, type) {
        var name = nd.name;
        var scope;
        if (type === 'get_var') {
            scope = this.topScope.findScope(name);
            if (!scope) {
                this.glolbalScope.declare(name, null, true);
            }
        }
        return name;
    },


}


SCCodeValidation.prototype.calcErrorMessages = function () {
    var rawError = this.parsed.error;
    var ist = this.parsed;
    var rows;
    var errorText = '';
    var error = ist.error;
    var token, charIdx, rowIdx;
    if (rawError) {
        rows = this.source.split('\n');
        switch (error.type) {
            case 'unexpected':
                errorText = `<span style="color:red;">${error.message}</span>`;
                token = ist.tokens[error.tokenIdx];
                charIdx = token.start;
                rowIdx = 0;
                while (rowIdx < rows.length) {
                    if (charIdx <= rows[rowIdx].length) {
                        errorText = `<strong>Line ${rowIdx + 1}:</strong> ` + errorText
                        errorText += '<br>';
                        errorText += `<div style="color:blue; white-space: pre-wrap; font-family: Consolas, serif;">${rows[rowIdx]}</div>`;
                        errorText += `<div style=" --text-color:red; white-space: pre-wrap; font-family: Consolas, serif;" class="as-blink-text">${' '.repeat(charIdx)}^</div>`;
                        break;
                    }
                    charIdx -= rows[rowIdx].length + 1;//by \n
                    rowIdx++;
                }
                break;
            default:
                errorText = `<span style="color:red">${error.message}</span>`;
                break;

        }
        this.error = {
            type: 'syntax',
            message: rawError.message,
            htmlMessage: errorText
        };
    }
};

SCCodeValidation.prototype.calcNameError = function (){
    var variables = this.opt.variables || [];
    var variableDict = variables.reduce((ac, cr)=>{
        ac[cr] = true;
        return ac;
    }, {});
    var undefinedVariables = Object.keys(this.glolbalScope.data).filter(name=> !variableDict[name]);
    if (undefinedVariables.length > 0){
        this.error = {
            type: 'name',
            message: 'Undefined variables: ' + undefinedVariables.join(', '),
            htmlMessage: `<span style="color:red;">Undefined variables: ${undefinedVariables.join(', ')}</span>`
        }
    }
};


/* harmony default export */ const SCLang_SCCodeValidation = ((/* unused pure expression or super */ null && (SCCodeValidation)));

function validateSCCode(code, opt) {
    return new SCCodeValidation(code, opt);
}
/*
var d = absol.sclang.validateSCCode(`
var name = nd.name;
        var scope;
        var a;
        a = b;
        var m = {a: a, b: b, d: d};
        if (type === 'get_var') {
        x = y;
            scope = this.topScope.findScope(nd.object);
            if (!scope) {
                this.glolbalScope.declare(name, null, true);
            }
        }
        z = Math.max(x,y, scope[a]);
        return name;`, {variables: ['Math', 'Date', 'x','this']});


if (d.error) {
console.log(d.error);
    var div = document.createElement('div');

    setTimeout(() => {
        document.body.appendChild(div);
        div.innerHTML = d.error.htmlMessage;
    }, 100)
}

*/
;// CONCATENATED MODULE: ./node_modules/absol/src/index.js




















































































var src_absol = {
    int: Math_int,
    array: DataStructure_Array,
    safeThrow: safeThrow/* default */.Z,
    Rectangle: Rectangle/* default */.Z,
    BezierCurve: Math_BezierCurve,
    ResizeSystem: HTML5_ResizeSystem/* default */.Z,
    Arc: Math_Arc,
    Polygon: Polygon/* default */.Z,
    NumRange: Math_NumRange,
    CookieStore: Cookie_CookieStore,
    parseCookieString: parseCookieString,
    CMDRunner: CMDRunner/* default */.Z,
    ContextManager: ContextManager/* default */.Z,
    Application: AppPattern_Application,
    Fragment: Fragment/* default */.Z,
    VarScope: VarScope/* default */.Z,
    Context: Context/* default */.Z,
    Activity: AppPattern_Activity,
    Element: Element/* default */.Z,
    ElementNS: AElementNS/* default */.Z,
    AElement: Element/* default */.Z,
    AElementNS: AElementNS/* default */.Z,
    DomSignal: DomSignal/* default */.ZP,
    DelaySignal: DelaySignal/* default */.Z,
    JSPath: JSPath/* default */.Z,
    TemplateString: TemplateString/* default */.Z,
    TemplateXML: JSMaker_TemplateXML,
    Dom: HTML5_Dom/* default */.ZP,
    Svg: Svg/* default */.ZP,
    BrowserDetector: BrowserDetector/* default */.Z,
    OOP: OOP/* default */.ZP,
    XML: XML_XML,
    Color: Color/* default */.Z,
    EventEmitter: EventEmitter/* default */.ZP,
    JSZip: window.JSZip,
    IFrameBridge: IFrameBridge/* default */.Z,
    JSDocx: JSDocx_JSDocx,
    Broadcast: Network_Broadcast,
    text: Text,
    file: file,
    base64: base64,
    Alarm: Time_Alarm,
    coreDom: HTML5_Dom/* default.ShareInstance */.ZP.ShareInstance,
    coreSvg: Svg/* default.ShareInstance */.ZP.ShareInstance,
    require: function (tagName) {
        return this.coreDom.require(tagName) || this.coreSvg.require(tagName);
    },
    domCreator: HTML5_Dom/* default.ShareInstance.creator */.ZP.ShareInstance.creator,
    svgCreator: HTML5_Dom/* default.ShareInstance.creator */.ZP.ShareInstance.creator,
    _: HTML5_Dom/* default.ShareInstance._ */.ZP.ShareInstance._,
    $: HTML5_Dom/* default.ShareInstance.$ */.ZP.ShareInstance.$,
    $$: HTML5_Dom/* default.ShareInstance.$$ */.ZP.ShareInstance.$$,
    _svg: Svg/* default.ShareInstance._ */.ZP.ShareInstance._,
    $svg: Svg/* default.ShareInstance.$ */.ZP.ShareInstance.$,
    Ref: Ref/* default */.Z,
    Const: AppPattern_Const,
    XHR: XHR/* default */.Z,
    string: Object.assign({}, stringFormat, stringGenerate),
    jsx: {
        dom: dom_namespaceObject,
        attribute: JSX_attribute
    },
    QRCode:Converter_QRCode,
    clipboard: Clipboard,
    dataStructure: { Heap: Heap/* default */.ZP },
    datetime: datetime,
    Vec2: Vec2/* default */.Z,
    Mat3: Mat3/* default */.Z,
    LanguageSystem: LanguageSystem/* default */.ZP,
    ALogger: Code_ALogger,
    FlagManager: Code_FlagManager,
    ObservableArray: AppPattern_ObservableArray,
    ObservableStruct: AppPattern_ObservableStruct,
    circuit: {
        CCBlock: circuit_CCBlock,
        CCLine: circuit_CCLine
    },
    FileSaver: FileSaver,
    Thread: Thread/* default */.Z,
    setDomImmediate: DomSignal/* setDomImmediate */.J6,
    clearDomImmediate: DomSignal/* clearDomImmediate */.fi,
    generateJSVariable: generator/* generateJSVariable */.NQ,
    copyJSVariable: generator/* copyJSVariable */.Ew,
    normalizeIdent: stringFormat.normalizeIdent,
    replaceDateStringJSVariable: generator/* replaceDateStringJSVariable */.wP,
    remoteNodeRequireAsync: remoteRequireNodeAsync,
    shareConfiguration: AppPattern_ShareConfiguration.instance,
    DynamicCSS: HTML5_DynamicCSS/* default */.Z,
    getSystemFontSize: HTML5_Dom/* getSystemFontSize */.Z4,
    sclang:{
        'SCParser': SCLang_SCParser,
        'SCProgramInstance': SCLang_SCProgramInstance,
        'SCOperatorExecutor': SCLang_SCOperatorExecutor,
        'SCStaticLibScope':SCStaticLibScope,
        'SCDynamicLibScope': SCDynamicLibScope,
        'SCScope': SCLang_SCScope,
        'SCCodeGenerator': SCLang_SCCodeGenerator,
        'generateSCCode': generateSCCode,
        'generateSCHighlightPreviewCode': generateSCHighlightPreviewCode,
        'validateSCCode': validateSCCode
    },
    printer: Print_printer,
    measurements: measurements_namespaceObject
};



/* harmony default export */ const src = (src_absol);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElement.js
var AElement = __webpack_require__(7951);
;// CONCATENATED MODULE: ./node_modules/absol/src/absol.js





//for old plugin
src['HTML'+'El'+'ement'.toLowerCase()] = src.Element;
src.dom = src.Dom;
src.event = src.EventEmitter;
src.Event = src.EventEmitter;
src.color = src.Color;
src.documentReady = src.Dom.documentReady;
window.AComp = src.AComp;
window.PhotoSwipeViewer = src.PhotoSwipeViewer;
window.IFrameBridge = src.IFrameBridge;
window.absol = src;

var mapKeys = {
    ShareDom: 'coreDom',
    ShareDomCreator: 'domCreator',
    ShareSvgC: 'coreSvgCreator',
    ShareSvgCreator: 'svgCreator',
    ShareCreator: 'domCreator'
};

src.logData = [];
src.log = function () {
    src.logData.push([new Error('TraceError')].concat(Array.prototype.slice.call(arguments)))
}

Object.keys(mapKeys).forEach(function (key) {
    var valueKey = mapKeys[key];
    Object.defineProperty(src, key, {
        get: function () {
            if (!this['__warn' + key + '__']) {
                this['__warn' + key + '__'] = true;
                src.log("use " + valueKey + ' instead of ' + key);
            }
            return this[valueKey];
        }
    });
});

/**
 * @deprecated
 * @param {string|Array} className
 * @returns {Boolean}
 */
AElement/* default.prototype.containsClass */.Z.prototype.containsClass = function (className) {
    if (className.forEach && className.map) {
        for (var i = 0; i < className.length; ++i)
            if (!this.classList.containsClass(className[i])) return false;
        return true;
    }
    else
        return this.classList.contains(className);
};


/**
 * @deprecated
 * @param {string|Array} className
 * @returns {Boolean}
 */
AElementNS/* default.prototype.containsClass */.Z.prototype.containsClass = AElement/* default.prototype.containsClass */.Z.prototype.containsClass;
// EXTERNAL MODULE: ./node_modules/absol-acomp/AComp.js + 1 modules
var AComp = __webpack_require__(6657);
// EXTERNAL MODULE: ./node_modules/absol/src/String/stringMatching.js
var stringMatching = __webpack_require__(991);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/keeview.css
var keeview = __webpack_require__(1561);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/QuickMenu.js
var QuickMenu = __webpack_require__(1274);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ChromeCalendar.js
var ChromeCalendar = __webpack_require__(4845);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Radio.js
var Radio = __webpack_require__(7002);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiChars.js
var EmojiChars = __webpack_require__(7712);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiAnims.js
var EmojiAnims = __webpack_require__(4670);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/messageinput/MessageInput.js + 2 modules
var MessageInput = __webpack_require__(4877);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/EmojiPicker.js
var EmojiPicker = __webpack_require__(2948);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ContextMenu.js
var ContextMenu = __webpack_require__(7054);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/dom/install.js + 242 modules
var install = __webpack_require__(6369);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Searcher.js
var Searcher = __webpack_require__(9024);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/utils.js
var utils = __webpack_require__(1477);
// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var absol_acomp_ACore = __webpack_require__(3855);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/materializeIconTrigger.js




function materializeIconTrigger() {
    Dom.documentReady.then(function () {
        var linkMaterial = ACore.$('link', document.head, function (elt) {
            if (elt.href && elt.href.indexOf('Material+Icons')) return true;
        });
        if (!linkMaterial) return;
        var checkInv = -1;

        function onLoaded() {
            if (checkInv > 0) {
                clearTimeout(checkInv);
                checkInv = -1;
            }
            linkMaterial.off('loaded', onLoaded)
                .off('load', onLoaded)
                .off('error', onLoaded);
            i.remove();

            requestAnimationFrame(function () {
                ResizeSystem.update();
                if (document.cookie.indexOf('absol_debug') >= 0) {
                    console.info('Resize after MaterialIcons load');
                }
            });
        }

        linkMaterial.on('loaded', onLoaded)
            .on('load', onLoaded)
            .on('error', onLoaded);
        var i = ACore._({
            tag: 'i',
            class:"material-icons",
            style: {
                fontSize: '14px',
                position: 'fixed',
                top: '0',
                left: '0',
                zIndex: '-1000',
                visibility: 'hidden'
            },
            child: { text: 'account_balance_wallet' }
        }).addTo(document.body);
        var iBox = i.getBoundingClientRect();
        if (iBox.width < iBox.height * 3) {
            onLoaded();
            return;
        }
        var intervalCount = 50;
        checkInv = setInterval(function () {
            intervalCount--;
            if (intervalCount < 0) {
                onLoaded();
            }
            iBox = i.getBoundingClientRect();
            if (iBox.width < iBox.height * 3) {
                onLoaded();
            }
        }, 200);
    });
}


// EXTERNAL MODULE: ./node_modules/absol-acomp/js/VariantColors.js
var VariantColors = __webpack_require__(8494);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Tooltip.js
var Tooltip = __webpack_require__(5194);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TextMeasure.js + 1 modules
var TextMeasure = __webpack_require__(2610);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/BContextCapture.js
var BContextCapture = __webpack_require__(9782);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/cpuviewer.css
var cpuviewer = __webpack_require__(8858);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CPUViewer.js





/***
 * @extends AElement
 * @constructor
 */
function CPUViewer() {
    /***
     *
     * @type {HTMLCanvasElement}
     */
    this.$canvas = (0,absol_acomp_ACore.$)('canvas', this);
    this.ctx = this.$canvas.getContext('2d');
    this.offsetTime = 0;
    this.inv = -1;
    this.usage = Array(120).fill(0);
    this.holdStart = 0;
    this.holdTime = 0;
    this.logOffset = 0;
    this.counter = 0;

    this['tick'] = this.tick.bind(this);
}

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

CPUViewer.render = function () {
    return (0,absol_acomp_ACore._)({
        class: 'as-cpu-viewer',
        child: {
            tag: 'canvas',
            attr: {
                width: '120px',
                height: '50px'
            }
        }
    });
};

CPUViewer.prototype.start = function () {
    if (this.inv < 0) {
        this.offsetTime = new Date().getTime();
        setInterval(this.tick, 250)
    }
};

CPUViewer.prototype.stop = function () {
    if (this.inv > 0) {
        clearInterval(this.inv);
        this.inv = -1;
    }
};

CPUViewer.prototype.tick = function () {


    while (this.holdTime > 250) {
        this.holdTime -= 250;
        this.usage.push(100);
    }
    this.usage.push(this.holdTime * 100 / 250);
    while (this.usage.length > 120) {
        this.usage.shift();
    }
    this.ctx.fillStyle = 'black';
    this.ctx.fillRect(0, 0, 120, 50);
    var y;
    this.ctx.fillStyle = 'yellow';
    for (var x = 0; x < this.usage.length; ++x) {
        y = this.usage[x] / 2;
        this.ctx.fillRect(x, 50 - y, 1, y);
    }
    var now = new Date().getTime();
    this.logOffset = now;
    this.holdStart = now;
    this.holdTime = 0;

};

CPUViewer.prototype.hold = function () {
    if (this.counter === 0) {
        this.holdStart = new Date().getTime();
    }
    this.counter++;
};

CPUViewer.prototype.release = function () {
    if (this.counter <= 0) return;
    this.counter--;
    if (this.counter === 0) {
        this.holdTime += new Date().getTime() - this.holdStart;
    }
};


/***
 *
 * @type {CPUViewer}
 */
CPUViewer.instance = null;
CPUViewer.state = 'NOT_INIT';
CPUViewer.start = function () {
    if (!this.instance) {
        this.instance = (0,absol_acomp_ACore._)('cpuviewer');
        this.state = "NOT_ATTACHED";
    }
    if (this.state === "NOT_ATTACHED") {
        this.state = "RUNNING";
        HTML5_Dom/* default.documentReady.then */.ZP.documentReady.then(function () {
            document.body.appendChild(this.instance);
        }.bind(this));
    }
    this.instance.start();

    CPUViewer.hold = function () {
        this.instance.hold();
    };

    CPUViewer.release = function () {
        this.instance.release();
    };
};

CPUViewer.stop = function () {
    if (!this.instance) return;
    if (this.state !== "RUNNING") return;
    this.instance.stop();
    this.instance.remove();
    this.state = 'NOT_ATTACHED';


};


CPUViewer.hold = function () {

};

CPUViewer.release = function () {

};

absol_acomp_ACore/* default.install */.Z.install(CPUViewer);

/* harmony default export */ const js_CPUViewer = (CPUViewer);


function AttachHookView() {

}


HTML5_Dom/* default.documentReady.then */.ZP.documentReady.then(() => {
    return;
    if (!window.ABSOL_DEBUG && location.href.indexOf('localhost') < 0) {
        return;
    }

    var elt = (0,absol_acomp_ACore._)({
        class:'as-pending-attachhook-count'
    }).addTo(document.body);

    setInterval(() => {
        elt.innerHTML = '' + Object.keys(pendingAttachHooks).length
    }, 2000);
});


// EXTERNAL MODULE: ./node_modules/absol-acomp/js/list/ListDictionary.js
var ListDictionary = __webpack_require__(103);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/keeview/overviewwidget.css
var overviewwidget = __webpack_require__(2553);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TabView.js + 2 modules
var TabView = __webpack_require__(7);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Hanger.js
var Hanger = __webpack_require__(655);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/OnScreenWidget.js
var OnScreenWidget = __webpack_require__(7315);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/keeview/owmodal.css
var owmodal = __webpack_require__(4672);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/FlexiconButton.js
var FlexiconButton = __webpack_require__(3929);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/keeview/OWModalManager.js





function implicitNode(data) {
    if (!data) return (0,absol_acomp_ACore._)('div');
    if (data instanceof Array) {
        return data.map(implicitNode);
    }
    else if ((0,HTML5_Dom/* isDomNode */.mV)(data)) {
        return data;
    }
    else if (typeof data === "string") {
        return (0,absol_acomp_ACore._)({ tag: 'span', child: { text: data } });
    }
    else if (typeof data === "object") {
        return (0,absol_acomp_ACore._)(data);
    }
    else return (0,absol_acomp_ACore._)('div');
}


/***
 *
 * @constructor
 */
function OWModalManager() {

}

OWModalManager.prototype.getView = function () {
    if (!this.$view) this.createView();
    return this.$view;
};

OWModalManager.prototype.createView = function () {
    this.$view = (0,absol_acomp_ACore._)('.kv-ow-modal-manager');
};


OWModalManager.prototype.createModal = function (opt, caller) {
    console.trace(1);
    opt = opt || {};
    var modal = (0,absol_acomp_ACore._)({
        class: 'kv-ow-modal',
        child: {
            class: 'kv-ow-modal-window',
            child: [
                {
                    class: 'kv-ow-modal-header',
                    child: [
                        {
                            class: 'kv-ow-modal-title',
                            child: { text: 'Tiêu đề' }
                        }
                    ]

                },
                {
                    class: 'kv-ow-modal-body',
                    child: Array(3).fill({
                        tag: 'span',
                        child: { text: 'Bạn có chắc muốn thoát khỏi nhóm? Đây là nội dung hơi bị dài luôn nè' }
                    })
                },
                {
                    class: 'kv-ow-modal-footer'
                }
            ]
        }
    });

    modal.$body = (0,absol_acomp_ACore.$)('.kv-ow-modal-body', modal);
    modal.$title = (0,absol_acomp_ACore.$)('.kv-ow-modal-title', modal);
    modal.$footer = (0,absol_acomp_ACore.$)('.kv-ow-modal-footer', modal);
    if (modal.$title) {
        if (typeof opt.title === "string") {
            modal.$title.clearChild().addChild((0,absol_acomp_ACore._)({ text: opt.title }));
        }
        else {
            modal.$title.clearChild().addChild(implicitNode(opt.title));
        }
    }
    else {
        modal.$title.addStyle('display', 'none');
    }
    modal.$body.clearChild();
    if (opt.content || opt.contentbody) {
        modal.$body.addChild(implicitNode(opt.content || opt.contentbody));
    }

    modal.$footer.clearChild();
    if (opt.buttons || opt.buttonlist) {
        modal.$footer.addChild((opt.buttons || opt.buttonlist).map(function (bt) {
            var props = Object.assign({}, bt);
            delete props.onclick;
            var onclick = bt.onclick;
            return (0,absol_acomp_ACore._)({
                tag: FlexiconButton/* default.tag */.Z.tag,
                props: props,
                on: {
                    click: function (event) {
                        if (typeof onclick === "function") {
                            onclick.call(this, event, modal, caller);
                        }
                    }
                }
            })
        }));
    }

    return modal;
};

OWModalManager.prototype.showModal = function (opt, caller) {
    var modal = this.createModal(opt, caller);
    var minZIndex = Array.prototype.reduce.call(this.getView(), function (ac, cr) {
        return Math.max(ac, parseFloat(cr.style.zIndex) || 0)
    }, 0);
    modal.addStyle('zIndex', minZIndex + 1 + '');
    this.$view.addChild(modal);
    return modal;
};


/* harmony default export */ const keeview_OWModalManager = (OWModalManager);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/keeview/OverviewWidget.js















/***
 * @extends Fragment
 * @param {{}} host
 * @param {Fragment[]} children
 * @constructor
 */
function OverviewWidget(host, children) {
    Fragment/* default.call */.Z.call(this);
    this.setting = {
        viewPos: { x: 0, y: 0 },
        minimize: true
    };
    this.host = host;
    this.children = children || [];

    this.childrenById = this.children.reduce(function (ac, child) {
        ac[child.id] = child;
        return ac;
    }, {});
    this._position = new Vec2/* default */.Z(0, 0);
    this.setContext("OVERVIEW_WIDGET", this);
    this.children.forEach(function (fg) {
        fg.attach(this);
    }.bind(this));
    this.modalMng = new keeview_OWModalManager();
}

OOP/* default.mixClass */.ZP.mixClass(OverviewWidget, Fragment/* default */.Z);

OverviewWidget.prototype.createView = function () {
    this.$title = (0,absol_acomp_ACore._)({
        tag: 'span',
        class: 'kv-overview-widget-title',
        child: { text: '...' }
    });
    this.$tabs = this.children.map(function (fg) {
        return (0,absol_acomp_ACore._)({
            tag: 'tabframe',
            class: 'kv-overview-widget-page',
            child: fg.getView(), props: {
                name: '&nbsp;'.repeat(5),//||fg.name,
                tabIcon: fg.tabIcon,
                id: fg.id
            }
        });
    });
    this.$view = (0,absol_acomp_ACore._)({
        class: 'kv-overview-widget',
        style: {
            '--x': '0px',
            '--y': '0px',
            visibility: 'hidden'
        },
        child: [
            {
                tag: Hanger/* default.tag */.Z.tag,
                class: 'kv-overview-widget-header',
                child: [
                    this.$title,
                    {
                        class: 'kv-overview-widget-header-window-action',
                        child: [
                            {
                                tag: 'button',
                                child: 'span.mdi.mdi-window-minimize',
                                on: {
                                    click: this.minimize.bind(this)
                                }
                            }
                        ]
                    }
                ],
                on: {
                    predrag: this.ev_headerPredrag.bind(this),
                    dragstart: this.ev_headerDragStart.bind(this),
                    drag: this.ev_headerDrag.bind(this),
                    dragend: this.ev_headerDragEnd.bind(this),

                }
            },
            {
                class: 'kv-overview-widget-body',
                child: {
                    tag: TabView/* default.tag */.Z.tag,
                    class: ['kv-overview-widget-tab-view', 'xp-tiny'],
                    child: this.$tabs,
                    on: {
                        activetab: this.ev_activeTab.bind(this)
                    }
                }
            },
            this.modalMng.getView()
        ]
    });
    this._updateViewPosition();

    this.$bubble = (0,absol_acomp_ACore._)({
        tag: OnScreenWidget/* default.tag */.Z.tag,
        class: 'kv-overview-widget-bubble',
        id: 'overview_widget_bubble',
        style: {
            // visibility: 'hidden'
            '--cx': '0.02',
            '--cy': '0.96'
        },
        child: [
            '<svg class="kv-overview-widget-bubble-background"  viewBox="0 0 24 24">\n' +
            '    <path fill="currentColor" d="M3 11H11V3H3M5 5H9V9H5M13 21H21V13H13M15 15H19V19H15M3 21H11V13H3M5 15H9V19H5M13 3V11H21V3M19 9H15V5H19Z" />\n' +
            '</svg>',
            {
                class: 'kv-overview-widget-bubble-badge',
                child: { tag: 'span', child: { text: '0' } }
            }
        ],
        on: {
            click: this.toggle.bind(this)
        }
    });
    this.$tabview = (0,absol_acomp_ACore.$)('.kv-overview-widget-tab-view', this.$view);
    this.$action = (0,absol_acomp_ACore.$)('.kv-overview-widget-header-window-action', this.$view);
    this.$bubbleBadge = (0,absol_acomp_ACore.$)('.kv-overview-widget-bubble-badge', this.$bubble);
    this.$badgeText = (0,absol_acomp_ACore.$)('span', this.$bubbleBadge);
    this.$badgeText.requestUpdateSize = this._updateViewPosition.bind(this);
    var self = this;
    this.$tabs.forEach(function (tabElt) {
        tabElt.on('active', function () {
            self.childrenById[this.id].start();
        });
        tabElt.on('deactive', function () {
            self.childrenById[this.id].pause();
        });

    });
    this.updateCounter();
};


OverviewWidget.prototype.saveSetting = function () {
    localStorage.setItem('overview_widget_setting', JSON.stringify(this.setting));
};

OverviewWidget.prototype.loadSetting = function () {
    var setting = {};
    try {
        var settingJson = localStorage.getItem('overview_widget_setting');
        if (settingJson) setting = JSON.parse(settingJson);

    } catch (err) {
    }

    Object.assign(this.setting, setting);
    this._position = new Vec2/* default */.Z(this.setting.viewPos.x, this.setting.viewPos.y);
    this._updateViewPosition();
};

OverviewWidget.prototype.updateCounter = function (from) {
    var id;
    var tabElt;
    var counter;

    if (from) {
        id = from.id;
        tabElt = this.$tabview.getTabById(id);
        counter = from.counter;
        if (counter)
            tabElt.name = '(' + counter + ')';
        else tabElt.name = '&nbsp;'.repeat(5);
    }
    else {
        this.$tabs.forEach(function (tabElt) {
            id = tabElt.id;
            var frg = this.childrenById[id];
            var counter = frg.counter;
            if (counter)
                tabElt.name = '(' + counter + ')';
            else tabElt.name = '&nbsp;'.repeat(5);
        }.bind(this));
    }

    var sumCounter = this.children.reduce(function (ac, cr) {
        return ac + cr.counter;
    }, 0);
    this.$badgeText.firstChild.data = sumCounter + '';
    if (sumCounter > 0) {
        this.$bubbleBadge.removeStyle('visibility');
    }
    else {
        this.$bubbleBadge.addStyle('visibility', 'hidden');
    }
};


OverviewWidget.prototype.onStart = function () {
    this.getView();
    this.loadSetting();
    this.$view.addTo(document.body);
    this.$bubble.addTo(document.body);
    HTML5_ResizeSystem/* default.add */.Z.add(this.$badgeText);
    this._updateViewPosition();
    if (this.setting.minimize) {
        this.$bubble.removeStyle('visibility');
    }
    else {
        this.$view.removeStyle('visibility');
    }
    this.children.forEach(function (fg) {
        fg.start(true);
    });
    var activeTabId = this.$tabview.getActiveTabId();
    this.childrenById[activeTabId].start();
};


OverviewWidget.prototype.onStop = function () {
    this.getView().remove();
};

OverviewWidget.prototype.ev_activeTab = function (event) {
    var frag = this.childrenById[event.id];
    this.$title.firstChild.data = frag.name + '';
};

OverviewWidget.prototype.ev_headerPredrag = function (event) {
    if ((0,EventEmitter/* hitElement */.EY)(this.$action, event)) {
        event.cancel();
    }
};

OverviewWidget.prototype.ev_headerDragStart = function (event) {
    var bound = this.$view.getBoundingClientRect();
    this._dragData = {
        bound: bound,
        p0: new Vec2/* default */.Z(bound.left, bound.top),
        modal: (0,absol_acomp_ACore._)({
            style: {
                position: 'fixed',
                zIndex: '1000000000',
                left: 0,
                right: 0,
                top: 0,
                bottom: 0,
                background: 'transparent'
            }
        }).addTo(document.body)
    };
};

OverviewWidget.prototype.ev_headerDrag = function (event) {
    var d = event.currentPoint.sub(event.startingPoint);
    this._position = this._dragData.p0.add(d);
    this._updateViewPosition();
};

OverviewWidget.prototype.ev_headerDragEnd = function (event) {
    this._dragData.modal.remove();
    this.setting.viewPos.x = this._position.x;
    this.setting.viewPos.y = this._position.y;
    this.saveSetting();
};

OverviewWidget.prototype._updateViewPosition = function () {
    if (!this.$view) return;
    var screenSize = (0,HTML5_Dom/* getScreenSize */.tE)();
    var bound = this.$view.getBoundingClientRect();
    var x = Math.max(0, Math.min(this._position.x, screenSize.width - bound.width));
    var y = Math.max(0, Math.min(this._position.y, screenSize.height - bound.height));
    this.$view.addStyle({
        '--x': x + 'px',
        '--y': y + 'px'
    });
};


OverviewWidget.prototype.showModal = function (opt) {
    return this.modalMng.showModal(opt, this);
};


Object.defineProperty(OverviewWidget.prototype, 'position', {
    set: function (value) {
        if (!value) value = new Vec2/* default */.Z(0, 0);
        if (value instanceof Array) {
            if ((0,utils.isRealNumber)(value[0] && (0,utils.isRealNumber)(value[1]))) {
                value = new Vec2/* default */.Z(value[0], value[1]);
            }
            else {
                value = new Vec2/* default */.Z(0, 0);
            }
        }
        else if (!(value instanceof Vec2/* default */.Z)) {
            if ((0,utils.isRealNumber)(value.x && (0,utils.isRealNumber)(value.y))) {
                value = new Vec2/* default */.Z(value[0], value[1]);
            }
            else {
                value = new Vec2/* default */.Z(0, 0);
            }
        }
        this._position = value;
        this._updateViewPosition();
    },
    get: function () {
        return this._position;
    }
});

OverviewWidget.prototype.minimize = function () {
    this.$view.addStyle('visibility', 'hidden');
    // this.$bubble.removeStyle('visibility');
    this.setting.minimize = true;
    this.saveSetting();
    var activeTabId = this.$tabview.getActiveTabId();
    this.childrenById[activeTabId].pause();
};


OverviewWidget.prototype.maximize = function () {
    // this.$bubble.addStyle('visibility', 'hidden');
    this.$view.removeStyle('visibility');
    this.setting.minimize = false;
    this.saveSetting();
    var activeTabId = this.$tabview.getActiveTabId();
    this.childrenById[activeTabId].start();
};

OverviewWidget.prototype.toggle = function () {
    if (this.setting.minimize) {
        this.maximize();
    }
    else {
        this.minimize();

    }
};


/* harmony default export */ const keeview_OverviewWidget = (OverviewWidget);

;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/keeview/OverviewPage.js






/***
 * @extends Fragment
 * @param {{}} host
 * @constructor
 */
function OverviewPage(host) {
    Fragment/* default.call */.Z.call(this);
    this.host = host;
    this.id = (0,stringGenerate.randomIdent)(5);
    this._counter = 0;

}

OOP/* default.mixClass */.ZP.mixClass(OverviewPage, Fragment/* default */.Z);


OverviewPage.prototype.tabIcon = 'span.mdi.mdi-cube-outline';
OverviewPage.prototype.name = 'Overview Page';

OverviewPage.prototype.createView = function () {
    return (0,absol_acomp_ACore._)({
        child: { tag: 'span', child: { text: 'OverviewPage' } }
    });
};

OverviewPage.prototype.showModal = function (opt) {
    if (this.parent && this.parent.showModal)
        return this.parent.showModal(opt, this);
};

Object.defineProperty(OverviewPage.prototype, 'counter', {
    set: function (value) {
        /***
         *
         * @type {OverviewWidget}
         */
        var parent = this.parent;
        if (!(0,utils.isRealNumber)(value)) value = 0;
        value = Math.max(0, value >> 0);
        this._counter = value;
        parent.updateCounter();

    },
    get: function () {
        return this._counter;
    }
});


/* harmony default export */ const keeview_OverviewPage = (OverviewPage);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/finder/Finder.js + 2 modules
var Finder = __webpack_require__(8556);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Toast.js
var Toast = __webpack_require__(1376);
// EXTERNAL MODULE: ./node_modules/absol/src/Print/pdf.js
var pdf = __webpack_require__(9673);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ProgressBar.js
var ProgressBar = __webpack_require__(6535);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/printer.js







function silentDownloadAsPdf(adapter) {
    if (!adapter) throw new Error("Invalid print data");
    adapter.parallel = adapter.parallel || 8;
    adapter.delay = adapter.delay || 0;
    adapter.chuckLength = 100;
    adapter.fileName = adapter.fileName || 'exports.pdf';
    if (adapter.paddingEven !== false) {
        adapter.paddingEven = true;
    }
    if (!adapter.fileName.toLowerCase().endsWith('.pdf')) adapter.fileName += '.pdf';
    var hiddenDiv = (0,absol_acomp_ACore._)({
        style: {
            overflow: 'scroll',
            visibility: 'hidden',
            opacity: 0,
            pointerEvents: 'none',
            position: 'fixed',
            zIndex: -1000,
        }
    }).addTo(document.body);
    var progressBar = (0,absol_acomp_ACore._)({
        tag: ProgressBar/* default */.Z,
        style: {
            margin: '5px'
        }
    });
    var message = (0,absol_acomp_ACore._)({
        tag: 'span',
        style: {
            margin: '5px'
        },
        child: { text: 'Render' }
    });
    /***
     *
     * @type {Toast}
     */
    var toast = Toast/* default.make */.Z.make({
        props: {
            htitle: "Export DPF"
        },
        child: [
            {
                tag: 'div',
                style: { margin: '5px' },
                child: {
                    tag: 'strong',
                    child: { text: adapter.fileName }
                }
            },
            message,
            progressBar
        ]
    });


    return new Promise(resolve => {
        var docs = adapter.docs.slice();
        var docsN = docs.length;
        var serializer = Print_printer.ShareSerializer;
        var chucks = [];

        var chuckRemain;
        var printer;

        var finish = () => {
            message.firstChild.data = "Create PDF";
            (0,pdf/* mergePdfs */.I)(chucks, pData => {
                progressBar.value = 0.9 + (pData.loaded + pData.merged) / (pData.all || 1) / 10;
            }).then(mergedPdf => {
                mergedPdf.save().then(file => {
                    (0,FileSaver.saveAs)(new Blob([file]), adapter.fileName);
                    progressBar.value = 1;
                    message.firstChild.data = "Complete";
                    setTimeout(() => {
                        toast.disappear();
                    }, 5000);
                });
            })
        }

        var nextChuck = () => {
            chuckRemain = Math.min(adapter.chuckLength, docs.length);
            printer = new Print_printer.PaperPrinter(Object.assign({ lastPagePaddingEven: docs.length <= chuckRemain }, adapter));
            process();
        }

        var finishChuck = () => {
            chucks.push(printer.pdfDoc.output('arraybuffer'));
            if (docs.length > 0) {
                nextChuck();
            }
            else {
                finish();
            }
        };

        var process = () => {
            message.firstChild.data = 'Render (' + (docsN - docs.length) + '/' + docsN + ')';
            var pg0 = 0.9 * (1 - docs.length / (docsN || 1));
            progressBar.value = pg0;
            if (chuckRemain === 0) {
                finishChuck();
                return;
            }

            var cDocs = docs.splice(0, Math.min(adapter.parallel, chuckRemain));
            chuckRemain -= cDocs.length;

            var localSync = cDocs.map(doc => {
                var ctn = (0,absol_acomp_ACore._)({
                    style: {
                        width: '2048px'
                    }
                }).addTo(hiddenDiv);

                var renderSync = doc.render(ctn, doc);
                if (renderSync && renderSync.then) {
                    renderSync = renderSync.then(() => Object.assign({}, doc, { elt: ctn.firstChild }));
                }
                else {
                    renderSync = Promise.resolve(Object.assign({}, doc, { elt: ctn.firstChild }));
                }
                return renderSync.then(doc => {
                    var delaySync = [];
                    delaySync.push(new Promise(resolve => {
                        setTimeout(resolve, adapter.delay);
                    }))
                    var elt = doc.elt;
                    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
                            };
                        }
                        delaySync.push(elt.fmComponent.fragment.afterEntryCompleted());
                    }
                    return Promise.all(delaySync).then(() => doc);
                })
            });

            Promise.all(localSync).then(docList => {
                return serializer.serialize(docList, printer, (pData) => {
                    if (!pData.pdf) return;
                    var ng1 = pg0 + pData.pdf.done / (pData.pdf.all || 1) * cDocs.length / (docsN || 1) * 0.9;
                    if (ng1 - progressBar.value > 0.05) {
                        progressBar.value = ng1;
                    }
                });
            }).then(() => printer.flush())
                .then(() => process());
        };

        nextChuck();
    });
}
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mobileapp.css
var mobileapp = __webpack_require__(8789);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/mobile/MApplication.js





/**
 * @extends Fragment
 * @constructor
 */
function MApplication() {
    Fragment/* default.call */.Z.call(this);
    this.stack = [];
    this.pendingLoop = [];
    this.loopRunning = false;
}

OOP/* default.mixClass */.ZP.mixClass(MApplication, Fragment/* default */.Z);


MApplication.prototype.createView = function () {
    this.$view = (0,absol_acomp_ACore._)({
        class: ['am-application', 'am-stack']
    })
};

MApplication.prototype.postHandler = function (handler) {
    this.pendingLoop.push(handler);
    if (this.loopRunning) return;
    while (this.pendingLoop.length > 0) {
        this.pendingLoop.shift()();
    }
};

MApplication.prototype.startActivity = function (clazz, bundle) {
    var handle = () => {
        var curAct = this.stack[this.stack.length - 1];
        if (curAct) {
            curAct.pause();
        }
        var newAct = new clazz(bundle);
        var view = newAct.getView();
        this.$view.addChild(view);
        this.stack.push(newAct);
        newAct.attach(this);
        newAct.onCreated();

        if (this.state === "PAUSE") {
            newAct.start(true);
        }
        else if (this.state === 'RUNNING') {
            if (curAct) curAct.pause();
            newAct.start();
        }
    }
    this.postHandler(handle);
};


MApplication.prototype.replaceActivity = function (clazz, bundle) {
    var curAct = this.stack[this.stack.length - 1];
    if (curAct)
        this.finishActivity(curAct, true);
    this.startActivity(clazz, bundle);
};

/**
 *
 * @param act
 * @param {boolean=} replace
 */
MApplication.prototype.finishActivity = function (act, replace) {
    this.postHandler(() => {
        var curAct = this.stack[this.stack.length - 1];
        if (curAct) {
            if (curAct !== act) throw new Error("Activity stack error!");
            curAct.detach();
            curAct.getView().remove();
            this.stack.pop();
            curAct.destroy();
            curAct = this.stack[this.stack.length - 1];
            if (curAct && this.state === 'RUNNING' && !replace) {
                curAct.resume();
            }
        }
    });
};


MApplication.prototype.onStart = function () {
    for (var i = 0; i < this.stack.length; ++i) {
        this.stack[i].start(true);
    }
};


MApplication.prototype.onResume = function () {
    var curAct = this.stack[this.stack.length - 1];
    if (curAct) {
        curAct.resume(true);
    }
};

MApplication.prototype.onPause = function () {
    var curAct = this.stack[this.stack.length - 1];
    if (curAct) {
        curAct.pause();
    }
};

MApplication.prototype.onStop = function () {
    for (var i = this.stack.length - 1; i >= 0; --i) {
        this.stack[i].stop();
    }
};

MApplication.prototype.onDestroy = function () {
    while (this.stack.length) {
        this.stack.pop().destroy();
    }
};


/* harmony default export */ const mobile_MApplication = (MApplication);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/js/mobile/MActivity.js





function MActivity(bundle) {
    Fragment/* default.call */.Z.call(this);
    this.caller = null;
    this.arguments = null;
    this.result = null;
}

OOP/* default.mixClass */.ZP.mixClass(MActivity, Fragment/* default */.Z);

MActivity.prototype.createView = function () {
    this.$view = (0,absol_acomp_ACore._)({
        class: 'am-activity'
    });
};


//
//
// MActivity.prototype.finish = function () {
//     if (!this.session) {
//         throw new Error("Activity is not started!");
//     }
//     this.stop();
//     if (this.onFinished) this.onFinished();
//     if (this.caller) {
//         this.caller.activityReturn(this.session, this, this.result);
//         this.caller= null;
//         this.result = null;
//         this.arguments = null;
//         this.session = null;
//     }
// };

//
// /**
//  * @param {MActivity} activity
//  * @param {*} bundle
//  */
// MActivity.prototype.startActivity = function (session, activity, args) {
//     activity.stop();//stop before call new
//     this.pause();
//     activity.caller = this;
//     activity.arguments = args;
//     activity.result = null;
//     activity.session = session;
//     activity.attach(this);
//     activity.viewToApp();
//     activity.start();
// };
//
// MActivity.prototype.activityReturn = function (session, act, result) {
//     if (this.onActivityReturn) {
//         this.onActivityReturn(session, act, result);
//     }
//
//     this.viewToApp();
//     this.resume();
// };

/* harmony default export */ const mobile_MActivity = (MActivity);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/list/ListSearchMaster.js + 1 modules
var ListSearchMaster = __webpack_require__(4623);
;// CONCATENATED MODULE: ./node_modules/absol-acomp/dev.js




































absol.VariantColors = VariantColors/* default */.Z;
absol.parseMessage = MessageInput/* parseMessage */.kW;
absol.vScrollIntoView = utils.vScrollIntoView;

//for export to window
absol.Tooltip = Tooltip/* default */.Z;
absol.QuickMenu = QuickMenu/* default */.Z;
absol.AComp = AComp/* default */.Z;
absol.Radio = Radio/* default */.Z;
absol.EmojiChars = EmojiChars/* default */.Z;
absol.EmojiAnims = EmojiAnims/* default */.Z;
absol.ChromeCalendar = ChromeCalendar/* default */.Z;
(0,install/* default */.Z)(absol.coreDom);
//old module
absol.coreDom.install('searchcrosstextinput', Searcher/* default */.Z);

Object.assign(absol.string, stringMatching);
absol.MessageInput = MessageInput/* default */.ZP
absol.EmojiPicker = EmojiPicker/* default */.Z;
absol.ContextCaptor = ContextMenu/* default */.Z;
absol.ListDictionary = ListDictionary/* default */.Z;
absol.FinderFileSystem = Finder/* FinderFileSystem */.Vm;

window.AComp = absol.AComp;
absol.TextMeasure = TextMeasure/* default */.Z;

absol.printer.silentDownloadAsPdf = silentDownloadAsPdf;
absol.ListSearchMaster = ListSearchMaster/* default */.Z;

HTML5_Dom/* default.documentReady.then */.ZP.documentReady.then(function () {
    var mdiLink = absol.$('link', document.head, function (e) {
        if (e.href && e.href.toLowerCase().indexOf('materialdesignicons') >= 0) return true;
    });
    if (!mdiLink) {
        mdiLink = absol._({
            tag: 'link',
            attr: {
                rel: 'stylesheet',
                href: 'https://absol.cf/vendor/materialdesignicons/materialdesignicons.css'
            }
        }).addTo(document.head);
    }
});

Object.assign(absol.$, utils);

// materializeIconTrigger();

absol.openFileDialog = utils.openFileDialog;
absol.CPUViewer = js_CPUViewer;

absol.OverviewWidget = keeview_OverviewWidget;
absol.OverviewPage = keeview_OverviewPage;

absol.MApplication = mobile_MApplication;
absol.MActivity = mobile_MActivity;


HTML5_Dom/* default.documentReady.then */.ZP.documentReady.then(function () {
    ContextMenu/* default.auto */.Z.auto();
});

function testFont() {
    var dynamicCSs = new DynamicCSS();
    var value = parseInt(localStorage.getItem('as_test_font_size')) || 14;
    var fontSizeInput = absol._({
        tag: 'numberinput',
        props: {
            step: 1,
            min: 5,
            value: value
        },
        on: {
            change: () => {
                localStorage.setItem('as_test_font_size', fontSizeInput.value + '');
                dynamicCSs.setProperty(':root', 'font-size', fontSizeInput.value + 'px')
                    .commit();
                window.dispatchEvent(new Event('resize'))
            }
        }
    });
    dynamicCSs.setProperty(':root', 'font-size', fontSizeInput.value + 'px')
        .commit();
    window.dispatchEvent(new Event('resize'))
    var modal = absol._({
        style: {
            background: 'white',
            position: 'fixed',
            top: '5px',
            right: '5px',
            padding: '5px',
            border: '1px solid #ddd',
            zIndex: 1e9
        },
        child: ['<label>font-size </label>', fontSizeInput]
    }).addTo(document.body);
}

if (location.href.indexOf('localhost') >= 0) {
    // Dom.documentReady.then(testFont);
}


})();

// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";

// NAMESPACE OBJECT: ./src/helper.js
var helper_namespaceObject = {};
__webpack_require__.r(helper_namespaceObject);
__webpack_require__.d(helper_namespaceObject, {
  "addDevContextMenu": () => (addDevContextMenu),
  "autoCurve": () => (autoCurve),
  "beautyStep": () => (beautyStep),
  "calBeautySegment": () => (calBeautySegment),
  "circle": () => (circle),
  "fresherColor": () => (fresherColor),
  "generateBackgroundColors": () => (generateBackgroundColors),
  "getGlobalBBox": () => (getGlobalBBox),
  "getMaxHeightBox": () => (getMaxHeightBox),
  "getMaxWidthBox": () => (getMaxWidthBox),
  "getMinHeightBox": () => (getMinHeightBox),
  "getMinWidthBox": () => (getMinWidthBox),
  "getSubNumberArray": () => (getSubNumberArray),
  "hline": () => (hline),
  "isNumber": () => (isNumber),
  "lighterColor": () => (lighterColor),
  "line": () => (line),
  "map": () => (map),
  "measureArial14TextWidth": () => (measureArial14TextWidth),
  "moveHLine": () => (moveHLine),
  "moveVLine": () => (moveVLine),
  "paddingLeft": () => (paddingLeft),
  "pathTokenize": () => (pathTokenize),
  "rect": () => (rect),
  "text": () => (helper_text),
  "toLocalString": () => (toLocalString),
  "vline": () => (vline),
  "wrapChartInWHResizer": () => (wrapChartInWHResizer),
  "wrapToLines": () => (wrapToLines)
});

// NAMESPACE OBJECT: ./src/template.js
var template_namespaceObject = {};
__webpack_require__.r(template_namespaceObject);
__webpack_require__.d(template_namespaceObject, {
  "rotate": () => (rotate),
  "translate": () => (translate)
});

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Svg.js
var Svg = __webpack_require__(6821);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/svg/Core.js


var Core = new Svg/* default */.ZP();

/* harmony default export */ const svg_Core = (Core);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElementNS.js
var AElementNS = __webpack_require__(2510);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Vec2.js
var Vec2 = __webpack_require__(557);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/controller/Turtle.js


/**
 * @typedef TurtleCommand
 * @property {String} cmd
 * @property {String} action
 * @property {Number[]} args
 * @property {Vec2} dest
 * @property {Vec2} tangent
 */

/***
 *
 * @constructor
 */
function Turtle() {
    /**
     * @type {Array<TurtleCommand>}
     */
    this._commands = [];
    /**
     * @type {Vec2}
     */
    this._pos = new Vec2/* default */.Z(0, 0);
    /**
     * @type {Vec2}
     */
    this._startPos = this._pos;
    /**
     * @type {Vec2}
     */
    this._tangent = new Vec2/* default */.Z(0, 0);
}


/**
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.moveBy = function (dx, dy) {
    this._tangent = new Vec2/* default */.Z(dx, dy);
    this._pos = this._pos.add(this._tangent);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'm',
        action: 'moveBy',
        args: [dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} x
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.moveTo = function (x, y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'M',
        action: 'moveTo',
        args: [x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

Turtle.prototype.moveForward = function (length) {
    var dV = this._tangent.normalized().mult(length);
    this._pos = this._pos.add(dV);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'm',
        action: 'moveTo',
        args: [dV.x, dV.y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

Turtle.prototype.lineForward = function (length) {
    var dV = this._tangent.normalized().mult(length);
    this._pos = this._pos.add(dV);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'l',
        action: 'moveTo',
        args: [dV.x, dV.y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/***
 *
 * @param {Number} angle - degree
*  @returns {Turtle}
 */
Turtle.prototype.rotateDirTo = function (angle) {
    this._tangent = Vec2/* default.fromDirection */.Z.fromDirection(angle * Math.PI / 180);
    return this;
};

/***
 *
 * @param {Number} dAngle
 * @returns {Turtle}
 */
Turtle.prototype.rotateDirBy = function (dAngle) {
    this._tangent = this._tangent.rotate(dAngle * Math.PI / 180);
    return this;
};


/**
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.lineBy = function (dx, dy) {
    this._tangent = new Vec2/* default */.Z(x, y);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'l',
        action: 'lineBy',
        args: [dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} x
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.lineTo = function (x, y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'L',
        action: 'lineTo',
        args: [x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.lineBy = function (dx, dy) {
    this._tangent = new Vec2/* default */.Z(dx, dy);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'l',
        action: 'lineBy',
        args: [dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} x
 * @returns {Turtle}
 */
Turtle.prototype.hLineTo = function (x) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, this._pos.y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'H',
        action: 'hLineTo',
        args: [x],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 * @param {Number} x
 * @returns {Turtle}
 */
Turtle.prototype.hLineBy = function (x) {
    this._tangent = new Vec2/* default */.Z(x, 0);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'h',
        action: 'hLineBy',
        args: [x],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.vLineTo = function (y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(this._pos.x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'V',
        action: 'vLineTo',
        args: [y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.vLineBy = function (y) {
    this._tangent = new Vec2/* default */.Z(0, y);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'v',
        action: 'vLineBy',
        args: [y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 * @param {Number} c1x
 * @param {Number} c1y
 * @param {Number} c2x
 * @param {Number} c2y
 * @param {Number} x
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.cubicBezierTo = function (c1x, c1y, c2x, c2y, x, y) {
    this._tangent = new Vec2/* default */.Z(c2x, c2y);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'C',
        action: 'cubicBezierTo',
        args: [c1x, c1y, c2x, c2y, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} c1dx
 * @param {Number} c1dy
 * @param {Number} c2dx
 * @param {Number} c2dy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.cubicBezierBy = function (c1dx, c1dy, c2dx, c2dy, dx, dy) {
    this._tangent = this._pos.add(new Vec2/* default */.Z(c2dx, c2dy));
    this._pos = new Vec2/* default */.Z(dx, dy);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'c',
        action: 'cubicBezierBy',
        args: [c1dx, c1dy, c2dx, c2dy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} c2x
 * @param {Number} c2y
 * @param {Number} x
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.smoothCubicBezierTo = function (c2x, c2y, x, y) {
    this._tangent = new Vec2/* default */.Z(c2x, c2y);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'S',
        action: 'smoothCubicBezierTo',
        args: [c2x, c2y, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} c2dx
 * @param {Number} c2dy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.smoothCubicBezierBy = function (c2dx, c2dy, dx, dy) {
    this._tangent = this._pos.add(new Vec2/* default */.Z(c2dx, c2dy));
    this._pos = new Vec2/* default */.Z(dx, dy);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 's',
        action: 'smoothCubicBezierBy',
        args: [c2dx, c2dy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cx
 * @param {Number} cy
 * @param {Number} x
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.quadraticBezierTo = function (cx, cy, x, y) {
    this._tangent = new Vec2/* default */.Z(cx, cy);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'Q',
        action: 'quadraticBezierTo',
        args: [cx, cy, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.quadraticBezierBy = function (cdx, cdy, dx, dy) {
    this._tangent = this._pos.add(new Vec2/* default */.Z(cdx, cdy));
    this._pos = new Vec2/* default */.Z(dx, dy);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'q',
        action: 'quadraticBezierBy',
        args: [cdx, cdy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cx
 * @param {Number} cy
 * @param {Number} x
 * @param {Number} y
 * @returns {Turtle}
 */
Turtle.prototype.smoothQuadraticBezierTo = function (cx, cy, x, y) {
    this._tangent = new Vec2/* default */.Z(cx, cy);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'T',
        action: 'smoothQuadraticBezierTo',
        args: [cx, cy, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.smoothQuadraticBezierBy = function (cdx, cdy, dx, dy) {
    this._tangent = this._pos.add(new Vec(cdx, cdy));
    this._pos = new Vec2/* default */.Z(dx, dy);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 't',
        action: 'smoothQuadraticBezierBy',
        args: [cdx, cdy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/***
 *
 * @param {Number} rx
 * @param {Number} ry
 * @param {Number} angle
 * @param {Number} large
 * @param {Number} sweep
 * @param {Number} x
 * @param {Number} y
 * @return {Turtle}
 */
Turtle.prototype.arcTo = function (rx, ry, angle, large, sweep, x, y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, y);


    var AB = this._pos.sub(this._tangent);


    //in ellipse
    var AB_inE = AB.rotate(-angle / 180 * Math.PI);
    //in circle
    var AB_inC = new Vec2/* default */.Z(AB_inE.x / rx, AB_inE.y / ry);

    var AH_inC;
    var HO_length_inC;
    var AH_length_inC;
    var HO_inC;
    var BO_inC;
    var tangent_inC;
    var tangent_inE;

    AH_inC = AB_inC.div(2);
    AH_length_inC = AH_inC.abs();
    HO_length_inC = Math.sqrt(1 - AH_length_inC * AH_length_inC);
    if (!sweep != !large) {
        HO_inC = AB_inC.rotate90().normalized().mult(HO_length_inC);
        BO_inC = AH_inC.inv().add(HO_inC);
        tangent_inC = BO_inC.rotate90().inv();
    }
    else {
        HO_inC = AB_inC.rotate90().inv().normalized().mult(HO_length_inC);//ok
        BO_inC = AH_inC.inv().add(HO_inC);
        tangent_inC = BO_inC.rotate90();
    }
    if (large) tangent_inC = tangent_inC.inv();

    tangent_inE = new Vec2/* default */.Z(tangent_inC.x * rx, tangent_inC.y * ry);
    this._tangent = tangent_inE.rotate(angle / 180 * Math.PI);

    this._commands.push({
        cmd: 'A',
        action: 'lineTo',
        args: [rx, ry, angle, large, sweep, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/***
 *
 * @param {Number} rx
 * @param {Number} ry
 * @param {Number} angle
 * @param {Number} large
 * @param {Number} sweep
 * @param {Number} dx
 * @param {Number} dy
 * @return {Turtle}
 */
Turtle.prototype.arcBy = function (rx, ry, angle, large, sweep, dx, dy) {
    //todo: wrong_tangent
    this._tangent = new Vec2/* default */.Z(dx, dy);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'a',
        action: 'arcBy',
        args: [rx, ry, angle, large, sweep, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @returns {Turtle}
 */
Turtle.prototype.closePath = function () {
    this._tangent = this._pos;
    this._pos = this._startPos;
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'z',
        action: 'closePath',
        args: [],
        dest: this._pos
    });
    return this;
};


/**
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Turtle}
 */
Turtle.prototype.translate = function (dx, dy) {
    var command;
    var deltaVec = new Vec2/* default */.Z(dx, dy);
    for (var i = 0; i < this._commands.length; ++i) {
        command = this._commands[i];
        command.dest = command.dest.add(deltaVec);
        switch (command.cmd) {
            case 'M':
            case 'L':
                command.args[0] = command.dest.x;
                command.args[1] = command.dest.y;
                break;
            case 'H':
                command.args[0] = command.dest.x;
                break;
            case 'V':
                command.args[0] = command.dest.y;
                break;
            case 'C':
                command.args[0] += dx;
                command.args[1] += dy;
                command.args[2] += dx;
                command.args[3] += dy;
                command.args[4] = command.dest.x;
                command.args[5] = command.dest.y;
                break;
            case 'Q':
                command.args[0] += dx;
                command.args[1] += dy;
                command.args[3] = command.dest.x;
                command.args[4] = command.dest.y;
                break;

            case 'A':
                command.args[5] = command.dest.x;
                command.args[6] = command.dest.y;
                break;
        }

    }
    return this;
};


/**
 * @returns {String}
 */
Turtle.prototype.getPath = function () {

    return this._commands.map(function (command) {
        return command.cmd + ' ' + command.args.join(',');
    }).join(' ');
};


/***
 *
 * @return {Turtle}
 */
Turtle.prototype.reset = function () {
    this._commands = [];
    this._pos = new Vec2/* default */.Z(0, 0);
    this._startPos = this._pos;
    this._tangent = new Vec2/* default */.Z(0, 0);
    return this;
};

Turtle.prototype.clone = function () {
    var res = new Turtle();
    res._commands.push.apply(res._commands, this._commands);
    res._pos = this._pos.copy();
    res._startPos = this._startPos.copy();
    res._tangent = this._tangent.copy()
    return res;
};

/* harmony default export */ const controller_Turtle = (Turtle);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/svg/Shape.js





var _ = svg_Core._;
var $ = svg_Core.$;


/***
 * @extends {AElementNS}
 * @constructor
 */
function Shape() {
    this._turtle = new controller_Turtle();
}

Shape.tag = 'shape';
Shape.render = function () {
    return _('path');
};

/***
 *
 * @return {Shape}
 */
Shape.prototype.begin = function () {
    this._turtle.reset();
    return this;
};

/***
 *
 * @return {Shape}
 */
Shape.prototype.end = function () {
    this.attr('d', this._turtle.getPath());
    return this;
};

/***
 *
 * @param {Number} angle - degree
 *  @returns {Shape}
 */
Shape.prototype.rotateDirTo = function (angle) {
    this._turtle.rotateDirTo(angle);
    return this;
};

/***
 *
 * @param {Number} dAngle
 * @returns {Shape}
 */
Shape.prototype.rotateDirBy = function (dAngle) {
    this._turtle.rotateDirBy(dAngle);
    return this;
};


/***
 *
 * @param {Number} x
 * @param {Number} y
 * @return {Shape}
 */
Shape.prototype.moveTo = function (x, y) {
    this._turtle.moveTo(x, y);
    return this;
};

/***
 *
 * @param {Number} dx
 * @param {Number} dy
 * @return {Shape}
 */
Shape.prototype.moveBy = function (dx, dy) {
    this._turtle.moveBy(dx, dy);
    return this;
};

/***
 *
 * @return {Shape}
 */
Shape.prototype.closePath = function () {
    this._turtle.closePath();
    return this;
}

/***
 *
 * @param {Number} x
 * @param {Number} y
 * @return {Shape}
 */
Shape.prototype.lineTo = function (x, y) {
    this._turtle.lineTo(x, y);
    return this;
};

/***
 *
 * @param {Number} dx
 * @param {Number} dy
 * @return {Shape}
 */
Shape.prototype.lineBy = function (dx, dy) {
    this._turtle.lineBy(dx, dy);
    return this;
};

/***
 *
 * @param {Number} x
 * @return {Shape}
 */
Shape.prototype.hLineTo = function (x) {
    this._turtle.hLineTo(x);
    return this;
};

/***
 *
 * @param {Number} dx
 * @return {Shape}
 */
Shape.prototype.hLineBy = function (dx) {
    this._turtle.hLineBy(x);
    return this;
};


/***
 *
 * @param {Number} y
 * @return {Shape}
 */
Shape.prototype.vLineTo = function (y) {
    this._turtle.vLineTo(y);
    return this;
};

/***
 *
 * @param {Number} dy
 * @return {Shape}
 */
Shape.prototype.vLineBy = function (dy) {
    this._turtle.vLineBy(dy);
    return this;
};


/**
 * @param {Number} c1x
 * @param {Number} c1y
 * @param {Number} c2x
 * @param {Number} c2y
 * @param {Number} x
 * @param {Number} y
 * @returns {Shape}
 */
Shape.prototype.cubicBezierTo = function (c1x, c1y, c2x, c2y, x, y) {
    this._turtle.cubicBezierTo(c1x, c1y, c2x, c2y, x, y);
    return this;
};


/**
 * @param {Number} c1dx
 * @param {Number} c1dy
 * @param {Number} c2dx
 * @param {Number} c2dy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Shape}
 */
Shape.prototype.cubicBezierBy = function (c1dx, c1dy, c2dx, c2dy, dx, dy) {
    this._turtle.cubicBezierBy(c1dx, c1dy, c2dx, c2dy, dx, dy);
    return this;
};


/**
 * @param {Number} c2x
 * @param {Number} c2y
 * @param {Number} x
 * @param {Number} y
 * @returns {Shape}
 */
Shape.prototype.smoothCubicBezierTo = function (c2x, c2y, x, y) {
    this._turtle.smoothCubicBezierTo(c2x, c2y, x, y);
    return this;
};


/**
 * @param {Number} c2dx
 * @param {Number} c2dy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Shape}
 */
Shape.prototype.smoothCubicBezierBy = function (c2dx, c2dy, dx, dy) {
    this._turtle.smoothCubicBezierBy(c2dx, c2dy, dx, dy);
    return this;
};


/**
 * @param {Number} cx
 * @param {Number} cy
 * @param {Number} x
 * @param {Number} y
 * @returns {Shape}
 */
Shape.prototype.quadraticBezierTo = function (cx, cy, x, y) {
    this._turtle.quadraticBezierTo(cx, cy, x, y);
    return this;
};


/**
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Shape}
 */
Shape.prototype.quadraticBezierBy = function (cdx, cdy, dx, dy) {
    this._turtle.quadraticBezierBy(cdx, cdy, dx, dy);
    return this;
};


/**
 * @param {Number} cx
 * @param {Number} cy
 * @param {Number} x
 * @param {Number} y
 * @returns {Shape}
 */
Shape.prototype.smoothQuadraticBezierTo = function (cx, cy, x, y) {
    this._turtle.smoothQuadraticBezierTo(cx, cy, x, y);
    return this;
};


/**
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {Shape}
 */
Shape.prototype.smoothQuadraticBezierBy = function (cdx, cdy, dx, dy) {
    this._turtle.smoothQuadraticBezierBy(cdx, cdy, dx, dy);
    return this;
};


/***
 *
 * @param {Number} x
 * @param {Number} y
 * @param {Number} rx
 * @param {Number} ry
 * @param {Number} lf
 * @param {Number} sf
 * @param {Number} xRotate
 * @return {Shape}
 */
Shape.prototype.arcTo = function (x, y, rx, ry, lf, sf, xRotate) {
    ry = ry || rx;
    lf = lf || 0;
    sf = sf || 0;
    xRotate = xRotate || 0;
    this._turtle.arcTo(rx, ry, xRotate, lf, sf, x, y);
    return this;
};


/***
 *
 * @param {Number} dx
 * @param {Number} yd
 * @param {Number} rx
 * @param {Number} ry
 * @param {Number} lf
 * @param {Number} sf
 * @param {Number} xRotate
 * @return {Shape}
 */
Shape.prototype.arcBy = function (dx, yd, rx, ry, lf, sf, xRotate) {
    ry = ry || rx;
    lf = lf || 0;
    sf = sf || 0;
    xRotate = xRotate || 0;
    this._turtle.arcBy(rx, ry, xRotate, lf, sf, dx, yd);
    return this;
};


/***
 *
 * @param {Number} x
 * @param {Number} y
 * @param {Number} x0
 * @param {Number} y0
 * @param {Number} x1
 * @param {Number} y1
 * @return {Shape}
 */
Shape.prototype.curveTo = function (x, y, x0, y0, x1, y1) {
    this._turtle.cubicBezierTo(x0, y0, x1, y1, x, y);
    return this;
};

svg_Core.install(Shape);
/* harmony default export */ const svg_Shape = (Shape);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 1 modules
var Dom = __webpack_require__(6628);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/ResizeSystem.js
var ResizeSystem = __webpack_require__(6700);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/controller/CSvgBox.js
/***
 *
 * @param {SvgCanvas} $svg
 * @constructor
 */
function CSvgBox($svg) {
    this.$svg = $svg;
    this._width = 0;
    this._height = 0;
    this.width = 0;
    this.height = 0;

}

/***
 *
 * @param {number} width
 * @param {number} height
 */
CSvgBox.prototype.setSize = function (width, height) {
    this.$svg.attr('width', width + '');
    this.$svg.attr('height', height + '');
    this.$svg.attr('viewBox', [-0.5, -0.5, width, height].join(' '));
    this._width = width;
    this._height = height;
};

Object.defineProperty(CSvgBox.prototype, 'width', {
    /***
     *
     * @param {Number} width
     */
    set: function (width) {
        this.setSize(width, this._height);
    },
    /***
     *
     * @return {number}
     */
    get: function () {
        return this._width;
    }
});

Object.defineProperty(CSvgBox.prototype, 'height', {
    /***
     *
     * @param {Number} height
     */
    set: function (height) {
        this.setSize(this._width, height);
    },
    /***
     *
     * @return {number}
     */
    get: function () {
        return this._height;
    }
});


Object.defineProperty(CSvgBox.prototype, 'size', {
    /***
     *
     * @param {{width: number, height:number}} size
     */
    set: function (size) {
        this.setSize(size.width, size.height);
    },
    /***
     *
     * @return {{width: number, height: number}}
     */
    get: function () {
        return { width: this._width, height: this._height };
    }
});


/* harmony default export */ const controller_CSvgBox = (CSvgBox);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/svg/SvgCanvas.js





var SvgCanvas_ = svg_Core._;
var SvgCanvas_$ = svg_Core.$;


/***
 * @extends AElementNS
 * @constructor
 */
function SvgCanvas() {
    var thisSC = this;
    this.box = new controller_CSvgBox(this);
    this.$attachhook = SvgCanvas_$('sattachhook', this)
        .on('attached', this.eventHandler.svgAttached);
    this.$attachhook.requestUpdateSize = function (){
        thisSC.updateSize();
    }
}


SvgCanvas.tag = 'svgcanvas';

SvgCanvas.render = function () {
    return SvgCanvas_({
        tag: 'svg',
        class:'ag-canvas',
        child: 'sattachhook'
    });
};

SvgCanvas.prototype.clearChild = function () {
    while (this.lastChild && this.lastChild !== this.$attachhook) {
        this.removeChild(this.firstChild);
    }
    return this;
};

SvgCanvas.prototype._updateCanvasSize = function () {
    var bound = this.getBoundingClientRect();
    var width = bound.width;
    var height = bound.height;
    this.box.setSize(width, height);
};



SvgCanvas.prototype.updateSize = function (){
    this._updateCanvasSize();
};

/***
 * @type {SvgCanvas}
 */
SvgCanvas.eventHandler = {};

SvgCanvas.eventHandler.svgAttached = function (){
    ResizeSystem/* default.add */.Z.add(this.$attachhook);
    this.updateSize();
}

svg_Core.install(SvgCanvas);

/* harmony default export */ const svg_SvgCanvas = (SvgCanvas);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/controller/CContainerBox.js


/***
 *
 * @param {GContainer} $g
 * @constructor
 */
function CContainerBox($g) {
    this.$g = $g;
    this._width = 0;
    this._height = 0;
    this._x = 0;
    this._y = 0;
    this.width = 0;
    this.height = 0;
    this.x = 0;
    this.y = 0;
}

/***
 *
 * @param {number} width
 * @param {number} height
 * @returns {CContainerBox}
 */
CContainerBox.prototype.setSize = function (width, height) {
    this._width = width;
    this._height = height;
    return this;
};

/***
 *
 * @param {number} x
 * @param {number} y
 * @returns {CContainerBox}
 */
CContainerBox.prototype.setPosition = function (x, y) {
    if (x === 0 && y === 0) {
    }
    else {
        this.$g.attr('transform', 'translate(' + x + ',' + y + ')');
    }
    this._x = x;
    this._y = y;
};


Object.defineProperty(CContainerBox.prototype, 'width', {
    /***
     *
     * @param {number} width
     */
    set: function (width) {
        this.setSize(width, this._height);
    },
    /***
     *
     * @return {number}
     */
    get: function () {
        return this._width;
    }
});

Object.defineProperty(CContainerBox.prototype, 'height', {
    /***
     *
     * @param {number} height
     */
    set: function (height) {
        this.setSize(this._width, height);
    },
    /***
     *
     * @return {number}
     */
    get: function () {
        return this._height;
    }
});


Object.defineProperty(CContainerBox.prototype, 'size', {
    /***
     *
     * @param {{width: number, height:number}} size
     */
    set: function (size) {
        this.setSize(size.width, size.height);
    },
    /***
     *
     * @return {{width: number, height: number}}
     */
    get: function () {
        return { width: this._width, height: this._height };
    }
});

Object.defineProperty(CContainerBox.prototype, 'x', {
    /***
     *
     * @param {number} x
     */
    set: function (x) {
        this.setPosition(x, this._y);
    },
    /***
     *
     * @return {number}
     */
    get: function () {
        return this._x;
    }
});

Object.defineProperty(CContainerBox.prototype, 'y', {
    /***
     *
     * @param {number} y
     */
    set: function (y) {
        this.setPosition(this._x, y);
    },
    /***
     *
     * @return {number}
     */
    get: function () {
        return this._y;
    }
});


Object.defineProperty(CContainerBox.prototype, 'position', {
    /***
     *
     * @param {{x: number, y:number}} position
     */
    set: function (position) {
        this.setPosition(position.x, position.y);
    },
    /***
     *
     * @return {{x: number, y:number}}
     */
    get: function () {
        return { x: this._x, y: this._y };
    }
});

/* harmony default export */ const controller_CContainerBox = (CContainerBox);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/svg/GContainer.js




var GContainer_ = svg_Core._;
var GContainer_$ = svg_Core.$;

/***
 * @extends {AElementNS}
 * @constructor
 */
function GContainer() {
    this.box = new controller_CContainerBox(this);
}

GContainer.tag = 'gcontainer';
GContainer.render = function () {
    return GContainer_('g');
};

/* harmony default export */ const svg_GContainer = (GContainer);
;// CONCATENATED MODULE: ./node_modules/absol-svg/js/svg/install.js






var Creators = [
    svg_Shape, svg_SvgCanvas, svg_GContainer
];

/***
 *
 * @param {Dom | Svg} core
 */
function install(core) {
    core.install(Creators);
};
;// CONCATENATED MODULE: ./src/VCore.js


var VCore = new Svg/* default */.ZP();
install(VCore);
var VCore_ = VCore._;
var VCore_$ = VCore.$;
/* harmony default export */ const src_VCore = (VCore);
// EXTERNAL MODULE: ./src/style/minicomp.css
var minicomp = __webpack_require__(1799);
// EXTERNAL MODULE: ./src/style/basechart.css
var basechart = __webpack_require__(8184);
// EXTERNAL MODULE: ./src/style/linechart.css
var linechart = __webpack_require__(2312);
// EXTERNAL MODULE: ./src/style/tooltip.css
var tooltip = __webpack_require__(8734);
// EXTERNAL MODULE: ./src/style/rangechart.css
var rangechart = __webpack_require__(4695);
// EXTERNAL MODULE: ./src/style/assessmentchart.css
var assessmentchart = __webpack_require__(286);
// EXTERNAL MODULE: ./src/style/columnchart.css
var columnchart = __webpack_require__(2687);
// EXTERNAL MODULE: ./src/style/rangegroupchart.css
var rangegroupchart = __webpack_require__(9033);
// EXTERNAL MODULE: ./src/style/rankchart.css
var rankchart = __webpack_require__(6053);
// EXTERNAL MODULE: ./src/style/sunburstchart.css
var sunburstchart = __webpack_require__(622);
// EXTERNAL MODULE: ./src/style/squarechart.css
var squarechart = __webpack_require__(301);
// EXTERNAL MODULE: ./src/style/grouprankchart.css
var grouprankchart = __webpack_require__(1595);
// EXTERNAL MODULE: ./src/style/mappingchart.css
var mappingchart = __webpack_require__(8856);
// EXTERNAL MODULE: ./src/style/imagechart.css
var imagechart = __webpack_require__(4516);
// EXTERNAL MODULE: ./src/style/horizontalbarchart.css
var horizontalbarchart = __webpack_require__(5233);
// EXTERNAL MODULE: ./src/style/resizeablediv.css
var resizeablediv = __webpack_require__(7139);
;// CONCATENATED MODULE: ./src/style/vchartStyle.js
















/* harmony default export */ const vchartStyle = ({});
;// CONCATENATED MODULE: ./src/Axis.js


var Axis_ = src_VCore._;
var Axis_$ = src_VCore.$;
/***
 * @extends GContainer
 * @constructor
 */

function Axis() {
  this.$oxy = Axis_$('#oxy', this);
  this.$oxArrow = Axis_$('#ox-arrow', this);
  this.$oyArrow = Axis_$('#oy-arrow', this);
  this.$oyDivision = Axis_$('.cv-oy-division', this);
  this.oxLength = 1;
  this.oyLength = 1;
  this.oyPadding = 0;
  this.oyDivision = NaN;
}

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

Axis.render = function () {
  return Axis_({
    tag: 'gcontainer',
    "class": "vchart-axis",
    child: [{
      tag: 'path',
      id: "oy-arrow",
      attr: {
        d: "m-5 0h10l-5-6.8z"
      }
    }, {
      tag: 'path',
      id: "ox-arrow",
      attr: {
        d: 'm0 -5v10l6.8 -5z'
      }
    }, {
      tag: 'path',
      id: 'oxy',
      attr: {
        d: 'm0 -1v1 h1',
        fill: 'none'
      }
    }, {
      tag: 'path',
      "class": 'cv-oy-division',
      style: {
        display: 'none'
      }
    }]
  });
};

Axis.prototype.updateOyDivision = function () {
  if (this.oyDivision) {
    this.$oyDivision.removeStyle('display');
    var y = this.oyDivision + this.oyPadding;
    if (this.oyPadding) y -= this.oyDivision;
    var d = '';

    while (y <= this.oyLength) {
      d += 'M-2 ' + -y + 'H 2 ';
      y += this.oyDivision;
    }

    this.$oyDivision.attr('d', d);
  } else {
    this.$oyDivision.addStyle('display', 'none');
  }
};

Axis.prototype.updateSize = function () {
  this.$oxy.attr('d', 'm0 ' + -this.oyLength + 'v' + this.oyLength + ' h' + this.oxLength);
  this.$oxArrow.attr('transform', 'translate(' + this.oxLength + ', 0)');
  this.$oyArrow.attr('transform', 'translate(0, ' + -this.oyLength + ')');
  this.updateOyDivision();
};

Axis.prototype.resize = function (oxLength, oyLength) {
  this.oxLength = oxLength;
  this.oyLength = oyLength;
  this.updateSize();
};

Axis.prototype.moveTo = function (x, y) {
  this.attr('transform', 'translate(' + x + ',' + y + ')');
};

Axis.prototype.init = function (props) {
  if (props) {
    if (props.oxLength && props.oyLength) this.resize(props.oxLength, props.oyLength);
    if (props.x && props.y) this.moveTo(props.x, props.y);
  }
};

src_VCore.install(Axis);
/* harmony default export */ const src_Axis = ((/* unused pure expression or super */ null && (Axis)));
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Mat3.js
var Mat3 = __webpack_require__(9846);
// EXTERNAL MODULE: ./src/style/scrollarrow.css
var scrollarrow = __webpack_require__(6227);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js
var EventEmitter = __webpack_require__(863);
;// CONCATENATED MODULE: ./src/ScrollArrow.js





var ScrollArrow_ = src_VCore._;
var ScrollArrow_$ = src_VCore.$;

function ScrollArrow() {
  this.$left = ScrollArrow_$('.vc-scroll-arrow-left', this);
  this.$right = ScrollArrow_$('.vc-scroll-arrow-right', this);
  this.width = 100;
  this.on('pointerdown', this.eventHandler.pointerDown);
  this.$leftArrow = this.$left;
  this.$rightArrow = this.$right;
  this._pointerItv = -1; //     .on('pointerdown', function (event) {
  //         event.preventDefault();
  //         var iv = setInterval(function () {
  //             res.emit('pressleft', event, res);
  //         }, 30);
  //
  //         function finish(event) {
  //             clearInterval(iv);
  //             this.off('pointerleave', finish);
  //             this.off('pointerup', finish);
  //         };
  //         this.on('pointerleave', finish);
  //         this.on('pointerup', finish);
  //     });
  //
  // res.$hitBoxLeft = _({
  //     tag: 'rect',
  //     attr: {
  //         x: -5,
  //         y: -5,
  //         width: 30,
  //         height: 37,
  //         rx: 5,
  //         ry: 5
  //     },
  //     style: {
  //         fill: 'rgba(0, 0, 255, 0.1)'
  //     }
  // }).addTo(res.$leftArrow);
  //
  // res.$rightArrow = _(
  //     [
  //         '<g>',
  //         '<g transform="translate(0,-270)">',
  //         '<g transform="matrix(.26164 0 0 .26164 .23843 218.56)" style="fill:#00a5d6">',
  //         '<path d="m0.99976 198 49.214 48.519-49.213 49.481v-14.201l35.215-35.079-35.164-34.611z" style="fill:#00a5d6"/>',
  //         '<path d="m28.531 198.44v13.96l35.057 34.608-35.057 34.963v13.555l48.91-48.844z" style="fill:#00a5d6"/>',
  //         '</g>',
  //         '</g>',
  //         '</g>'
  //     ].join('')
  // ).addTo(res)
  //     .on('pointerdown', function (event) {
  //         event.preventDefault();
  //         var iv = setInterval(function () {
  //             res.emit('pressright', event, res);
  //         }, 30);
  //
  //         function finish(event) {
  //             clearInterval(iv);
  //             this.off('pointerleave', finish);
  //             this.off('pointerup', finish);
  //         };
  //         this.on('pointerleave', finish);
  //         this.on('pointerup', finish);
  //     });
  //
  // res.$hitBoxRight = _({
  //     tag: 'rect',
  //     attr: {
  //         x: -5,
  //         y: -5,
  //         width: 30,
  //         height: 37,
  //         rx: 5,
  //         ry: 5
  //     },
  //     style: {
  //         fill: 'rgba(0, 0, 255, 0.1)'
  //     }
  // }).addTo(res.$rightArrow);
  //
  // return res;
}

Mat3/* default.prototype.apply2DTransform */.Z.prototype.apply2DTransform = function (v, isPoint) {
  var a = this.data;
  var x0 = v.x;
  var y0 = v.y;
  var x = x0 * a[0] + y0 * a[3] + (isPoint ? a[6] : 0);
  var y = x0 * a[1] + y0 * a[4] + (isPoint ? a[7] : 0);
  return new Vec2/* default */.Z(x, y);
};

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

ScrollArrow.render = function () {
  return ScrollArrow_({
    tag: 'gcontainer',
    extendEvent: ['pressleft', 'pressright'],
    "class": 'vc-scroll-arrow',
    child: [{
      attr: {// transform: "matrix(.26164 0 0 .26164 .23843 218.56)"
      },
      child: [{
        tag: 'gcontainer',
        "class": 'vc-scroll-arrow-left',
        child: [{
          tag: 'rect',
          "class": 'vc-scroll-arrow-hit-box',
          attr: {
            x: 0,
            y: -19,
            width: 30,
            height: 38,
            rx: 5,
            ry: 5
          }
        }, {
          tag: 'path',
          "class": 'vc-scroll-arrow-icon',
          attr: {
            d: 'm 24.02314720639999998 -12.3647199999999984 -12.876350959999998 12.69451116 12.87608932 12.946208839999999' + ' v -3.71554964 l -9.2136526 -9.178069559999999 9.20030896 -9.05562204 z' + ' M 17.226420839999999 -12.4798416000000003 v 3.6524944 l -9.17231348 9.054837119999998 9.17231348 9.14771932' + ' v 3.5465302 l -12.796812399999999 -12.77954416 z'
          }
        }]
      }, {
        tag: 'gcontainer',
        "class": 'vc-scroll-arrow-right',
        child: [{
          tag: 'rect',
          "class": 'vc-scroll-arrow-hit-box',
          attr: {
            x: -30,
            y: -19,
            width: 30,
            height: 38,
            rx: 5,
            ry: 5
          }
        }, {
          tag: 'path',
          "class": 'vc-scroll-arrow-icon',
          attr: {
            d: 'm -22.5000072064 -12.3647199999999984 12.876350959999998 12.69451116 -12.87608932 12.946208839999999' + ' v -3.71554964 l 9.2136526 -9.178069559999999 -9.20030896 -9.05562204 z ' + 'M -15.70328084 -12.4798416000000003 v 3.6524944 l 9.17231348 9.054837119999998 ' + '-9.17231348 9.14771932 v 3.5465302 l 12.796812399999999 -12.77954416 z'
          }
        }]
      }]
    }]
  });
};

ScrollArrow.property = {
  width: {
    set: function set(value) {
      this.box.width = value;
      this.$right.box.x = value;
    },
    get: function get() {
      return this.box.width;
    }
  }
};
ScrollArrow.eventHandler = {};

ScrollArrow.eventHandler.pointerDown = function (event) {
  event.preventDefault();
  var button = EventEmitter/* default.hitElement */.ZP.hitElement(this.$left, event) ? 0 : 1;
  var thisSB = this;
  this._buttonIdx = button;

  if (this._pointerItv < 0) {
    this._pointerItv = setInterval(function () {
      if (thisSB._buttonIdx === 0) {
        thisSB.emit('pressleft', event, thisSB);
      } else if (thisSB._buttonIdx === 1) {
        thisSB.emit('pressright', event, thisSB);
      }
    }, 30);
  }

  ScrollArrow_$(document.body).on('pointerup', this.eventHandler.pointerUp);

  if (thisSB._buttonIdx === 0) {
    thisSB.emit('pressleft', event, thisSB);
  } else if (thisSB._buttonIdx === 1) {
    thisSB.emit('pressright', event, thisSB);
  }
};

ScrollArrow.eventHandler.pointerUp = function () {
  clearInterval(this._pointerItv);
  this._pointerItv = -1;
  ScrollArrow_$(document.body).off('pointerup', this.eventHandler.pointerUp);
};

src_VCore.install(ScrollArrow);
/* harmony default export */ const src_ScrollArrow = ((/* unused pure expression or super */ null && (ScrollArrow)));
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(3349);
// EXTERNAL MODULE: ./node_modules/absol/src/Color/Color.js
var Color = __webpack_require__(257);
// EXTERNAL MODULE: ./node_modules/absol-acomp/AComp.js + 1 modules
var AComp = __webpack_require__(6657);
// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(3855);
;// CONCATENATED MODULE: ./src/vchart.resizablediv.js


var vchart_resizablediv_ = ACore/* default._ */.Z._;
var vchart_resizablediv_$ = ACore/* default.$ */.Z.$;

function ResizeableDiv() {
  this.$resizebox = vchart_resizablediv_$('resizebox', this).on('beginmove', this.eventHandler.beginMove);
  this.on('click', this.eventHandler.click);
}

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

ResizeableDiv.render = function () {
  return vchart_resizablediv_({
    "class": ['vchart-resizable-div'],
    extendEvent: 'sizechange',
    child: {
      tag: 'resizebox',
      props: {
        canResize: true
      }
    }
  });
};

ACore/* default.install */.Z.install('resizablediv', ResizeableDiv);
ResizeableDiv.eventHandler = {};

ResizeableDiv.eventHandler.click = function () {
  this.enableResize();
};

ResizeableDiv.eventHandler.clickBody = function (event) {
  if (EventEmitter/* default.hitElement */.ZP.hitElement(this.$modal, event) || EventEmitter/* default.hitElement */.ZP.hitElement(this, event)) return;
  this.disableResize();
};

ResizeableDiv.eventHandler.beginMove = function (event) {
  this.$modal = (this.$modal || vchart_resizablediv_({
    style: {
      position: 'fixed',
      left: '1px',
      right: '1px',
      top: '1px',
      bottom: '1px',
      zIndex: '1000'
    }
  })).addTo(document.body);
  this.$resizebox.on('moving', this.eventHandler.moving);
  this.$resizebox.on('endmove', this.eventHandler.endMove);
  this._preBound = this.getBoundingClientRect();
};

ResizeableDiv.eventHandler.moving = function (event) {
  var w = this._preBound.width;
  var h = this._preBound.height;

  if (event.option.bottom) {
    h += event.clientDY;
    this.addStyle('height', this._preBound.height + event.clientDY + 'px');
  }

  if (event.option.right) {
    w += event.clientDX;
    this.addStyle('width', this._preBound.width + event.clientDX + 'px');
  }

  this.emit('sizechange', {
    type: 'type',
    target: this,
    width: w,
    height: h,
    originEvent: event.originEvent || event
  });
};

ResizeableDiv.eventHandler.endMove = function (event) {
  this.$resizebox.off('moving', this.eventHandler.moving);
  this.$resizebox.off('endmove', this.eventHandler.endMove);
  this.$modal.remove();
};

ResizeableDiv.prototype.enableResize = function () {
  if (this.containsClass('vchart-resizable-div-active')) return;
  this.addClass('vchart-resizable-div-active');
  vchart_resizablediv_$(document.body).on('click', this.eventHandler.clickBody);
};

ResizeableDiv.prototype.disableResize = function () {
  if (!this.containsClass('vchart-resizable-div-active')) return;
  this.removeClass('vchart-resizable-div-active');
  vchart_resizablediv_$(document.body).off('click', this.eventHandler.clickBody);
};

/* harmony default export */ const vchart_resizablediv = ((/* unused pure expression or super */ null && (ResizeableDiv)));
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/TextMeasure.js + 1 modules
var TextMeasure = __webpack_require__(2610);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/BContextCapture.js
var BContextCapture = __webpack_require__(9782);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Rectangle.js
var Math_Rectangle = __webpack_require__(2759);
;// CONCATENATED MODULE: ./src/helper.js








var helper_ = src_VCore._;
var beautyStep = [0.001, 0.002, 0.0025, 0.005, 0.01, 0.02, 0.025, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 2, 5].concat(function () {
  var res = [];
  var h = 1;

  while (h < 10000000000) {
    res.push(10 * h);
    res.push(20 * h);
    res.push(25 * h);
    res.push(50 * h);
    h *= 10;
  }

  return res;
}());
function circle(x, y, r, eClss) {
  return helper_({
    tag: 'circle',
    "class": eClss,
    attr: {
      cx: x,
      cy: y,
      r: r
    }
  });
}
;
/**
 * @param {String} text
 * @param {Number} x
 * @param {Number} y
 * @param {String=} eClss
 * @returns {SVGTextElement}
 */

function helper_text(text, x, y, eClss) {
  if (eClss instanceof Array) eClss = eClss.join(' ');
  return helper_('<text x="' + x + '" y="' + y + '" ' + (eClss ? 'class="' + eClss + '"' : '') + '>' + text + '</text>');
}
function vline(x, y, length, eClss) {
  return helper_({
    tag: 'path',
    "class": eClss,
    attr: {
      d: 'm' + x + ' ' + y + 'v' + length
    }
  });
}
function moveVLine(e, x, y, length) {
  return e.attr('d', 'm' + x + ' ' + y + 'v' + length);
}
function hline(x, y, length, eClss) {
  return helper_({
    tag: 'path',
    "class": eClss,
    attr: {
      d: 'm' + x + ' ' + y + 'h' + length
    }
  });
}
function moveHLine(e, x, y, length) {
  return e.attr('d', 'm' + x + ' ' + y + 'h' + length);
}
/**
 *
 * @param {Number} x
 * @param {Number} y
 * @param {Number} width
 * @param {Number} height
 * @param {Number} eClss
 * @returns {SVGRect}
 */

function rect(x, y, width, height, eClss) {
  var option = {
    tag: 'rect',
    attr: {
      x: x,
      y: y,
      width: width,
      height: height
    },
    "class": eClss
  };
  return helper_(option);
}
function line(x0, y0, x1, y1) {
  return helper_({
    tag: 'path',
    "class": eClss,
    attr: {
      d: 'M' + x0 + ' ' + y0 + 'L' + x1 + ' ' + y1
    }
  });
}
function calBeautySegment(maxSegment, minValue, maxValue, integerOnly) {
  var i = 0;
  var res = {
    step: 1,
    segmentCount: maxValue - minValue,
    maxValue: maxValue,
    minValue: minValue
  };

  while (i < beautyStep.length) {
    var step = beautyStep[i];

    if (!integerOnly || step >= 1) {
      var bot = Math.floor(minValue / step);
      var top = Math.ceil(maxValue / step);

      if (top - bot <= maxSegment) {
        res.step = step;
        res.segmentCount = top - bot;
        res.maxValue = top * step;
        res.minValue = bot * step;
        break;
      }
    }

    ++i;
  }

  return res;
} //x[i] < x[i+1]

function autoCurve(points, strong, free) {
  if (!(strong > 0)) strong = 0.5;

  if (points.length == 0) {
    return '';
  }

  var paddingLeft = points[0].slice();
  var paddingRight = points[points.length - 1].slice();

  if (typeof free == "number") {
    paddingLeft[0] -= (points[1][0] - points[0][0]) * free;
    paddingLeft[1] -= (points[1][1] - points[0][1]) * free;
    paddingRight[0] += (points[points.length - 1][0] - points[points.length - 2][0]) * free;
    paddingRight[1] += (points[points.length - 1][1] - points[points.length - 2][1]) * free;
  } else if (free instanceof Array) {
    paddingLeft[0] -= free[0][0];
    paddingLeft[1] -= free[0][1];
    paddingRight[0] += free[1][0];
    paddingRight[1] += free[1][1];
  }

  points = [paddingLeft].concat(points).concat([paddingRight]);
  var Cs = [];
  Cs.push('M' + points[1].join(' '));

  for (var i = 1; i < points.length - 2; ++i) {
    var A = Vec2/* default.make */.Z.make(points[i - 1]);
    var B = Vec2/* default.make */.Z.make(points[i]);
    var C = Vec2/* default.make */.Z.make(points[i + 1]);
    var D = Vec2/* default.make */.Z.make(points[i + 2]);
    var AB = B.sub(A);
    var BC = C.sub(B);
    var CB = BC.inv();
    var DC = C.sub(D);
    var lAB = AB.abs();
    var lBC = BC.abs();
    var lDC = DC.abs();
    var lCB = lBC;
    var h1 = Math.sqrt(lAB * lBC);
    var h2 = Math.sqrt(lBC * lDC);
    if (h1 == 0) h1 = 1;
    if (h2 == 0) h2 = 1;
    var N1 = AB.normalized().add(BC.normalized()).normalized();
    var N2 = CB.normalized().add(DC.normalized()).normalized();
    var lN1 = lBC == 0 ? 0 : lBC * (N1.dot(BC) / (N1.abs() * BC.abs())) * h1 / (h1 + h2) * strong;
    var lN2 = lCB == 0 ? 0 : lCB * (N2.dot(CB) / (N2.abs() * CB.abs())) * h2 / (h1 + h2) * strong;
    N1 = N1.mult(lN1);
    N2 = N2.mult(lN2);
    var P1 = B.add(N1);
    var P2 = C.add(N2);
    var x1 = P1.x;
    var y1 = P1.y;
    var x2 = P2.x;
    var y2 = P2.y;
    var x = C.x;
    var y = C.y;
    Cs.push('C ' + x1 + ' ' + y1 + ', ' + x2 + ' ' + y2 + ', ' + x + ' ' + y);
  }

  return Cs.join('');
}
;
function generateBackgroundColors(n) {
  var l = Math.ceil(Math.sqrt(n));
  var arrs = Array(n).fill(null).reduce(function (ac, cr, i) {
    var tail = ac[ac.length - 1];

    if (tail.length >= l) {
      tail = [];
      ac.push(tail);
    }

    var color = Color/* default.fromHSL */.Z.fromHSL(i / n, 0.5, 0.5);
    tail.push(color);
    return ac;
  }, [[]]);
  var res = [];
  var i = 0;

  while (res.length < n) {
    if (arrs[i].length > 0) {
      res.push(arrs[i].shift());
    }

    i = (i + 1) % arrs.length;
  }

  return res;
}
function isNumber(x) {
  return -Infinity < x && x < Infinity && typeof x == 'number';
}
function toLocalString(fixedRight) {
  var separatorReal = 1.5.toLocaleString().replace(/[0-9]/g, '');
  var separatorInt = 10000 .toLocaleString().replace(/[0-9]/g, '');
  return function (value) {
    var x = Math.abs(value);
    if (fixedRight !== undefined) x = x.toFixed(fixedRight);
    var s = x.toString().split('.');

    var _int = s[0] || '';

    var realText = s[1] || '';
    _int = _int.split('').reduce(function (ac, cr, i, arr) {
      if (i == 0 || (arr.length - i) % 3 == 0) {
        ac.push(cr);
      } else {
        ac[ac.length - 1] += cr;
      }

      return ac;
    }, []).join(separatorInt);
    return (value < 0 ? '-' : '') + _int + (realText.length > 0 ? separatorReal + realText : '');
  };
}
;
function map(x, l, h, L, H) {
  return L + (x - l) * (H - L) / (h - l);
}
function getSubNumberArray(arr) {
  return arr.reduce(function (ac, value, j) {
    if (isNumber(value)) {
      var cr;

      if (ac.last + 1 < j) {
        cr = {
          start: j,
          values: []
        };
        ac.currentSubArea = cr;
        ac.result.push(cr);
      } else {
        cr = ac.currentSubArea;
      }

      ac.last = j;
      cr.values.push(value);
    }

    return ac;
  }, {
    last: -100,
    result: [],
    currentSubArea: null
  }).result;
}
function wrapChartInWHResizer(chartElt, outerParam) {
  outerParam = outerParam || {};
  var newVersion = chartElt.containsClass('ag-canvas');

  if (newVersion) {
    outerParam.style = outerParam.style || {};
    outerParam.style.width = outerParam.width || chartElt.style.width;
    outerParam.style.height = outerParam.width || chartElt.style.height;

    if (chartElt._isAutoWidth) {
      outerParam.style.width = 'auto';
      chartElt.addStyle({
        height: '100%'
      });
      setTimeout(function () {
        res.addStyle('width', chartElt.getBoundingClientRect().width + 'px');
        chartElt.addStyle({
          width: '100%',
          height: '100%'
        });
      }, 1000);
    } else {
      chartElt.addStyle({
        width: '100%',
        height: '100%'
      });
    }
  }

  var res = AComp/* default._ */.Z._({
    tag: 'resizablediv',
    style: {
      display: 'inline-block',
      verticalAlign: 'top'
    },
    child: chartElt,
    on: {
      sizechange: function sizechange(event) {
        if (chartElt.update) {
          if (event.width) {
            chartElt.canvasWidth = event.width;
          }

          if (event.height) {
            chartElt.canvasHeight = event.height;
          }

          chartElt.update();
        } else if (newVersion) {
          chartElt.updateSize();
        }
      }
    }
  }, false, true).addStyle(outerParam.style || {});

  return res;
}
function paddingLeft(text, _char, length) {
  while (text.length < length) {
    text = _char + '' + text;
  }

  return text;
}
/**
 *
 * @param {String} text
 */

function pathTokenize(text) {
  return text.match(/[a-zA-Z]+|(\-?[0-9\.]+(e\-?[0-9]+)?)/g);
}
/**
 * @argument {Array<SVGElement>}
 * @returns {Number}
 */

function getMinWidthBox() {
  return Array.prototype.reduce.call(arguments, function (ac, elt) {
    return Math.min(ac, elt.getBBox().width);
  }, 100000000);
}
/**
 * @argument {Array<SVGElement>}
 * @returns {Number}
 */

function getMinHeightBox() {
  return Array.prototype.reduce.call(arguments, function (ac, elt) {
    return Math.min(ac, elt.getBBox().height);
  }, 100000000);
}
/**
 * @argument {Array<SVGElement>}
 * @returns {Number}
 */

function getMaxWidthBox() {
  return Array.prototype.reduce.call(arguments, function (ac, elt) {
    return Math.max(ac, elt.getBBox().width);
  }, -100000000);
}
/**
 * @argument {Array<SVGElement>}
 * @returns {Number}
 */

function getMaxHeightBox() {
  return Array.prototype.reduce.call(arguments, function (ac, elt) {
    return Math.max(ac, elt.getBBox().height);
  }, -100000000);
}
/**
 *
 * @param {import ('absol/src/Color/Color').default} color
 * @returns {import ('absol/src/Color/Color').default}
 */

function lighterColor(color, delta) {
  delta = delta || 0;
  var hsla = color.toHSLA();
  hsla[2] = Math.max(0, Math.min(1, hsla[2] + delta));
  return Color/* default.fromHSLA.apply */.Z.fromHSLA.apply(Color/* default */.Z, hsla);
}
function fresherColor(color, delta) {
  delta = delta || 0.2;
  var hsla = color.toHSLA();
  hsla[1] = Math.max(0, Math.min(1, hsla[1] + delta));
  return Color/* default.fromHSLA.apply */.Z.fromHSLA.apply(Color/* default */.Z, hsla);
}
/***
 * Default font size: Arial
 * @param {string} text
 * @param {number} fontSize
 * @param {number} width
 */

function wrapToLines(text, fontSize, width) {
  var words = text.split(' ');
  var line = [words.shift()];
  var lines = [line];
  var newText;

  for (var i = 0; i < words.length; ++i) {
    newText = line.concat([words[i]]).join(' ');

    if (TextMeasure/* default.measureWidth */.Z.measureWidth(newText, 'Arial', 14) <= width) {
      line.push(words[i]);
    } else {
      line = [words[i]];
      lines.push(line);
    }
  }

  for (var i = 0; i < lines.length; ++i) {
    lines[i] = lines[i].join(' ');
  }

  return lines;
}
function addDevContextMenu(svg) {
  BContextCapture/* default.auto */.Z.auto();
  svg.defineEvent('contextmenu');
  svg.on({
    contextmenu: function contextmenu(event) {
      var img = this;
      event.showContextMenu({
        items: [{
          icon: 'span.mdi.mdi-download-outline',
          text: 'Download as SVG',
          cmd: 'download'
        }]
      }, function (ev) {
        var menuItem = ev.menuItem;

        if (menuItem.cmd === 'download') {
          var url = absol.Svg.svgToSvgUrl(img);

          var a = absol._({
            tag: 'a',
            style: {
              display: 'none'
            },
            attr: {
              href: url,
              download: 'export.svg'
            }
          }).addTo(document.body);

          a.click();
          a.remove();
        }
      });
    }
  });
}
function measureArial14TextWidth(text) {
  return TextMeasure/* default.measureWidth */.Z.measureWidth(text, 'Arial', 14);
}
function getGlobalBBox(svgElement) {
  var bbox = svgElement.getBBox();
  var matrix = svgElement.getCTM();
  var points = [svgElement.ownerSVGElement.createSVGPoint(), svgElement.ownerSVGElement.createSVGPoint(), svgElement.ownerSVGElement.createSVGPoint(), svgElement.ownerSVGElement.createSVGPoint()];
  points[0].x = bbox.x;
  points[0].y = bbox.y;
  points[1].x = bbox.x + bbox.width;
  points[1].y = bbox.y;
  points[2].x = bbox.x;
  points[2].y = bbox.y + bbox.height;
  points[3].x = bbox.x + bbox.width;
  points[3].y = bbox.y + bbox.height;
  points = points.map(function (point) {
    return point.matrixTransform(matrix);
  });
  var minX = Math.min(points[0].x, points[1].x, points[2].x, points[3].x);
  var minY = Math.min(points[0].y, points[1].y, points[2].y, points[3].y);
  var maxX = Math.max(points[0].x, points[1].x, points[2].x, points[3].x);
  var maxY = Math.max(points[0].y, points[1].y, points[2].y, points[3].y);
  return new Math_Rectangle/* default */.Z(minX, minY, maxX - minX, maxY - minY);
}
;// CONCATENATED MODULE: ./src/template.js
function translate(x, y) {
  return 'translate(' + x + ', ' + y + ')';
}
;
function rotate() {
  return 'rotate(' + Array.prototype.join.call(arguments, ',') + ')';
}
;
;// CONCATENATED MODULE: ./src/BaseChart.js




var BaseChart_ = src_VCore._;
var BaseChart_$ = src_VCore.$;

function BaseChart() {
  var _ = vchart._;
  var $ = vchart.$;

  var res = _({
    tag: 'svg',
    "class": 'base-chart',
    child: [{
      tag: 'g',
      attr: {
        id: 'contentBox'
      },
      child: 'g#content'
    }, {
      tag: 'path',
      "class": 'base-chart-white-mask',
      attr: {
        fill: 'white',
        stroke: 'white',
        'fill-rule': 'evenodd',
        d: 'M0,0  0,2000 2000,2000 2000,0zM100,0  0,200 200,200 200,0z'
      }
    }, 'axis', 'hscrollbar']
  });

  res.sync = res.afterAttached();
  res.$axis = $('axis', res);
  res.$whiteBoxMask = $('.base-chart-white-mask', res);
  res.$content = $('g#content', res);
  res.eventHandler = OOP/* default.bindFunctions */.ZP.bindFunctions(res, BaseChart.eventHandler); // res.on('wheel', res.eventHandler.wheel);

  res.$hscrollbar = $('hscrollbar', res).on('scroll', res.eventHandler.scrollbarscroll);
  res.integerOnly = false;
  return res;
}

;
BaseChart.prototype.integerOnly = false;
BaseChart.eventHandler = {};

BaseChart.eventHandler.wheel = function (event) {
  var d = this.scrollBy(event.deltaY);

  if (d != 0) {
    event.preventDefault();
  }
};

BaseChart.eventHandler.scrollArrowsPressLeft = function (event) {
  this.scrollBy(-60);
};

BaseChart.eventHandler.scrollArrowsPressRight = function (event) {
  this.scrollBy(60);
};

BaseChart.eventHandler.scrollbarscroll = function (event) {
  this.scrollLeft = this.$hscrollbar.scrollLeft;
  event.preventDefault();
};

BaseChart.prototype.scrollBy = function (dX) {
  var scrollLeft = this.scrollLeft + dX / 5;
  var scrollLeft = Math.max(0, Math.min(this.oxContentLength - this.oxLength, scrollLeft));
  var deltaX = scrollLeft - this.scrollLeft;

  if (deltaX != 0) {
    this.scrollLeft = scrollLeft;
    this.$hscrollbar.scrollLeft = scrollLeft;
  }

  return deltaX;
};

BaseChart.prototype._createOyValues = function (minValue, step, segmentCount, extendOY) {
  var child = Array(segmentCount + 1 + (extendOY ? 1 : 0)).fill(0).map(function (u, i) {
    var value;

    if (extendOY) {
      if (i == 0) {
        value = 0;
      } else {
        value = minValue + (i - 1) * step;
      }
    } else {
      value = minValue + i * step;
    }

    return {
      tag: 'text',
      attr: {
        x: '-14',
        y: '0',
        'text-anchor': 'end'
      },
      props: {
        innerHTML: this.numberToString(value)
      }
    };
  }.bind(this));
  return vchart._({
    tag: 'g',
    child: child
  });
};

BaseChart.prototype._createOYSegmentLines = function (n) {
  var _ = vchart._;

  var res = _({
    tag: 'g',
    child: Array(n).fill('path.vchart-segment-line')
  });

  return res;
};

BaseChart.prototype.numberToString = function (value) {
  return value.toString();
};

BaseChart.prototype.mapOYValue = function (val) {
  return -this.paddingnAxisBottom + (this.extendOY ? -this.oySegmentLength : 0) - map(val, this.oyMinValue, this.oyMaxValue, 0, this.oyLength - (this.extendOY ? this.oySegmentLength : 0));
};

BaseChart.prototype.preInit = function () {};

BaseChart.prototype.updateSize = function () {
  this.attr({
    width: this.canvasWidth + '',
    height: this.canvasHeight + '',
    viewBox: [0, 0, this.canvasWidth, this.canvasHeight].join(' ')
  });
};

BaseChart.prototype.updateOyValues = function () {
  this.oyLength = this.oxyBottom - 70 - this.paddingnAxisBottom;
  this.oySegmentLength = this.oyLength / (this.oySegmentCount + (this.extendOY ? 1 : 0));
  Array.prototype.forEach.call(this.$oyValues.childNodes, function (e, i) {
    e.attr({
      y: -i * this.oySegmentLength + 5 - this.paddingnAxisBottom,
      x: -10
    });
  }.bind(this));
  var oyValuesBox = this.$oyValues.getBBox();
  this.oxyLeft = Math.max(this.oxyLeft, oyValuesBox.width + 14, this.$oyName.getBBox().width);
  this.oxLength = this.oxLength || this.canvasWidth - this.oxyLeft - 50;
  this.$oyValues.attr('transform', 'translate(' + this.oxyLeft + ',' + this.oxyBottom + ')');
};

BaseChart.prototype.updateOYSegmentLines = function () {
  this.$oySegmentLines.attr('transform', 'translate(' + this.oxyLeft + ',' + this.oxyBottom + ')');
  Array.prototype.forEach.call(this.$oySegmentLines.childNodes, function (e, i) {
    moveHLine(e, -2, -i * this.oySegmentLength - this.paddingnAxisBottom, 4);
  }.bind(this));
};

BaseChart.prototype.updateBackComp = function () {
  this.$title.attr('x', this.canvasWidth / 2);
  this.updateOyValues();
  this.updateOYSegmentLines();
};

BaseChart.prototype.updateAxis = function () {
  this.$axis.attr('transform', translate(this.oxyLeft, this.oxyBottom));
  this.$axis.resize(this.canvasWidth - this.oxyLeft - 10, this.oxyBottom - 50);
  this.$oyName.attr({
    x: this.oxyLeft,
    y: 30,
    'text-anchor': 'end'
  });
  this.$whiteBoxMask.attr('d', 'M0,0  0,cvh cvw,cvh cvw,0zMleft,top  left,bottom right,bottom right,topz'.replace(/cvh/g, this.canvasHeight).replace(/cvw/g, this.canvasWidth).replace(/left/g, this.oxyLeft).replace(/top/g, 1).replace(/bottom/g, this.canvasHeight).replace(/right/g, this.canvasWidth - 10));
  this.$content.attr('transform', 'translate(' + this.oxyLeft + ',' + this.oxyBottom + ')');
  this.$oxName.attr({
    x: this.canvasWidth - this.$oxName.getBBox().width - 3,
    y: this.oxyBottom - 9
  });
};

BaseChart.prototype.updateFrontComp = function () {};

BaseChart.prototype.updateComp = function () {};

BaseChart.prototype.updateScrollArrows = function () {
  this.$scrollArrows.box.setPosition(this.oxyLeft + 7, this.oxyBottom - this.oyLength / 2);
  this.$scrollArrows.width = this.oxLength - 15;
  this.scrollLeft = this.scrollLeft + 0; //update

  this.$hscrollbar.resize(this.oxLength, 10);
  this.$hscrollbar.moveTo(this.oxyLeft, this.oxyBottom - 10);
  this.$hscrollbar.outterWidth = this.oxLength;
  this.$hscrollbar.innerWidth = this.oxContentLength;
};

BaseChart.prototype.update = function () {
  if (typeof this.canvasWidth != 'number') {
    this.canvasWidth = 300;
    this.autoWidth = true;
  }

  this.oxLength = 0; //init

  this.updateSize();
  this.updateBackComp();
  this.updateAxis();
  this.updateComp();
  this.updateScrollArrows();
  this.updateFrontComp();
  requestAnimationFrame(function () {
    if (this.autoWidth) {
      var requireWidth = this.canvasWidth + this.overflowOX;
      var proviceWidth = this.parentElement.getBoundingClientRect().width;
      this.canvasWidth = Math.max(Math.min(requireWidth, proviceWidth), 300);
      this.autoWidth = false;
      this.update();
    }
  }.bind(this));
};

BaseChart.prototype.initScroll = function () {
  this.$scrollArrows = vchart._('scrollarrow').addTo(this).on('pressleft', this.eventHandler.scrollArrowsPressLeft).on('pressright', this.eventHandler.scrollArrowsPressRight);
};

BaseChart.prototype.preInit = function () {
  this.canvasWidth = 900;
  this.canvasHeight = 600;
  this.paddingnAxisBottom = 0;
  this.maxSegment = 9;
  this.oyMaxValue = 10;
  this.oyMinValue = 0;
  this.valueName = '';
  this.keyName = '';
  this.colorTable = ['#821616', ' #824116', '#826C16', '#6C8216', '#418216', '#168216', '#168241', '#16826C', '#166C82', '#164182', '#161682', '#411682', '#6C1682', '#82166C', '#821641'];
};

BaseChart.prototype.processMinMax = function () {
  this.minValue = 0;
  this.maxValue = 10;
};

BaseChart.prototype.beautifyMinMax = function () {
  if (!(this.maxValue >= this.minValue)) {
    this.maxValue = 10;
    this.minValue = 0;
  }

  if (this.maxValue == this.minValue) this.maxValue += this.maxSegment;
  var btSgmt = calBeautySegment(this.maxSegment, this.minValue, this.maxValue, this.integerOnly);
  this.oySegmentCount = btSgmt.segmentCount;
  this.oyMinValue = btSgmt.minValue;
  this.oyMaxValue = btSgmt.maxValue;
  this.extendOY = !!(this.zeroOY && this.oyMinValue > 0);
  this.oyStep = btSgmt.step;
  this.oxyLeft = 20;
  this.oxyBottom = this.canvasHeight - 40;
};

BaseChart.prototype.initBackComp = function () {
  this.$oyValues = this._createOyValues(this.oyMinValue, this.oyStep, this.oySegmentCount, this.extendOY).addTo(this);
  this.$oySegmentLines = this._createOYSegmentLines(this.oySegmentCount + 1 + (this.extendOY ? 1 : 0)).addTo(this);
  this.$title = helper_text(this.title || '', 0, 19, 'base-chart-title').attr('text-anchor', 'middle').addTo(this);
  this.$oyName = helper_text(this.valueName || '', 0, 0, 'base-chart-oxy-text').addTo(this);
  this.$oxName = helper_text(this.keyName || '', 0, 0, 'base-chart-oxy-text').addTo(this);
};

BaseChart.prototype.initComp = function () {};

BaseChart.prototype.initFrontComp = function () {};

BaseChart.prototype.initScroll = function () {
  this.$scrollArrows = vchart._('scrollarrow').addTo(this).on('pressleft', this.eventHandler.scrollArrowsPressLeft).on('pressright', this.eventHandler.scrollArrowsPressRight);
};

BaseChart.prototype.init = function (props) {
  for (var key in props) {
    if (props[key] === undefined) delete props[key];
  }

  this.preInit();
  this["super"](props);
  this.processMinMax();
  this.beautifyMinMax();
  this.initBackComp();
  this.initComp();
  this.initFrontComp();
  this.initScroll();
  this.sync = this.sync.then(this.update.bind(this));
};

BaseChart.property = {};
BaseChart.property.scrollLeft = {
  set: function set(value) {
    this._scrollLeft = value || 0;
    this.$content.attr('transform', 'translate(' + (this.oxyLeft - this.scrollLeft) + ',' + this.oxyBottom + ')');

    if (this.scrollLeft > 0.001) {
      this.$scrollArrows.$leftArrow.removeStyle('display');
    } else {
      this.$scrollArrows.$leftArrow.addStyle('display', 'none');
    }

    if (this.oxContentLength - this.oxLength > this.scrollLeft + 0.001) {
      this.$scrollArrows.$rightArrow.removeStyle('display');
    } else {
      this.$scrollArrows.$rightArrow.addStyle('display', 'none');
    }
  },
  get: function get() {
    return this._scrollLeft || 0;
  }
};
BaseChart.property.overflowOX = {
  get: function get() {
    return Math.max(0, this.oxContentLength - this.oxLength);
  }
};
BaseChart.property.showInlineValue = {
  set: function set(value) {
    if (value) {
      this.addClass('vchart-show-inline-value');
    } else {
      this.removeClass('vchart-show-inline-value');
    }
  },
  get: function get() {
    return this.containsClass('vchart-show-inline-value');
  }
};
src_VCore.creator.basechart = BaseChart;
/* harmony default export */ const src_BaseChart = (BaseChart);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/utils.js
var utils = __webpack_require__(1477);
;// CONCATENATED MODULE: ./src/ToolTip.js




function TooltipSession(content, x, y) {
  this.content = content;
  this.x = (0,utils.isRealNumber)(x) ? x : 0;
  this.y = (0,utils.isRealNumber)(y) ? y : 0;
  this.open();
}
/**
 *
 * @type {{$ctn: AElement, $anchor: AElement, holder: TooltipSession}}
 */


TooltipSession.prototype.share = {
  $anchor: null,
  $ctn: null,
  holder: null
};

TooltipSession.prototype._prepare = function () {
  if (this.share.$anchor) return;
  this.share.$ctn = (0,ACore._)({
    "class": "vchart-tooltip-container"
  });
  this.share.$anchor = (0,ACore._)({
    "class": 'vchart-tooltip-anchor',
    child: this.share.$ctn
  });
};

TooltipSession.prototype.open = function () {
  var _this = this;

  this._prepare();

  if (this.share.holder === this) return;

  if (this.share.holder) {
    this.share.holder.close();
  }

  this.share.holder = this;
  this.share.$anchor.addStyle({
    visibility: 'hidden',
    left: this.x + 'px',
    top: this.y + 'px'
  }).addTo(document.body);
  this.share.$ctn.clearChild();

  if (typeof this.content === "string") {
    this.content.split(/\r?\n/).forEach(function (line, i) {
      if (i) (0,ACore._)('br').addTo(_this.share.$ctn);

      (0,ACore._)({
        tag: 'span',
        child: {
          text: line
        }
      }).addTo(_this.share.$ctn);
    });
  } else {
    console.error("Not support tooltip.content ", this.content);
  }

  var bound = this.share.$ctn.getBoundingClientRect();
  var screenBound = (0,Dom/* getScreenSize */.tE)();

  if (this.y < bound.height) {
    this.share.$ctn.addStyle('top', '0').addStyle('bottom', 'unset');
  } else {
    this.share.$ctn.removeStyle('top').removeStyle('bottom');
  }

  if (this.x + bound.width > screenBound.width) {
    this.share.$ctn.addStyle('right', '0').addStyle('left', 'unset');
  } else {
    this.share.$ctn.removeStyle('right').removeStyle('left');
  }

  this.share.$anchor.removeStyle('visibility');
};

TooltipSession.prototype.close = function () {
  if (this.share.holder !== this) return;
  this.share.holder = null;
  this.share.$ctn.clearChild();
  this.share.$anchor.remove();
};
/**
 * adapt old version
 * @param cb
 * @returns {TooltipSession}
 */


TooltipSession.prototype.then = function (cb) {
  if (typeof cb === "string") {
    cb(this);
  }

  return this;
};

function showTooltip(text, clientX, clientY) {
  return new TooltipSession(text, clientX, clientY);
}
function closeTooltip(token) {
  if (token && token.close) token.close();
}
;// CONCATENATED MODULE: ./src/HLineArrow.js





var HLineArrow_ = src_VCore._;
var HLineArrow_$ = src_VCore.$;
/***
 * @extends AElementNS
 * @constructor
 */

function HLineArrow() {
  this._length = 0;
  this.$line = HLineArrow_$('path.vchart-line-arrow-line', this);
  this.$arrow = HLineArrow_$('.vchart-line-arrow-rect', this);
  this.length = 0;
}

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

HLineArrow.render = function () {
  return HLineArrow_({
    "class": 'vchart-line-arrow',
    child: ['path.vchart-line-arrow-line', {
      tag: 'path',
      "class": 'vchart-line-arrow-rect',
      attr: {
        d: 'm-6.8 -5v10l6.8 -5z'
      }
    }]
  });
};

HLineArrow.prototype.resize = function (length) {
  if (typeof length !== 'number') length = parseFloat(length + '');
  length = length || 0;
  if (length < 0) length = 0;
  this._length = length;
  this.$arrow.attr('transform', translate(length, 0));
  moveHLine(this.$line, 0, 0, length);
  this._length = length;
};

HLineArrow.property = {};
HLineArrow.property.length = {
  set: function set(value) {
    this.resize(this._length);
  },
  get: function get() {
    return this._length;
  }
};
src_VCore.creator.hlinearrow = HLineArrow;
/* harmony default export */ const src_HLineArrow = ((/* unused pure expression or super */ null && (HLineArrow)));
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Draggable.js
var Draggable = __webpack_require__(5611);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Hanger.js
var Hanger = __webpack_require__(655);
;// CONCATENATED MODULE: ./src/HScrollBar.js






var HScrollBar_ = src_VCore._;
var HScrollBar_$ = src_VCore.$;
/**
 * @augments Hanger
 * @augments GContainer
 * @constructor
 */

function HScrollBar() {
  var res = HScrollBar_({
    tag: Hanger/* default */.Z,
    elt: this
  });

  this._scrollLeft = 0;
  this.on('predrag', res.eventHandler.predrag).on('drag', res.eventHandler.drag);
  this.$bar = HScrollBar_$('.vchart-vscrollbar-bar', this);
  this.$button = HScrollBar_$('.vchart-vscrollbar-button', this);
}

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

HScrollBar.render = function () {
  return HScrollBar_({
    tag: 'gcontainer',
    extendEvent: ['scroll'],
    "class": 'vchart-vscrollbar',
    child: [{
      tag: 'rect',
      "class": 'vchart-vscrollbar-bar',
      attr: {
        x: '0',
        y: '0'
      }
    }, {
      tag: 'rect',
      "class": 'vchart-vscrollbar-button'
    }]
  });
};

HScrollBar.eventHandler = {};

HScrollBar.eventHandler.predrag = function (event) {
  var bBox = this.$bar.getBBox();
  var bound = this.$bar.getBoundingClientRect();

  if (event.target !== this.$button) {
    var centerOfset = Math.max(0, Math.min(1, (event.clientX - bound.left) / bound.width));
    var newScrollLeft = centerOfset * this.innerWidth - this.outterWidth / 2;
    newScrollLeft = Math.max(0, Math.min(this.innerWidth - this.outterWidth, newScrollLeft));
    this._scrollLeft = newScrollLeft;
    this.updateButtonPosition();
  }

  this.__predragScrollLeft = this._scrollLeft;
  this.emit('scroll', event, this);
};

HScrollBar.eventHandler.drag = function (event) {
  event.preventDefault();
  var bBox = this.$bar.getBBox();
  var bound = this.$bar.getBoundingClientRect();
  var scaleX = bBox.width / bound.width * this.innerWidth / this.outterWidth;
  event.moveDX = event.currentPoint.sub(event.startingPoint).x;
  var newScrollLeft = this.__predragScrollLeft + event.moveDX * scaleX;
  newScrollLeft = Math.max(0, Math.min(this.innerWidth - this.outterWidth, newScrollLeft));
  this._scrollLeft = newScrollLeft;
  this.updateButtonPosition();
  this.emit('scroll', event, this);
};

HScrollBar.prototype.updateButtonPosition = function () {
  var maxButtonX = (this.innerWidth - this.outterWidth) / this.innerWidth * this.width;
  var buttonX = this.scrollLeft / this.innerWidth * this.width;
  if (maxButtonX < 0) maxButtonX = 0;
  if (!(buttonX >= 0)) buttonX = 0;
  if (!(buttonX <= maxButtonX)) buttonX = maxButtonX;
  this.$button.attr('x', buttonX + '');
};

HScrollBar.prototype.updateView = function () {
  if (this.outterWidth >= this.innerWidth) {
    this.addClass('vchart-hidden');
  } else {
    this.removeClass('vchart-hidden');
    this.$bar.attr({
      rx: this.height / 2.5 + '',
      ry: this.height / 2.5 + ''
    });
    var buttonWidth = 1 / (this.innerWidth / this.outterWidth) * this.width;
    if (!(buttonWidth >= 0 && buttonWidth < Infinity)) buttonWidth = 0;
    this.$button.attr('width', buttonWidth + '');
    this.$button.attr({
      height: this.height * 0.8 + '',
      y: this.height / 10 + '',
      rx: this.height / 2.5 + '',
      ry: this.height / 2.5 + ''
    });
    this.updateButtonPosition();
  }
};

HScrollBar.property = {
  width: {
    set: function set(value) {
      this.$bar.attr('width', value + '');
      this.updateView();
    },
    get: function get() {
      var r = (this.$bar.attr('width') || '0').replace(/px|em|rem/g, '');
      var c = parseFloat(r);
      if (c > 0) return c;
      return 0;
    }
  },
  height: {
    set: function set(value) {
      this.$bar.attr('height', value + '');
      this.updateView();
    },
    get: function get() {
      var r = (this.$bar.attr('height') || '0').replace(/px|em|rem/g, '');
      var c = parseFloat(r);
      if (c > 0) return c;
      return 0;
    }
  },
  innerWidth: {
    set: function set(value) {
      if (value >= 0) {
        this._innerWidth = value;
        this.updateView();
      }
    },
    get: function get() {
      return this._innerWidth || 0;
    }
  },
  outterWidth: {
    set: function set(value) {
      if (value >= 0) {
        this._outterWidth = value;
        this.updateView();
      }
    },
    get: function get() {
      return this._outterWidth || 0;
    }
  },
  scrollLeft: {
    set: function set(value) {
      value = Math.max(0, value);
      value = Math.min(value, this.innerWidth - this.outterWidth);
      this._scrollLeft = value;
      this.updateView();
    },
    get: function get() {
      return this._scrollLeft || 0;
    }
  }
};

HScrollBar.prototype.resize = function (width, height) {
  this.height = height;
  this.width = width;
};

HScrollBar.prototype.moveTo = function (x, y) {
  this.attr('transform', translate(x, y));
};

src_VCore.creator.hscrollbar = HScrollBar;
/* harmony default export */ const src_HScrollBar = ((/* unused pure expression or super */ null && (HScrollBar)));
// EXTERNAL MODULE: ./src/style/base.css
var base = __webpack_require__(9957);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DomSignal.js
var DomSignal = __webpack_require__(5150);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/ResizeBox.js
var ResizeBox = __webpack_require__(4860);
// EXTERNAL MODULE: ./src/style/chartresizebox.css
var chartresizebox = __webpack_require__(4601);
;// CONCATENATED MODULE: ./src/ChartResizeBox.js





var ChartResizeBox_ = ACore/* default._ */.Z._;
var ChartResizeBox_$ = ACore/* default.$ */.Z.$;
/***
 * @augments AElement
 * @extends ResizeBox
 * @constructor
 */

function ChartResizeBox() {
  /***
   *
   * @type {null|AElement}
   */
  this.$target = null;
  this._listenInterval = -1;
  this.$attachhook = ChartResizeBox_$('attachhook', this);
  this.updateSize = this.updateSize.bind(this);
  this.$attachhook.requestUpdateSize = this.updateSize;
  this.$attachhook.cancelWaiting();
  this.$trackedScrollers = [];
  this.canResize = true;
  this._endMoveTime = 0;
  this.on({
    beginmove: this.eventHandler.crbBeginMove,
    moving: this.eventHandler.crbMove,
    endmove: function endmove() {
      this._endMoveTime = new Date().getTime();
    }
  });
}

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

ChartResizeBox.render = function () {
  return ChartResizeBox_({
    tag: ResizeBox/* default.tag */.Z.tag,
    "class": 'vc-chart-resize-box',
    child: ['attachhook']
  }, true);
};

ChartResizeBox.prototype.isAttached = function (target) {
  return this.$target === target;
};

ChartResizeBox.prototype.isAfterMoving = function () {
  return new Date().getTime() - this._endMoveTime < 5;
};

ChartResizeBox.prototype.attachTo = function (target) {
  if (this.$target === target) return;
  this.detach();
  if (!target || !(0,Dom/* isDomNode */.mV)(target)) return;
  ResizeSystem/* default.add */.Z.add(this.$attachhook);
  this.$target = target;
  this.sponsorElement = target;
  var pe = target.parentElement;

  if (pe) {
    pe.appendChild(this);
  }

  while (pe) {
    if (pe.addEventListener) {
      pe.addEventListener('scroll', this.updateSize);
      this.$trackedScrollers.push(pe);
    } else break;

    pe = pe.parentElement;
  }

  document.addEventListener('scroll', this.updateSize);
  this.$trackedScrollers.push(document);
  this.updateSize();
};

ChartResizeBox.prototype.detach = function () {
  clearInterval(this._listenInterval);
  this._listenInterval = -1;

  while (this.$trackedScrollers.length > 0) {
    this.$trackedScrollers.pop().removeEventListener('scroll', this.updateSize);
  }

  this.remove();
  this.$target = null;
};

ChartResizeBox.prototype.updateSize = function () {
  var target = this.$target;
  if (!target) return;
  var bound = target.getBoundingClientRect();
  this.addStyle({
    left: bound.left + 'px',
    top: bound.top + 'px',
    width: bound.width + 'px',
    height: bound.height + 'px'
  });
};

ChartResizeBox.eventHandler = {};

ChartResizeBox.eventHandler.crbBeginMove = function (event) {
  this._targetInitBound = this.$target.getBoundingClientRect();
};

ChartResizeBox.eventHandler.crbMove = function (event) {
  if (event.option.right) {
    this.$target.addStyle('width', this._targetInitBound.width + event.clientDX + 'px');
  }

  if (event.option.bottom) {
    this.$target.addStyle('height', this._targetInitBound.height + event.clientDY + 'px');
  }

  ResizeSystem/* default.update */.Z.update();
};

ACore/* default.install */.Z.install(ChartResizeBox);
/* harmony default export */ const src_ChartResizeBox = (ChartResizeBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/colorpicker/SelectColorSchemeMenu.js
var SelectColorSchemeMenu = __webpack_require__(5830);
// EXTERNAL MODULE: ./src/style/note.css
var note = __webpack_require__(2859);
;// CONCATENATED MODULE: ./src/KeyNote.js




/**
 * @typedef KeyNoteItem
 * @property {string} text
 * @property {null|"rect"|"point"|"line"} noteType
 * @property {string|Color} color
 * @property {string} key
 */

/**
 * @extends {GContainer}
 * @constructor
 */

function KeyNote() {
  this._noteType = null;
  this._text = '';
  this._color = 'black';
  this.$type = null;
  this.$hitbox = VCore_$('.vc-note-hit', this);
  this.$text = VCore_$('.vc-note-text', this);
}

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

KeyNote.render = function () {
  // var fontSize = AElement.prototype.getComputedStyleValue.call(document.body, 'font-size');
  // fontSize = parseFloat((fontSize || '14px').replace('px', ''));
  var fontSize = 14;
  return VCore_({
    tag: svg_GContainer,
    "class": 'vc-note',
    child: [{
      tag: 'rect',
      "class": 'vc-note-hit',
      attr: {
        x: 0,
        y: 0,
        // width: measureArial14TextWidth(),
        height: fontSize + ''
      }
    }, {
      tag: 'text',
      "class": 'vc-note-text',
      attr: {
        x: Math.ceil(30 * fontSize / 14) + '',
        y: Math.ceil(11 * fontSize / 14) + ''
      }
    }]
  });
};

KeyNote.prototype.typeHandlers = {};
KeyNote.prototype.typeHandlers["null"] = {
  view: function view() {
    // var fontSize = getComputedStyle(document.body).getPropertyValue('font-size');
    // fontSize = parseFloat((fontSize || '14px').replace('px', ''));
    var fontSize = 14;
    this.$type = VCore_({
      tag: 'rect',
      "class": 'vc-note-rect',
      attr: {
        x: 0,
        y: 0,
        width: Math.ceil(24 * fontSize / 14) + '',
        height: fontSize + ''
      }
    });
  },
  color: function color(value) {
    this.$type.addStyle('fill', value);
  }
};
KeyNote.prototype.typeHandlers.rect = KeyNote.prototype.typeHandlers["null"];
KeyNote.prototype.typeHandlers.rhombus = {
  view: function view() {
    var fontSize = 14;
    this.$rhombus = VCore_({
      tag: 'rect',
      "class": 'vc-note-rect',
      attr: {
        x: -fontSize / 2.8,
        y: -fontSize / 2.8,
        width: fontSize / 1.4,
        height: fontSize / 1.4,
        transform: 'rotate(45)'
      }
    });
    this.$type = VCore_({
      tag: svg_GContainer,
      child: this.$rhombus
    });
    this.$type.box.x = Math.ceil(24 * fontSize / 14 / 2);
    this.$type.box.y = Math.ceil(fontSize / 2);
  },
  color: function color(value) {
    this.$rhombus.addStyle('fill', value);
  }
};
KeyNote.prototype.typeHandlers.point = {
  view: function view() {
    // var fontSize = getComputedStyle(document.body).getPropertyValue('font-size');
    // fontSize = parseFloat((fontSize || '14px').replace('px', ''));
    var fontSize = 14;
    this.$type = VCore_({
      tag: 'circle',
      "class": 'vc-note-point',
      style: {
        strokeWidth: 2,
        stroke: 'white'
      },
      attr: {
        cx: Math.ceil(10 * fontSize / 14) + '',
        cy: Math.ceil(7 * fontSize / 14) + '',
        r: Math.ceil(8 * fontSize / 14) + ''
      }
    });
  },
  color: function color(value) {
    this.$type.addStyle('fill', value);
  }
};
KeyNote.prototype.typeHandlers.line = {
  view: function view() {
    this.$type = VCore_({
      tag: 'path',
      "class": 'vc-note-line',
      attr: {
        d: 'M0 9 h24'
      }
    });
  },
  color: function color(value) {
    this.$type.addStyle('stroke', value);
  }
};
KeyNote.prototype.typeHandlers.stroke = KeyNote.prototype.typeHandlers.line;
KeyNote.property = {
  noteType: {
    set: function set(value) {
      if (!this.typeHandlers[value]) {
        value = null;
      }

      if (this._noteType === value) return;
      this._noteType = value;

      if (this.$type) {
        this.$type.remove();
        this.$type = null;
      }

      this.typeHandlers[value + ''].view.call(this);
      if (this.$type) this.typeHandlers[value + ''].color.call(this, this._color + '');
      this.addChildAfter(this.$type, this.$hitbox);
    },
    get: function get() {
      return this._noteType;
    }
  },
  text: {
    set: function set(value) {
      // var fontSize = getComputedStyle(document.body).getPropertyValue('font-size');
      // fontSize = parseFloat((fontSize || '14px').replace('px', ''));
      var fontSize = 14;
      value = value || '';
      this._text = value;
      this.$text.clearChild().addChild(VCore_({
        text: value
      }));
      var width = 30 * fontSize / 14 + measureArial14TextWidth(value);
      this.$hitbox.attr('width', 30 * fontSize / 14 + measureArial14TextWidth(value));
      this.box.width = width;
      this.box.height = Math.ceil(24 * fontSize / 14);
    },
    get: function get() {
      return this._text;
    }
  },
  color: {
    set: function set(value) {
      this._color = value;

      if (this.typeHandlers[this._noteType + ''] && this.$type) {
        this.typeHandlers[this._noteType + ''].color.call(this, value.toString());
      }
    },

    /**
     * @this {KeyNote}
     * @returns {*}
     */
    get: function get() {
      return this._color;
    }
  },
  key: {
    set: function set(value) {
      this.attr('data-key', value + '');
    },
    get: function get() {
      return this.attr('data-key');
    }
  }
};
src_VCore.install(KeyNote);
/* harmony default export */ const src_KeyNote = (KeyNote);
/**
 * @extends GContainer
 * @constructor
 */

function KeyNoteGroup() {
  this.extendStyle = {};
  /**
   *
   * @type {KeyNote[]}
   */

  this.$items = [];
  /**
   *
   * @type {KeyNoteItem[]}
   * @private
   */

  this._items = [];
  /**
   * @type {KeyNoteItem[]}
   * @name items
   * @memberof KeyNoteGroup#
   */
}
KeyNoteGroup.tag = 'KeyNodeGroup'.toLowerCase();

KeyNoteGroup.render = function () {
  return VCore_({
    tag: svg_GContainer
  });
};

KeyNoteGroup.prototype.updateSize = function () {
  var maxWidth = this.$items.reduce(function (ac, it) {
    return Math.max(ac, it.box.width);
  }, 0);
  maxWidth = Math.ceil(maxWidth) + 20;
  var col = Math.floor(this.box.width / maxWidth) || 1;
  var y = 0;
  var itemElt;
  var height = 0;

  for (var i = 0; i < this.$items.length; ++i) {
    itemElt = this.$items[i];
    itemElt.box.position = {
      x: maxWidth * (i % col),
      y: y
    };
    height = y + itemElt.box.height;

    if ((i + 1) % col === 0) {
      y += itemElt.box.height * 1.5;
    }
  }

  this.box.height = height;
}; //
// KeyNoteGroup.prototype.styleHandlers = {};
//
// KeyNoteGroup.prototype.styleHandlers.width = function (value) {
//     console.log(value)
// };
//
//
// KeyNoteGroup.prototype.addStyle = function (arg0, arg1) {
//     var handler;
//     if ((typeof arg0 === "string")) {
//         handler = this.styleHandlers[arg0] || this.styleHandlers[kebabCaseToCamelCase(arg0)]
//     }
//
//     if (handler) handler.call(this, arg1);
//     else AElementNS.prototype.addStyle.apply(this, arguments);
//     return this;
// };
// KeyNoteGroup.prototype.removeStyle = function (arg0) {
//     this.addStyle(arg0, '');
//     return this;
// };


KeyNoteGroup.property = {};
KeyNoteGroup.property.items = {
  /**
   * @this KeyNoteGroup
   * @param items
   */
  set: function set(items) {
    items = items || [];
    this._items = items;
    this.clearChild();
    this.$items = items.map(function (it) {
      return VCore_({
        tag: KeyNote,
        props: Object.assign({}, it)
      });
    });
    this.addChild(this.$items);
  },

  /**
   * @this KeyNoteGroup
   */
  get: function get() {
    return this._items;
  },
  configurable: true
};
// EXTERNAL MODULE: ./node_modules/absol-acomp/js/Tooltip.js
var Tooltip = __webpack_require__(5194);
// EXTERNAL MODULE: ./node_modules/absol/src/Code/noop.js
var noop = __webpack_require__(1432);
// EXTERNAL MODULE: ./node_modules/absol/src/DataStructure/Object.js
var DataStructure_Object = __webpack_require__(2722);
;// CONCATENATED MODULE: ./src/BChart.js
















var BChart_ = src_VCore._;
var BChart_$ = src_VCore.$;
/**
 *
 * @param chartElt
 * @constructor
 */

function ChartResizeController(chartElt) {
  this.chartElt = chartElt;
  this.ev_click = this.ev_click.bind(this);
  this.ev_clickOut = this.ev_clickOut.bind(this);
  this.chartElt.on('click', this.ev_click);
}

ChartResizeController.prototype.ev_click = function (event) {
  if (!this.chartElt.resizable) return;
  this.prepare();
  if (this.share.$resizebox.isAttached(this.chartElt)) return;
  this.share.$resizebox.attachTo(this.chartElt);
  document.addEventListener('click', this.ev_clickOut);
};

ChartResizeController.prototype.ev_clickOut = function (event) {
  if ((0,EventEmitter/* hitElement */.EY)(this.chartElt, event)) return;
  if (this.share.$resizebox.isAfterMoving()) return;
  if (this.share.$resizebox.isAttached(this.chartElt)) this.share.$resizebox.detach();
  document.removeEventListener('click', this.ev_clickOut);
};

ChartResizeController.prototype.revokeResource = function () {
  document.removeEventListener('click', this.ev_clickOut);
};

ChartResizeController.prototype.share = {
  /**
   * @type {ChartResizeBox}
   */
  $resizebox: null
};

ChartResizeController.prototype.prepare = function () {
  if (this.share.$resizebox) return;
  this.share.$resizebox = ACore/* default._ */.Z._({
    tag: src_ChartResizeBox.tag
  });
};
/**
 *
 * @param {BChart|SvgCanvas} elt
 * @constructor
 */


function ChartTitleController(elt) {
  var _this = this;

  this.elt = elt;
  Object.keys(this.constructor.prototype).filter(function (key) {
    return key.startsWith('ev_');
  }).forEach(function (key) {
    return _this[key] = _this[key].bind(_this);
  });
  this.elt.on('mouseover', this.ev_mouseEnter).on('mouseout', this.ev_mouseOut);
  this.titleElt = null;
  this.contentElt = ACore/* default._ */.Z._({
    tag: 'div',
    style: {
      font: '14px Arial'
    }
  }).on('mouseover', this.ev_mouseEnter).on('mouseout', this.ev_mouseOut);
  this.closeTO = -1;
  this.sessonToken = null;
}

ChartTitleController.prototype.revokeResource = function () {
  this.elt.off('mouseover', this.ev_mouseEnter).off('mouseout', this.ev_mouseOut);
  this.contentElt.off('mouseover', this.ev_mouseEnter).off('mouseout', this.ev_mouseOut);
  (0,utils.revokeResource)(this.contentElt);
  delete this.elt;
  delete this.contentElt;
  this.revokeResource = (0,noop/* default */.Z)();
};

ChartTitleController.prototype.ev_mouseEnter = function (event) {
  var _this2 = this;

  if ((0,EventEmitter/* hitElement */.EY)(this.contentElt, event)) {
    clearTimeout(this.closeTO);
    return;
  }

  var hasTileElt = this.findTitleElt(event.target);

  if (hasTileElt) {
    clearTimeout(this.closeTO);

    if (hasTileElt !== this.titleElt) {
      this.titleElt = hasTileElt;
      this.sessonToken = Tooltip/* default.show */.Z.show(this.titleElt, this.makeTooltipContent(this.titleElt.attr('title')));
    }
  } else {
    if (this.titleElt) {
      clearTimeout(this.closeTO);
      this.closeTO = setTimeout(function () {
        _this2.titleElt = null;
        Tooltip/* default.close */.Z.close(_this2.sessonToken);
      }, 500);
    }
  }
};

ChartTitleController.prototype.ev_mouseOut = function (event) {
  var _this3 = this;

  if (this.titleElt && (event.target === this.titleElt || event.target === this.contentElt || event.target.isDescendantOf && !event.target.isDescendantOf(this.titleElt) && !event.target.isDescendantOf(this.contentElt))) {
    clearTimeout(this.closeTO);
    this.closeTO = setTimeout(function () {
      _this3.titleElt = null;
      Tooltip/* default.close */.Z.close(_this3.sessonToken);
    }, 500);
  }
};

ChartTitleController.prototype.makeTooltipContent = function (text) {
  this.contentElt.clearChild();
  return ACore/* default._ */.Z._({
    elt: this.contentElt,
    child: text.split('\n').reduce(function (ac, cr) {
      ac.push({
        text: cr
      }, 'br');
      return ac;
    }, [])
  });
};

ChartTitleController.prototype.findTitleElt = function (elt) {
  while (elt && elt !== this.elt) {
    if (elt.attr && elt.attr('title')) return elt;
    elt = elt.parentElement;
  }

  return null;
};
/***
 * @extends SvgCanvas
 * @constructor
 */


function BChart() {
  var _this4 = this;

  this.resizable = false;
  this.ready = false;
  this.contentPadding = 5;
  this.title = '';
  this.domSignal = new DomSignal/* default */.ZP(BChart_$('sattachhook.vc-dom-signal', this));
  this.domSignal.on({
    updateContent: this.updateContent.bind(this)
  });
  /**
   * @type {GContainer}
   */

  this.$body = BChart_$('.vc-body', this);
  /**
   * @type {GContainer}
   */

  this.$noteCtn = BChart_$('.vc-note-ctn', this);
  this.domSignal.emit('updateContent');
  this.$title = BChart_$('.vc-title', this);
  this.computedData = {
    /***
     * @type {Array<{color: Color, type: ("stroke"|"rect"), text:string}>}
     */
    notes: []
  };
  this.resizeCtrl = new ChartResizeController(this);
  this.titleCtrl = new ChartTitleController(this);

  if (!this.numberToText) {
    OOP/* default.drillProperty */.ZP.drillProperty(this, this, 'numberToText', 'numberToString');
  }

  (0,DataStructure_Object/* observePropertyChanges */.U)(this, this.dataKeys, function () {
    if (_this4.domSignal) _this4.domSignal.emit('updateContent');
  });
  /**
   * @name colorScheme
   * @type {null|number}
   * @memberof BChart#
   */
}

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

BChart.render = function (data, o, dom) {
  var res = BChart_({
    tag: 'svgcanvas',
    "class": 'vc-chart',
    child: [{
      tag: 'gcontainer',
      "class": 'vc-body'
    }, {
      tag: 'text',
      "class": 'vc-title',
      child: {
        text: ''
      }
    }, {
      tag: 'gcontainer',
      "class": 'vc-note-ctn'
    }, 'sattachhook.vc-dom-signal']
  });

  var colorScheme = o && o.props && o.props.colorScheme;

  if ((0,utils.isNaturalNumber)(colorScheme)) {
    colorScheme = Math.max(0, Math.min(SelectColorSchemeMenu/* DEFAULT_CHART_COLOR_SCHEMES.length */.cF.length, colorScheme));
    res.attr('data-color-scheme', colorScheme + '');
  }

  return res;
};

BChart.prototype.dataKeys = ['title'];

BChart.prototype.revokeResource = function () {
  (0,DataStructure_Object/* unobservePropertyChanges */.i3)(this, this.dataKeys);
  (0,utils.revokeResource)(this.resizeCtrl);
  (0,utils.revokeResource)(this.titleCtrl);

  while (this.lastChild) {
    (0,utils.revokeResource)(this.lastChild);
    this.lastChild.remove();
  }

  this.revokeResource = noop/* default */.Z;
  this.computedData = null;
};

BChart.prototype.normalizeData = function () {};

BChart.prototype.computeData = function () {
  this.computedData.notes = this.computeNotes();
};

BChart.prototype._createNote = function () {
  var _this5 = this;

  var thisC = this;
  this.$noteCtn.clearChild();
  this.$notes = this.computedData.notes.map(function (note, idx) {
    var noteElt = BChart_({
      tag: src_KeyNote,
      props: {
        color: note.color,
        text: note.text,
        noteType: note.type
      },
      attr: {
        'data-idx': idx
      },
      on: {
        mouseenter: function mouseenter(event) {
          if (_this5.eventHandler['mouseEnterNote']) {
            _this5.eventHandler['mouseEnterNote'](idx, event);
          }
        },
        mouseleave: function mouseleave(event) {
          if (_this5.eventHandler['mouseLeaveNote']) {
            _this5.eventHandler['mouseLeaveNote'](idx, event);
          }
        }
      }
    });

    thisC.$noteCtn.addChild(noteElt);
    return noteElt;
  });
};

BChart.prototype._createTitle = function () {
  this.$title.firstChild.data = this.title || '';
};

BChart.prototype.createContent = function () {
  this.ready = true;

  this._createTitle();

  this._createNote();
};

BChart.prototype._updateNotesPosition = function () {
  var noteBoundWidth = this.$notes.reduce(function (ac, noteElt) {
    var box = noteElt.getBBox();
    return Math.max(ac, box.width);
  }, 0);
  var noteCtnMaxWidth = Math.max(this.box.width - this.contentPadding * 2, noteBoundWidth + 1);
  var x = 0;
  var y = 0;
  var pieceElt;

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

    if (x + noteBoundWidth > noteCtnMaxWidth) {
      x = 0;
      y += 20;
    }

    pieceElt.box.setPosition(x, y);
    x += noteBoundWidth + 15;
  }

  var noteCtnBound = this.$noteCtn.getBBox();
  this.$noteCtn.box.setPosition(this.box.width / 2 - noteCtnBound.width / 2, this.box.height - this.contentPadding - noteCtnBound.height);
};

BChart.prototype._updateTitlePosition = function () {
  this.$title.attr({
    x: this.box.width / 2,
    y: 18
  });
};

BChart.prototype.updateBodyPosition = function () {
  var titleHeight = this.$title.getBBox().height;
  var top = this.contentPadding;
  if (titleHeight > 0) top += titleHeight + 10;
  this.$body.box.setPosition(this.contentPadding, top);
  this.$body.box.setSize(this.box.width - this.contentPadding * 2, this.$noteCtn.box.y - top - 10);
};

BChart.prototype.updateContentPosition = function () {
  this._updateTitlePosition();

  this._updateNotesPosition();

  this.updateBodyPosition();
};
/***
 *
 * @returns {{color: Color, text: string, type: ("stroke"|"rect")}[]}
 */


BChart.prototype.computeNotes = function () {
  return [];
};

BChart.prototype.updateContent = function () {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('updateContent');
    return;
  }

  this.normalizeData();
  this.computeData();
  this.createContent();
  this.updateContentPosition();
};

BChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  if (!this.ready) return;
  this.updateContentPosition();
};

BChart.property = {};
BChart.property.canvasWidth = {
  get: function get() {
    return this.box.width;
  },
  set: function set(value) {
    this.addStyle('width', value + 'px');
    this.updateSize();
  }
};
BChart.property.canvasHeight = {
  get: function get() {
    return this.box.height;
  },
  set: function set(value) {
    this.addStyle('height', value + 'px');
    this.updateSize();
  }
};
BChart.property.showInlineValue = {
  set: function set(value) {
    if (value) {
      this.addClass('vc-show-inline-value');
    } else {
      this.removeClass('vc-show-inline-value');
    }
  },
  get: function get() {
    return this.containsClass('vc-show-inline-value');
  }
};
BChart.property.colorScheme = {
  set: function set(value) {
    this.attr('data-color-scheme', value + '');

    if (this.isDescendantOf(document.body)) {
      this.domSignal.emit("updateContent");
    }
  },
  get: function get() {
    var res = this.attr('data-color-scheme');
    if (res) res = parseInt(res, 10);
    if (!(0,utils.isNaturalNumber)(res)) res = null;
    return res;
  }
};
BChart.eventHandler = {};
src_VCore.install(BChart);
/* harmony default export */ const src_BChart = (BChart);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/int.js
var Math_int = __webpack_require__(7988);
;// CONCATENATED MODULE: ./src/LineChart.js














function LineChart() {
  this.titleCtrl = new ChartTitleController(this);
}

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

LineChart.render = function () {
  return VCore_('basechart', true);
};

LineChart.prototype.processMinMax = function () {
  this.minValue = this.lines.reduce(function (minValue, line) {
    return line.values.reduce(function (minValue, value) {
      if (!isNumber(value)) return minValue;
      return Math.min(minValue, value);
    }, minValue);
  }, 1000000000);
  this.maxValue = this.lines.reduce(function (maxValue, line) {
    return line.values.reduce(function (maxValue, value) {
      if (!isNumber(value)) return maxValue;
      return Math.max(maxValue, value);
    }, maxValue);
  }, -1000000000);

  if (this.minValue > this.maxValue) {
    this.minValue = 0;
    this.maxValue = this.minValue + 10;
  }
};

LineChart.prototype._createLineNote = function (name, color) {
  var res = VCore_('g');

  res.$line = hline(0, -5, this.noteLineLength, 'line-chart-line').addStyle('stroke', color).addTo(res);
  res.$name = helper_text(name, this.noteLineLength + 5, 0).addTo(res);
  return res;
};

LineChart.prototype._createKeyName = function (key) {
  var res = VCore_('g');

  res.$text = helper_text(key, 0, 5).addTo(res);
  return res;
};

LineChart.prototype._createLine = function (line, color) {
  var res = VCore_({
    tag: 'g',
    style: {
      fill: color,
      stroke: color
    }
  });

  res.$path = VCore_('shape.line-chart-line').addTo(res);
  res.$plots = line.values.map(function (u, i) {
    var plot = circle(0, 0, this.plotRadius, 'line-chart-plot').addTo(res);
    var text = line.texts && line.texts[i];
    if (text) plot.attr('title', text); // .on('mouseenter', function (event) {
    // var text = line.texts && line.texts[i];
    // if (!text) return;
    //
    // var currentBound = this.getBoundingClientRect();
    //
    // showTooltip(text, (currentBound.left + currentBound.right) / 2, (currentBound.top + currentBound.bottom) / 2).then(function (token) {
    //     this.once('mouseleave', function () {
    //         setTimeout(function () {
    //             closeTooltip(token);
    //         }, 1000);
    //     });
    // }.bind(this));
    // });

    if (line.plotColors && line.plotColors[i]) {
      plot.addStyle('fill', line.plotColors[i]);
    }

    return plot;
  }.bind(this));
  return res;
};

LineChart.prototype.initBackComp = function () {
  this["super"]();
  this.colors = this.lines.map(function (line, i, arr) {
    if (line.color) return line.color;
    return this.colorTable[Math.floor(this.colorTable.length * i / arr.length)];
  }.bind(this));
  this.$lineNotes = this.lines.map(function (line, i) {
    return this._createLineNote(line.name, this.colors[i]).addTo(this);
  }.bind(this));
  this.$keyNames = this.keys.map(function (key) {
    return this._createKeyName(key).addTo(this.$content);
  }.bind(this));
};

LineChart.prototype.updateBackComp = function () {
  this["super"]();
  this.oxyBottom = this.canvasHeight - 25;
  var lineNoteWidth = this.$lineNotes.reduce(function (lineNoteWidth, $lineNote) {
    return lineNoteWidth + $lineNote.getBBox().width + 15;
  }.bind(this), 0);
  this.$lineNotes.reduce(function (x, $lineNote) {
    $lineNote.attr('transform', translate(x, this.canvasHeight - 5));
    return x + $lineNote.getBBox().width + 15;
  }.bind(this), (this.canvasWidth - lineNoteWidth) / 2);
  var maxKeyNameWidth = this.$keyNames.reduce(function (w, $keyName) {
    return Math.max(w, $keyName.$text.getBBox().width);
  }, 0);
  this.oxSegmentLength = this.oxLength / this.keys.length;
  this.oxContentLength = this.oxLength;

  if (this.oxSegmentLength < maxKeyNameWidth + this.keyPaddingH * 2) {
    this.rotateText = true;
  } else if (this.minOXSegmentLength > this.oxSegmentLength) {
    this.oxSegmentLength = this.minOXSegmentLength;
    this.rotateText = true;
    this.oxContentLength = this.oxSegmentLength * this.keys.length;
  }

  if (this.rotateText) {
    this.$keyNames.forEach(function (e, i) {
      e.attr('transform', translate((i + 0.5) * this.oxSegmentLength - 5, 12));
      e.$text.attr('transform', rotate(45));
    }.bind(this));
    this.oxyBottom -= maxKeyNameWidth / 1.4 + 12;
  } else {
    this.$keyNames.forEach(function (e, i) {
      e.attr('transform', translate((i + 0.5) * this.oxSegmentLength, 12));
      e.$text.attr('text-anchor', 'middle');
    }.bind(this));
    this.oxyBottom -= 30;
  } //reupdate because update oxybottom


  this["super"]();
};

LineChart.prototype.initComp = function () {
  this.$lines = this.lines.map(function (line, i) {
    return this._createLine(line, this.colors[i]).addTo(this.$content);
  }.bind(this));
};

LineChart.prototype.updateComp = function () {
  this.$lines.map(function ($line, i) {
    var line = this.lines[i];
    $line.$plots.forEach(function ($plot, j) {
      $plot.attr('display');
      var value = line.values[j];

      if (isNumber(value)) {
        $plot.attr({
          cx: this.oxSegmentLength * (j + 0.5),
          cy: this.mapOYValue(value)
        });
      } else {
        $plot.attr('display', 'none');
      }
    }.bind(this));
    $line.$path.begin();
    line.values.reduce(function (state, value, j) {
      if (line.length == 1) {
        if (!isNumber(value)) return 'NOT_START';
        var y = this.mapOYValue(value);
        var x = this.oxSegmentLength * j;
        $line.$path.moveTo(x, y);
        x = this.oxSegmentLength * (j + 1);
        $line.$path.lineTo(x, y);
        return "IN_LINE";
      }

      if (state == "NOT_START") {
        if (!isNumber(value)) return 'NOT_START';
        var y = this.mapOYValue(value);
        var x = this.oxSegmentLength * (j + 0.5);
        $line.$path.moveTo(x, y);
        return 'IN_LINE';
      } else if (state == 'IN_LINE') {
        if (!isNumber(value)) return 'NOT_START';
        var y = this.mapOYValue(value);
        var x = this.oxSegmentLength * (j + 0.5);
        $line.$path.lineTo(x, y);
        return 'IN_LINE';
      }

      return ac;
    }.bind(this), "NOT_START");
    $line.$path.end();
  }.bind(this));
};

LineChart.prototype.preInit = function () {
  this["super"]();
  this.rotateText = true;
  this.noteLineLength = 40;
  this.plotRadius = 6;
  this.keyPaddingH = 4;
  this.minOXSegmentLength = 25;
  this.colorTable = ['#821616', ' #824116', '#826C16', '#6C8216', '#418216', '#168216', '#168241', '#16826C', '#166C82', '#164182', '#161682', '#411682', '#6C1682', '#82166C', '#821641'];
  this.lines = [];
};

src_VCore.install(LineChart);
/* harmony default export */ const src_LineChart = (LineChart);
/**
 * @extends SvgCanvas
 * @constructor
 */

function LineChart2() {
  this.titleCtrl = new ChartTitleController(this);
  this.$title = VCore_$('.vc-title', this);
  /**
   *
   * @type {KeyNoteGroup}
   */

  this.$keyNoteGroup = VCore_$(KeyNoteGroup.tag, this);
  this.$oyLabelCtn = VCore_$('.vc-oy-label-ctn', this);
  this.$body = VCore_$('.vc-body', this);
  this.$keyCtn = VCore_$('.vc-key-ctn', this);
  this.$oxy = VCore_$('.vc-oxy', this);
  this.$oxyArrow = VCore_$('.vc-oxy-arrow', this);
  this.$content = VCore_$('.vc-content', this);
  this.$valueName = VCore_$('.vc-value-name', this);
  this.$keyName = VCore_$('.vc-key-name', this);
  this.$lines = [];
  this.cpData = {
    min: 0,
    max: 1,
    oyLabelLength: 0,
    keyNameWidth: 0,
    valueNameWidth: 0
  };
  this.$keys = [];
  /**
   * @type {{name: string, values: number[], texts: string[], color: string, plotColors: (string|Color)[]}[]}
   * @name lines
   * @memberof LineChart2#
   */

  /**
   * * @type {string[]}
   * @name keys
   */

  /**
   * * @type {boolean}
   * @name zeroOY
   * @memberof LineChart2#
   */

  /**
   * * @type {string}
   * @name keyName
   * @memberof LineChart2#
   */

  /**
   * * @type {string}
   * @name valueName
   * @memberof LineChart2#
   */
}
LineChart2.tag = 'LineChart2'.toLowerCase();

LineChart2.render = function () {
  return VCore_({
    tag: svg_SvgCanvas,
    "class": ['vc-chart', 'vc-line-chart'],
    child: [{
      tag: 'text',
      "class": 'vc-title',
      child: {
        text: ""
      }
    }, {
      tag: svg_GContainer,
      "class": 'vc-body',
      child: [{
        tag: 'path',
        "class": 'vc-oxy'
      }, {
        tag: 'path',
        "class": 'vc-oxy-arrow'
      }, {
        tag: 'text',
        "class": 'vc-value-name',
        child: {
          text: ''
        }
      }, {
        tag: 'text',
        "class": 'vc-key-name',
        child: {
          text: ''
        }
      }, {
        tag: svg_GContainer,
        "class": 'vc-oy-label-ctn'
      }, {
        tag: svg_GContainer,
        "class": 'vc-key-ctn'
      }, {
        tag: svg_GContainer,
        "class": 'vc-content'
      }]
    }, {
      tag: KeyNoteGroup
    }]
  });
};

LineChart2.prototype.colorTable = ['#821616', ' #824116', '#826C16', '#6C8216', '#418216', '#168216', '#168241', '#16826C', '#166C82', '#164182', '#161682', '#411682', '#6C1682', '#82166C', '#821641'];
LineChart2.prototype.paddingContent = 5;
LineChart2.prototype.plotRadius = 6;
LineChart2.prototype.integerOnly = false;

LineChart2.prototype.numberToString = function (value) {
  return (0,Math_int.numberToString)(value);
};

LineChart2.prototype.requestUpdate = function () {
  var _this = this;

  if (this.pendingUpdate) return;
  this.pendingUpdate = true;
  setTimeout(function () {
    _this.updateContent();

    _this.updatePosition();
  });
};

LineChart2.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  this.updatePosition();
};

LineChart2.prototype.computeData = function () {
  var cpData = this.cpData;
  var lines = this.lines || [];
  cpData.max = lines.reduce(function (ac, cr) {
    var values = cr.values || [];
    return values.reduce(function (ac2, cr2) {
      return Math.max(ac2, cr2);
    }, ac);
  }, this.zeroOY ? 0 : -1000000000);
  cpData.min = lines.reduce(function (ac, cr) {
    var values = cr.values || [];
    return values.reduce(function (ac2, cr2) {
      return Math.min(ac2, cr2);
    }, ac);
  }, this.zeroOY ? 0 : 1000000000);

  if (cpData.min > cpData.max) {
    cpData.min = 0;
    cpData.max = 1;
  } else if (cpData.min === cpData.max) {
    cpData.max = cpData.min + 1;
  }

  cpData.oyLabelLength = Math.max((cpData.max + '').length, (cpData.min + '').length);
  cpData.keyNameWidth = 0;

  if (this.keyName) {
    cpData.keyNameWidth = TextMeasure/* default.measureWidth */.Z.measureWidth(this.keyName, TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14);
  } else {
    cpData.keyNameWidth = 0;
  }

  cpData.keyNameWidth = Math.round(cpData.keyNameWidth);

  if (this.valueName) {
    cpData.valueNameWidth = TextMeasure/* default.measureWidth */.Z.measureWidth(this.valueName, TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14);
  } else {
    cpData.valueNameWidth = 0;
  }

  cpData.valueNameWidth = Math.round(cpData.valueNameWidth);
};

LineChart2.prototype.makeLine = function (lineData, i) {
  var _this2 = this;

  var color = lineData.color || this.colorTable[i % this.colorTable.length];
  var lighterColor = Color/* default.parse */.Z.parse(color + '');
  var hsla = lighterColor.toHSLA();
  hsla[1] += 0.2;
  hsla[2] += 0.2;
  if (hsla[1] > 0.8) hsla[1] = 0.8;
  if (hsla[2] > 1) hsla[2] = 1;
  lighterColor = Color/* default.fromHSLA */.Z.fromHSLA(hsla[0], hsla[1], hsla[2], 0.3);
  var values = lineData.values || [];

  var res = VCore_({
    "class": 'vc-line',
    style: {
      '--color': color + '',
      '--lighter-color': lighterColor + ''
    },
    child: [{
      tag: 'path',
      "class": 'vc-line-path'
    }, {
      tag: 'path',
      "class": 'vc-line-hit-path'
    }]
  });

  var plotEltArr = values.map(function (value, i) {
    var text = lineData.texts && lineData.texts[i];
    var plotColor = null;

    if (lineData.plotColors && lineData.plotColors.length > 0) {
      plotColor = lineData.plotColors[i];
    }

    var plotElt = VCore_({
      tag: 'circle',
      "class": 'vc-plot',
      attr: {
        r: _this2.plotRadius,
        cy: 0,
        cx: 0
      }
    });

    if (text) plotElt.attr('title', text);

    if (plotColor) {
      plotElt.addStyle('--color', plotColor + '');
    }

    return plotElt;
  });
  res.addChild(plotEltArr);
  var linePathElt = VCore_$('.vc-line-path', res);
  var lineHitPathElt = VCore_$('.vc-line-hit-path', res);

  res.updatePosition = function () {
    var width = _this2.$body.box.width;
    var height = _this2.$body.box.height;
    var nCol = _this2.$keys.length;
    var turtle = new controller_Turtle();
    var value;
    var x, y;
    var sm = _this2.cpData.sm;

    for (var i = 0; i < nCol; ++i) {
      if (i >= values.length) break;
      value = values[i];
      x = map(i + 0.5, 0, nCol, 0, width);
      y = map(value, sm.minValue, sm.maxValue, 0, -height);

      if ((0,utils.isRealNumber)(value)) {
        plotEltArr[i].removeStyle('display', 'none');
        plotEltArr[i].attr({
          cx: x,
          cy: y
        });

        if (i === 0) {
          turtle.moveTo(x, y);
        } else {
          turtle.lineTo(x, y);
        }
      } else {
        plotEltArr[i].addStyle('display', 'none');
      }
    }

    linePathElt.attr('d', turtle.getPath());
    lineHitPathElt.attr('d', turtle.getPath());
  };

  return res; // color = Color.parse(color);
};

LineChart2.prototype.updateNotes = function () {
  var _this3 = this;

  var lines = this.lines || [];
  this.$keyNoteGroup.items = lines.map(function (line, i) {
    return {
      noteType: 'line',
      text: line.name || '',
      color: line.color || _this3.colorTable[i % _this3.colorTable.length]
    };
  });
};

LineChart2.prototype.updateKeys = function () {
  var keys = this.keys || [];
  this.$keys = keys.map(function (key) {
    return VCore_({
      tag: svg_GContainer,
      "class": 'vc-key',
      child: {
        tag: 'text',
        attr: {
          x: 0,
          y: 5,
          transform: 'rotate(45)'
        },
        child: {
          text: key || ''
        }
      }
    });
  });
  this.$keyCtn.clearChild().addChild(this.$keys);
};

LineChart2.prototype.updateLines = function () {
  var _this4 = this;

  this.$content.clearChild();
  var lines = this.lines || [];
  this.$lines = lines.map(function (line, i) {
    return _this4.makeLine(line, i);
  });
  this.$content.addChild(this.$lines);
};

LineChart2.prototype.updateContent = function () {
  this.computeData();
  this.updateNotes();
  this.updateKeys();
  this.updateLines();
};

LineChart2.prototype.updateAxisPosition = function () {
  var turtle = new controller_Turtle();
  var width = this.$body.box.width;
  var height = this.$body.box.height;
  var cpData = this.cpData;
  var sm = calBeautySegment(Math.floor(height / 50), cpData.min, cpData.max, this.integerOnly);
  this.$valueName.attr({
    x: -10,
    y: -height - 15
  });
  this.$keyName.attr({
    x: width + 5 + cpData.keyNameWidth,
    y: -10
  });
  cpData.sm = sm;
  turtle.moveTo(0, -height - 10).vLineBy(height + 10).hLineBy(width + 10);
  var i;

  for (i = 1; i <= sm.segmentCount; ++i) {
    turtle.moveTo(-2, map(i, 0, sm.segmentCount, 0, -height));
    turtle.hLineBy(4);
  }

  this.$oxy.attr('d', turtle.getPath());
  turtle = new controller_Turtle();
  turtle.moveTo(0, -height - 12).lineBy(-6, 6).hLineBy(12).closePath().moveTo(width + 12, 0).lineBy(-6, -6).vLineBy(12).closePath();
  this.$oxyArrow.attr('d', turtle.getPath());
  var nOyLb = sm.segmentCount + 1;

  while (this.$oyLabelCtn.childNodes.length > nOyLb) {
    this.$oyLabelCtn.lastChild.remove();
  }

  while (this.$oyLabelCtn.childNodes.length < nOyLb) {
    this.$oyLabelCtn.addChild(VCore_({
      tag: 'text',
      "class": 'vc-oy-value',
      attr: {
        x: -10,
        y: 0
      },
      child: {
        text: ''
      }
    }));
  }

  var elt;

  for (i = 0; i < nOyLb; ++i) {
    elt = this.$oyLabelCtn.childNodes[i];
    elt.firstChild.data = this.numberToString(sm.minValue + sm.step * i);
    elt.attr('y', map(i, 0, sm.segmentCount, 0, -height) + 5);
  }
};

LineChart2.prototype.updateKeysPosition = function () {
  var width = this.$body.box.width;
  this.$keys.forEach(function (elt, i, arr) {
    elt.box.x = map(i + 0.5, 0, arr.length, 0, width);
  });
};

LineChart2.prototype.updatePosition = function () {
  if (!this.box.width || !this.box.height) return;
  if (!this.isDescendantOf(document.body)) return;
  if (this.pendingUpdate) this.updateContent();
  var width = this.box.width;
  var height = this.box.height;
  var cpData = this.cpData;
  this.$title.attr({
    x: width / 2,
    y: this.paddingContent + 17
  });
  this.$keyNoteGroup.box.width = width - this.paddingContent * 2;
  this.$keyNoteGroup.updateSize();
  this.$keyNoteGroup.box.x = width / 2 - this.$keyNoteGroup.getBBox().width / 2;
  this.$keyNoteGroup.box.y = height - this.paddingContent - (this.$keyNoteGroup.box.height || 0);
  this.$keyCtn.box.y = 20;
  var textYWidth = TextMeasure/* default.measureWidth */.Z.measureWidth('0'.repeat(cpData.oyLabelLength), TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14);

  if (this.valueName) {
    textYWidth = Math.max(textYWidth, cpData.valueNameWidth);
  }

  this.$body.box.x = textYWidth + this.paddingContent + 10;
  this.$body.box.width = width - this.$body.box.x - cpData.keyNameWidth - this.paddingContent - 12;

  if (this.$body.box.width / (this.$keys.length || 1) > 20) {
    this.removeClass('vc-small-col');
    this.$keyCtn.box.height = this.$keyCtn.getBBox().height;
  } else {
    this.addClass('vc-small-col');
    this.$keyCtn.box.height = 0;
  }

  this.$body.box.y = this.$keyNoteGroup.box.y - this.$keyCtn.box.height - 20;
  this.$body.box.height = this.$body.box.y - this.paddingContent - 20 - 10 - 20 - 10;
  this.updateAxisPosition();
  this.updateKeysPosition();
  this.$lines.forEach(function (lineElt) {
    lineElt.updatePosition();
  });
};

LineChart2.property = {};
LineChart2.property.lines = {
  set: function set(lines) {
    lines = lines || [];
    this._lines = lines;
    this.requestUpdate();
  },
  get: function get() {
    return this._lines;
  }
}; //adapt old

LineChart2.property.canvasWidth = {
  set: function set(value) {
    if ((0,utils.isRealNumber)(value)) {
      this.addStyle('width', value + 'px');
    } else if (typeof value === "string") {
      this.addStyle('width', value);
    }
  },
  get: function get() {
    var value = this.style.width + '';
    if (value.endsWith('px')) value = parseFloat(value.replace('px', ''));
    return value || 0;
  }
};
LineChart2.property.canvasHeight = {
  set: function set(value) {
    if ((0,utils.isRealNumber)(value)) {
      this.addStyle('height', value + 'px');
    } else if (typeof value === "string") {
      this.addStyle('height', value);
    }
  },
  get: function get() {
    var value = this.style.height + '';
    if (value.endsWith('px')) value = parseFloat(value.replace('px', ''));
    return value || 0;
  }
};
LineChart2.property.title = {
  set: function set(value) {
    value = (value || '') + '';
    this.$title.firstChild.data = value;
  },
  get: function get() {
    return this.$title.firstChild.data;
  }
};
LineChart2.property.valueName = {
  set: function set(value) {
    this.$valueName.firstChild.data = (value || '') + '';
  },
  get: function get() {
    return this.$valueName.firstChild.data;
  }
};
LineChart2.property.keyName = {
  set: function set(value) {
    this.$keyName.firstChild.data = (value || '') + '';
  },
  get: function get() {
    return this.$keyName.firstChild.data;
  }
};
src_VCore.install(LineChart2);
;// CONCATENATED MODULE: ./src/DualChart.js





var DualChart_ = src_VCore._;
var DualChart_$ = src_VCore.$;

function DualChart() {
  this.titleCtrl = new ChartTitleController(this);
}

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

DualChart.render = function () {
  return DualChart_('basechart.dualchart', true);
};

DualChart.prototype.processMinMax = function () {
  this.minValue = this.lines.reduce(function (minValue, line) {
    return line.values.reduce(function (minValue, value) {
      if (!isNumber(value)) return minValue;
      return Math.min(minValue, value);
    }, minValue);
  }, 1000000000);
  this.minValue = this.areas.reduce(function (minValue, area) {
    return area.values.reduce(function (minValue, value) {
      if (!isNumber(value)) return minValue;
      return Math.min(minValue, value);
    }, minValue);
  }, this.minValue);
  this.maxValue = this.lines.reduce(function (maxValue, line) {
    return line.values.reduce(function (maxValue, value) {
      if (!isNumber(value)) return maxValue;
      return Math.max(maxValue, value);
    }, maxValue);
  }, -1000000000);
  this.maxValue = this.areas.reduce(function (maxValue, area) {
    return area.values.reduce(function (maxValue, value) {
      if (!isNumber(value)) return maxValue;
      return Math.max(maxValue, value);
    }, maxValue);
  }, this.maxValue);

  if (this.minValue > this.maxValue) {
    this.minValue = 0;
    this.maxValue = this.minValue + 10;
  }
};

DualChart.prototype._createArea = function (area, color) {
  var res = DualChart_({
    tag: 'shape',
    "class": 'dualchart-area',
    style: {
      fill: color,
      stroke: color
    }
  });

  return res;
};

DualChart.prototype._createAreaNote = function (area, color) {
  var res = DualChart_({
    tag: 'g'
  });

  res.$rect = rect(0, -14, 14, 14, 'dualchart-note-rect').addTo(res);

  if (color) {
    res.$rect.addStyle('fill', color);
  }

  res.$name = helper_text(area.name, 17, 0, 'dualchart-note-text').addTo(res);
  return res;
};

DualChart.prototype.initBackComp = function () {
  this["super"]();
  this.noteLineLength = 14;
  this.colors = this.lines.concat(this.areas).map(function (items, i, arr) {
    if (items.color) return items.color;
    return i < this.lines.length ? this.colorTable[Math.floor(this.colorTable.length * i / arr.length)] : this.colorTable[Math.floor(this.colorTable.length * i / arr.length)].replace(/#/, '#80');
  }.bind(this));
  this.$lineNotes = this.lines.map(function (line, i) {
    return this._createLineNote(line.name, this.colors[i]).addTo(this);
  }.bind(this));
  this.$arealNotes = this.areas.map(function (area, i) {
    return this._createAreaNote(area, this.colors[i + this.lines.length]).addTo(this);
  }.bind(this));
  this.$keyNames = this.keys.map(function (key) {
    return this._createKeyName(key).addTo(this.$content);
  }.bind(this));
};

DualChart.prototype.updateBackComp = function () {
  this["super"]();
  this.oxyBottom = this.canvasHeight - 5;
  var $notes = this.$lineNotes.concat(this.$arealNotes);
  var notesWidth = $notes.reduce(function (noteWidth, $lineNote) {
    return noteWidth + $lineNote.getBBox().width + 15;
  }.bind(this), 0);

  if (notesWidth >= this.canvasWidth) {
    var maxNoteWidth = $notes.reduce(function (maxNoteWidth, $lineNote) {
      return Math.max(maxNoteWidth, $lineNote.getBBox().width + 10);
    }.bind(this), 0);
    var notePerLine = Math.max(1, Math.floor(this.canvasWidth / maxNoteWidth));
    var x0 = (this.canvasWidth - notePerLine * maxNoteWidth) / 2 + 5;
    var y0 = this.canvasHeight - 5;
    $notes.forEach(function ($note, i) {
      $note.attr('transform', translate(x0 + maxNoteWidth * (i % notePerLine), y0));
      if (i % notePerLine == notePerLine - 1) y0 -= 20;
      this.oxyBottom -= 20;
    }.bind(this));
  } else {
    $notes.reduce(function (x, $line) {
      $line.attr('transform', translate(x, this.canvasHeight - 5));
      return x + $line.getBBox().width + 15;
    }.bind(this), (this.canvasWidth - notesWidth) / 2);
    this.oxyBottom -= 20;
  }

  var maxKeyNameWidth = this.$keyNames.reduce(function (w, $keyName) {
    return Math.max(w, $keyName.$text.getBBox().width);
  }, 0);
  this.oxSegmentLength = this.oxLength / this.keys.length;
  this.oxContentLength = this.oxLength;

  if (this.oxSegmentLength < maxKeyNameWidth + this.keyPaddingH * 2) {
    this.rotateText = true;
  } else if (this.minOXSegmentLength > this.oxSegmentLength) {
    this.oxSegmentLength = this.minOXSegmentLength;
    this.rotateText = true;
    this.oxContentLength = this.oxSegmentLength * this.keys.length;
  }

  if (this.rotateText) {
    this.$keyNames.forEach(function (e, i) {
      e.attr('transform', translate((i + 0.5) * this.oxSegmentLength - 5, 12));
      e.$text.attr('transform', rotate(45));
    }.bind(this));
    this.oxyBottom -= maxKeyNameWidth / 1.4 + 12;
  } else {
    this.$keyNames.forEach(function (e, i) {
      e.attr('transform', translate((i + 0.5) * this.oxSegmentLength, 12));
      e.$text.attr('text-anchor', 'middle');
    }.bind(this));
    this.oxyBottom -= 30;
  } //reupdate because update oxybottom


  this["super"]();
};

DualChart.prototype.initComp = function () {
  this.$areas = this.areas.map(function (line, i) {
    return this._createArea(line, this.colors[i + this.lines.length]).addTo(this.$content);
  }.bind(this));
  this.$lines = this.lines.map(function (line, i) {
    return this._createLine(line, this.colors[i]).addTo(this.$content);
  }.bind(this));
};

DualChart.prototype.updateComp = function () {
  this.updateLine();
  this.updateArea();
};

DualChart.prototype.updateLine = function () {
  this.$lines.map(function ($line, i) {
    var line = this.lines[i];
    var subLines = getSubNumberArray(line.values);
    $line.$path.begin();
    subLines.forEach(function (subLine, j) {
      var start = subLine.start;
      var values = subLine.values;

      if (values.length > 1) {
        $line.$path.moveTo(this.oxSegmentLength * (start + 0.5), this.mapOYValue(values[0]));

        for (var xi = 1; xi < values.length; ++xi) {
          $line.$path.lineTo(this.oxSegmentLength * (start + xi + 0.5), this.mapOYValue(values[xi]));
        }
      } else {
        $line.$path.moveTo(this.oxSegmentLength * (start + 0.25), this.mapOYValue(values[0]));
        $line.$path.lineTo(this.oxSegmentLength * (start + 0.75), this.mapOYValue(values[0]));
      }
    }.bind(this));
    $line.$path.end();
    $line.$plots.forEach(function ($plot, j) {
      $plot.attr('display');
      var value = line.values[j];

      if (isNumber(value)) {
        $plot.attr({
          display: undefined,
          cx: this.oxSegmentLength * (j + 0.5),
          cy: this.mapOYValue(value)
        });
      } else $plot.attr('display', 'none');
    }.bind(this));
    $line.$path.end();
  }.bind(this));
};

DualChart.prototype.updateArea = function () {
  this.$areas.map(function ($area, i) {
    var values = this.areas[i].values;
    var subAreas = getSubNumberArray(values);
    $area.begin();
    subAreas.forEach(function (subArea) {
      var start = subArea.start;
      var values = subArea.values;

      if (values.length > 1) {
        $area.moveTo(this.oxSegmentLength * (start + 0.5), -1);

        for (var xi = 0; xi < values.length; ++xi) {
          $area.lineTo(this.oxSegmentLength * (start + xi + 0.5), this.mapOYValue(values[xi]));
        }

        $area.lineTo(this.oxSegmentLength * (start + values.length - 1 + 0.5), -1);
        $area.closePath();
      } else {
        $area.moveTo(this.oxSegmentLength * (start + 0.25), -1);
        $area.lineTo(this.oxSegmentLength * (start + 0.25), this.mapOYValue(values[0]));
        $area.lineTo(this.oxSegmentLength * (start + 0.75), this.mapOYValue(values[0]));
        $area.lineTo(this.oxSegmentLength * (start + 0.75), -1);
        $area.closePath();
      }
    }.bind(this)); // $area
    //     .moveTo(this.oxSegmentLength * (values.length - (this.keys.length == 1 ? 0.25 : 0.5)), -1)
    //     .lineTo(this.oxSegmentLength * (this.keys.length == 1 ? 0.25 : 0.5), -1);
    // if (this.keys.length == 1) {
    //     $area.lineTo(this.oxSegmentLength * 0.25, isNumber(values[0]) ? this.mapOYValue(values[0]) : 0);
    // }
    // for (var i = 0; i < values.length; ++i) {
    //     $area.lineTo(this.oxSegmentLength * (i + 0.5), isNumber(values[i]) ? this.mapOYValue(values[i]) : 0);
    // }
    // if (this.keys.length == 1) {
    //     $area.lineTo(this.oxSegmentLength * 0.75, isNumber(values[0]) ? this.mapOYValue(values[0]) : 0);
    // }
    // $area.closePath().end();

    $area.end();
  }.bind(this));
};

Object.keys(src_LineChart.prototype).filter(function (key) {
  return !DualChart.prototype[key];
}).forEach(function (key) {
  DualChart.prototype[key] = src_LineChart.prototype[key];
});
src_VCore.creator.dualchart = DualChart;
/* harmony default export */ const src_DualChart = (DualChart);
;// CONCATENATED MODULE: ./src/VerticalChart.js





var VerticalChart_ = src_VCore._;
var VerticalChart_$ = src_VCore.$;
/**
 * @extends BChart
 * @constructor
 */

function VerticalChart() {
  src_BChart.call(this);
  this.oxColMargin = 10;
  this.oxColWidth = 17;
  this.computedData.min = 0;
  this.computedData.max = 10;
  this.computedData.paddingAxisBottom = 0;
  this.computedData.oyUpdated = false;
  this.computedData.oy = {};
  this.computedData.numberToFixed = 0;
  this.integerOnly = false;
  this.zeroOY = false;
  this.valueName = '';
  this.keyName = '';
  this.numberToString = this.numberToString || null;
  /**
   *
   * @type {string[]}
   */

  this.keys = [];
  this.$oxLabelCtn = VerticalChart_('gcontainer.vc-ox-label-ctn');
  this.$oyValueCtn = VerticalChart_('gcontainer.vc-oy-value-ctn');
  this.$axisCtn = VerticalChart_('gcontainer.vc-axis-ctn');
  this.$whiteMask = VerticalChart_({
    tag: 'path',
    "class": 'vc-white-mask',
    attr: {
      fill: 'white',
      stroke: 'white',
      'fill-rule': 'evenodd',
      d: 'M0,0  0,2000 2000,2000 2000,0zM100,0  0,200 200,200 200,0z'
    }
  });
  /**
   *
   * @type {Axis}
   */

  this.$axis = VerticalChart_('axis');
  this.$oxySpace = VerticalChart_('gcontainer.vc-oxy-space');
  /***
   *
   * @type {HSC}
   */

  this.$hscrollbar = VerticalChart_('hscrollbar').on('scroll', this.eventHandler.scrollOxySpace);
  this.$scrollArrow = VerticalChart_('scrollarrow').on('pressleft', this.eventHandler.scrollArrowsPressLeft).on('pressright', this.eventHandler.scrollArrowsPressRight);
  this.$scrollArrow.box.x = 10;
  this.$hscrollbar.height = 12;
  this.$valueName = VerticalChart_({
    tag: 'text',
    "class": 'vc-value-name',
    attr: {
      y: 14,
      x: 5
    },
    child: {
      text: ''
    }
  });
  this.$keyName = VerticalChart_({
    tag: 'text',
    "class": 'vc-key-name',
    attr: {
      y: 14,
      x: 5
    },
    child: {
      text: ''
    }
  });
  this.$oxySpace.addChild(this.$oxLabelCtn);
  this.$axisCtn.addChild(this.$oxySpace);
  this.$axisCtn.addChild(this.$whiteMask);
  this.$axisCtn.addChild(this.$axis);
  this.$axisCtn.addChild(this.$hscrollbar);
  this.$axisCtn.addChild(this.$scrollArrow);
  this.$axisCtn.addChild(this.$valueName);
  this.$axisCtn.addChild(this.$keyName);
  this.$oxLabels = [];
  this.$oyValues = [];
  this.$body.addChild(this.$axisCtn);
  this.$body.addChild(this.$oyValueCtn);
}

OOP/* default.mixClass */.ZP.mixClass(VerticalChart, src_BChart);
VerticalChart.property = Object.assign({}, src_BChart.property);
VerticalChart.eventHandler = Object.assign({}, src_BChart.eventHandler);
VerticalChart.tag = 'VerticalChart'.toLowerCase();
VerticalChart.prototype.dataKeys = src_BChart.prototype.dataKeys.concat(['keys', 'zeroOY']);

VerticalChart.render = function () {
  return src_BChart.render();
};

VerticalChart.prototype.computeMinMax = function () {
  this.computedData.min = 0;
  this.computedData.max = 10;
};
/***
 *
 * @param {Number}number
 * @returns {string}
 */


VerticalChart.prototype.numberToText = function (number) {
  return this.numberToString ? this.numberToString(number) : number.toFixed(this.computedData.numberToFixed);
};

VerticalChart.prototype.computeData = function () {
  src_BChart.prototype.computeData.call(this);
  this.computeMinMax();

  if (this.computedData.min >= this.computedData.max) {
    this.computedData.min = 0;
    this.computedData.max = 10;
  }

  if (this.computedData.min === this.computedData.max) {
    this.computedData.max += 1;
  }

  if (this.zeroOY) this.computedData.min = Math.min(this.computedData.min, 0);
};

VerticalChart.prototype.mapOYValue = function (val) {
  return map(val, this.computedData.oy.minValue, this.computedData.oy.maxValue, 0, this.computedData.oyLength);
};

VerticalChart.prototype._computeOYSegment = function () {
  var oyLength = this.$body.box.height - 20 - 10 - this.computedData.paddingAxisBottom;
  var valueNameHeight = this.$valueName.getBBox().height;

  if (valueNameHeight > 0) {
    oyLength -= valueNameHeight + 5;
  }

  var segment = calBeautySegment(Math.floor(oyLength / 30), this.computedData.min, this.computedData.max, this.integerOnly);

  if (segment && segment.segmentCount < 30 && segment.segmentCount >= 1) {
    if (segment.step !== this.computedData.oy.step || segment.segmentCount !== this.computedData.oy.segmentCount || segment.maxValue !== this.computedData.oy.maxValue || segment.minValue !== this.computedData.oy.minValue) {
      this.computedData.oy = segment;
      this.computedData.oyUpdated = false;
      this.computedData.numberToFixed = 0;
      if (segment.step < 1) this.computedData.numberToFixed++;
      if (segment.step < 0.1) this.computedData.numberToFixed++;
      if (segment.step < 0.01) this.computedData.numberToFixed++;
      if (segment.step < 0.001) this.computedData.numberToFixed++;
      if (segment.step < 0.0001) this.computedData.numberToFixed++;
    }
  }

  this.computedData.oyLength = oyLength;
  this.computedData.oySegmentLength = oyLength / segment.segmentCount;
};

VerticalChart.prototype._createOxLabel = function () {
  var thisC = this;
  this.$oxLabelCtn.clearChild();
  this.$oxLabels = this.keys.map(function (key) {
    var labelElt = VerticalChart_({
      tag: 'text',
      "class": 'vc-ox-label',
      attr: {
        y: 15
      },
      child: {
        text: key
      }
    });

    thisC.$oxLabelCtn.addChild(labelElt);
    return labelElt;
  });
  this.computedData.oxLabelMaxWidth = this.$oxLabels.reduce(function (ac, elt) {
    return Math.max(ac, elt.getBBox().width);
  }, 0);
  this.$valueName.firstChild.data = this.valueName || '';
  this.$keyName.firstChild.data = this.keyName || '';
};

VerticalChart.prototype._createOyValue = function () {
  this.computedData.oyUpdated = true;
  var segment = this.computedData.oy;
  var textElt;

  while (this.$oyValues.length < segment.segmentCount + 1) {
    textElt = VerticalChart_({
      tag: 'text',
      "class": 'vc-oy-value',
      child: {
        text: '0'
      }
    });
    this.$oyValues.push(textElt);
    this.$oyValueCtn.addChild(textElt);
  }

  while (this.$oyValues.length > segment.segmentCount + 1) {
    textElt = this.$oyValues.pop();
    textElt.remove();
  }

  for (var i = 0; i < this.$oyValues.length; ++i) {
    this.$oyValues[i].firstChild.data = this.numberToText(segment.minValue + i * segment.step);
  }
};

VerticalChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createOxLabel();
};

VerticalChart.prototype._updateLabelPosition = function () {
  this.$oxLabelCtn.box.y = this.$body.box.height = 15;
};

VerticalChart.prototype._updateOYValuePosition = function () {
  this._computeOYSegment();

  if (!this.computedData.oyUpdated) {
    this._createOyValue();
  }

  var y = this.$body.box.height - 20 + 6 - this.computedData.paddingAxisBottom;
  var valueElt;

  for (var i = 0; i < this.$oyValues.length; ++i) {
    valueElt = this.$oyValues[i];
    valueElt.attr({
      y: y,
      x: -10
    });
    y -= this.computedData.oySegmentLength;
  }

  var box = this.$oyValueCtn.getBBox();
  this.$oyValueCtn.box.x = Math.max(box.width + 10, this.$valueName.getBBox().width - 5);
};

VerticalChart.prototype.updateAxis = function () {
  var valueNameBox = this.$valueName.getBBox();
  var valueNameHeight = valueNameBox.height;
  var keyNameWidth = this.$keyName.getBBox().width;
  this.$axisCtn.box.setPosition(this.$oyValueCtn.box.x, 0);
  this.$axisCtn.box.setSize(this.$body.box.width - this.$oyValueCtn.box.x, this.$body.box.height - 20);
  this.$keyName.attr({
    y: this.$axisCtn.box.height - 10,
    x: this.$axisCtn.box.width
  });
  this.$whiteMask.attr('d', 'M-300 -300 H' + (this.$axisCtn.box.width + 100) + ' V' + (this.$axisCtn.box.height + 600) + 'H -300z' + 'M0 0 H ' + (this.$axisCtn.box.width - keyNameWidth) + ' V ' + (this.$axisCtn.box.height + 300) + ' H 0z');
  this.$axis.box.setPosition(0, this.$axisCtn.box.height);
  this.$axis.resize(this.$axisCtn.box.width - 8, this.$axisCtn.box.height - 5 - (valueNameHeight > 0 ? valueNameHeight + 5 : 0));
  this.$oxySpace.box.setPosition(0, this.$axisCtn.box.height);
  this.computedData.oxLength = this.$axisCtn.box.width - 1 - keyNameWidth;
  this.computedData.oyLength = this.$axisCtn.box.height - 15 - (valueNameHeight > 0 ? valueNameHeight + 5 : 0) - this.computedData.paddingAxisBottom;
  this.$hscrollbar.box.y = this.$axisCtn.box.height - this.$hscrollbar.height;

  if (!this.style.getPropertyValue('--vc-require-width')) {
    this.addStyle('--vc-require-width', this.$axisCtn.box.x + this.contentPadding + this.$keyName.getBBox().width + 50 + 'px');
    this.addStyle('--vc-require-height', this.box.height - this.$axisCtn.box.height + this.contentPadding * 2 + +this.computedData.paddingAxisBottom + this.$title.getBBox().height + 60 + 'px');
  }
};

VerticalChart.prototype._updateOxLabelPosition = function () {
  this.computedData.oxSegmentLength = this.computedData.oxLength / this.$oxLabels.length;
  this.computedData.oxSegmentLength = Math.max(this.oxColMargin + Math.max(this.oxColWidth, this.computedData.oxLabelMaxWidth), this.computedData.oxSegmentLength);
  var dx = this.computedData.oxSegmentLength;
  var x = this.computedData.oxSegmentLength / 2;

  for (var i = 0; i < this.$oxLabels.length; ++i) {
    this.$oxLabels[i].attr('x', x);
    x += dx;
  }

  this.computedData.oxScrollWidth = dx * this.$oxLabels.length - 1;
  this.computedData.oxOverFlow = this.computedData.oxScrollWidth > this.computedData.oxLength;
  this.$hscrollbar.outterWidth = this.computedData.oxLength;
  this.$hscrollbar.innerWidth = this.computedData.oxScrollWidth;
  this.$hscrollbar.width = this.computedData.oxLength;
  this.$hscrollbar.scrollLeft = Math.max(0, Math.min(this.$hscrollbar.scrollLeft, this.computedData.oxScrollWidth - this.computedData.oxLength));
  this.$oxySpace.box.x = -this.$hscrollbar.scrollLeft;

  if (this.computedData.oxOverFlow) {
    this.$scrollArrow.removeStyle('display');
    this.$scrollArrow.box.y = this.computedData.oyLength / 2;
    this.$scrollArrow.width = this.computedData.oxLength - 20;

    this._updateScrollArrowBtb();
  } else {
    this.$scrollArrow.addStyle('display', 'none');
  }

  this.$axis.oyDivision = this.computedData.oySegmentLength;
  this.$axis.updateOyDivision();
};

VerticalChart.prototype._updateScrollArrowBtb = function () {
  if (this.$hscrollbar.scrollLeft <= 0) {
    this.$scrollArrow.$left.addStyle('display', 'none');
  } else {
    this.$scrollArrow.$left.removeStyle('display');
  }

  if (this.$hscrollbar.scrollLeft >= this.$hscrollbar.innerWidth - this.$hscrollbar.outterWidth) {
    this.$scrollArrow.$right.addStyle('display', 'none');
  } else {
    this.$scrollArrow.$right.removeStyle('display');
  }
};

VerticalChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._updateOYValuePosition();

  this.updateAxis();

  this._updateOxLabelPosition();
};

VerticalChart.eventHandler.scrollOxySpace = function () {
  this.$oxySpace.box.x = -this.$hscrollbar.scrollLeft;

  this._updateScrollArrowBtb();
};

VerticalChart.eventHandler.scrollArrowsPressLeft = function () {
  this.$hscrollbar.scrollLeft -= 10;
  this.eventHandler.scrollOxySpace();
};

VerticalChart.eventHandler.scrollArrowsPressRight = function () {
  this.$hscrollbar.scrollLeft += 10;
  this.eventHandler.scrollOxySpace();
};

src_VCore.install(VerticalChart);
/* harmony default export */ const src_VerticalChart = (VerticalChart);
;// CONCATENATED MODULE: ./src/RangeChart.js







var RangeChart_ = src_VCore._;
var RangeChart_$ = src_VCore.$;
/***
 * @extends BChart
 * @constructor
 */

function RangeChart() {
  /** default config**/
  this.valuePlotRadius = 10;
  this.minKeyWidth = 90;
  this.maxKeyWidthRatio = 1.5;
  this.limitLineLength = 40;
  this.lineHeight = 22;
  src_BChart.call(this);
  this.contentPadding = 0;
  /** data **/

  this.integerOnly = false;
  this.zeroOY = false;
  this.ranges = [];
  this.valueName = '';
  this.keyName = '';
  this.maxText = 'Maximum';
  this.minText = 'Minimum';
  this.midText = 'Median';
  this.normalText = 'Normal';
  this.numberToString = this.numberToString || null;
  this.createStatic();
  this.$oyValueCtn = RangeChart_$('gcontainer.vc-oy-value-ctn', this);
  this.$rangeCtn = RangeChart_$('.vc-range-ctn', this);
  this.$whiteMask = RangeChart_$('.vc-white-mask', this);
  this.$axisCtn = RangeChart_$('gcontainer.vc-axis-ctn', this);
  this.$axis = RangeChart_$('axis', this);
  this.$oxTable = RangeChart_$('gcontainer.vc-ox-table', this);
  this.$oxLabelCtn = RangeChart_$('gcontainer.vc-ox-label-ctn', this);
  this.$oxValueCtn = RangeChart_$('gcontainer.vc-ox-value-ctn', this);
  this.$valueName = RangeChart_$('text.vc-value-name', this);
  this.$keyName = RangeChart_$('text.vc-key-name', this);
  this.$oxySpace = RangeChart_$('.vc-oxy-space', this);
  this.$oyValues = [];
  /***
   *
   * @type {ScrollArrow}
   */

  this.$scrollArrow = RangeChart_$('scrollarrow', this).on('pressleft', this.eventHandler.scrollArrowsPressLeft).on('pressright', this.eventHandler.scrollArrowsPressRight);
  this.$hscrollbar = RangeChart_$('hscrollbar', this).on('scroll', this.eventHandler.scrollOxySpace);
  this.$hscrollbar.height = 12;
  this.$hscrollbar.box.y = -11;
  this.sync = new Promise(function (resolve) {
    this.$attachhook.once('attached', resolve);
  }.bind(this));
}

OOP/* default.mixClass */.ZP.mixClass(RangeChart, src_BChart);
RangeChart.property = Object.assign({}, src_VerticalChart.property);
RangeChart.eventHandler = Object.assign({}, src_VerticalChart.eventHandler);
RangeChart.tag = 'RangeChart'.toLowerCase();

RangeChart.render = function () {
  return src_BChart.render().addClass('range-chart').addClass('vc-range-chart');
};

RangeChart.prototype.createStatic = function () {
  RangeChart_({
    elt: this.$body,
    child: [{
      tag: 'gcontainer',
      "class": 'vc-axis-ctn',
      child: [{
        tag: 'gcontainer',
        "class": 'vc-oxy-space',
        child: [{
          tag: 'gcontainer',
          "class": 'vc-ox-table',
          child: ['gcontainer.vc-ox-label-ctn', 'gcontainer.vc-ox-value-ctn']
        }, {
          tag: 'gcontainer',
          "class": 'vc-range-ctn'
        }]
      }, {
        tag: 'path',
        "class": 'vc-white-mask',
        attr: {
          fill: 'white',
          stroke: 'white',
          'fill-rule': 'evenodd',
          d: 'M0,0  0,2000 2000,2000 2000,0zM100,0  0,200 200,200 200,0z'
        }
      }, 'gcontainer.vc-oy-value-ctn', 'axis', {
        tag: 'text',
        "class": 'vc-value-name',
        attr: {
          y: 14,
          x: 5
        },
        child: {
          text: ''
        }
      }, {
        tag: 'text',
        "class": 'vc-key-name',
        attr: {
          y: 14,
          x: 5
        },
        child: {
          text: ''
        }
      }, 'scrollarrow', 'hscrollbar']
    }]
  });
};

RangeChart.prototype.normalizeData = function () {
  this.ranges.some(function (range) {
    if (isNumber(range.min) && isNumber(range.max)) {
      if (range.min > range.max) {
        console.error(range, "Violation: min > max");
        return true;
      } else {
        if (isNumber(range.mid)) {
          if (range.mid < range.min || range.mid > range.max) {
            console.error(range, "Violation: mid < min or mid > max");
            return true;
          }
        }
      }
    }

    return false;
  });
};

RangeChart.prototype.computeData = function () {
  // this.computedData
  this.computedData.hasMidValue = this.ranges.some(function (range) {
    return isNumber(range.mid);
  });
  this.computedData.hasNormalValue = this.ranges.some(function (range) {
    return isNumber(range.normal);
  });
  this.computedData.max = this.ranges.reduce(function (ac, range) {
    if (isNumber(range.max)) ac = Math.max(ac, range.max);
    if (isNumber(range.mid)) ac = Math.max(ac, range.mid);
    if (isNumber(range.min)) ac = Math.max(ac, range.min);
    if (isNumber(range.normal)) ac = Math.max(ac, range.normal);
    return ac;
  }, -Infinity);
  this.computedData.min = this.ranges.reduce(function (ac, range) {
    if (isNumber(range.max)) ac = Math.min(ac, range.max);
    if (isNumber(range.mid)) ac = Math.min(ac, range.mid);
    if (isNumber(range.min)) ac = Math.min(ac, range.min);
    if (isNumber(range.normal)) ac = Math.min(ac, range.normal);
    return ac;
  }, Infinity);

  if (this.computedData.min > this.computedData.max) {
    this.computedData.min = 0;
    this.computedData.max = 10;
  }

  if (this.zeroOY) {
    this.computedData.min = 0;
  }

  if (this.computedData.min === this.computedData.max) {
    this.computedData.max += 1;
  }
};

RangeChart.prototype.mapOYValue = src_VerticalChart.prototype.mapOYValue;

RangeChart.prototype._computeOYSegment = function () {
  var res = false;
  var segment = calBeautySegment(Math.floor(this.$axisCtn.box.height / 50), this.computedData.min, this.computedData.max, this.integerOnly);

  if (segment && segment.segmentCount < 30) {
    //error
    if (!this.computedData.oy || segment.step !== this.computedData.oy.step || segment.segmentCount !== this.computedData.oy.segmentCount || segment.maxValue !== this.computedData.oy.maxValue || segment.minValue !== this.computedData.oy.minValue) {
      this.computedData.oy = segment;
      this.computedData.oyUpdated = false;
      this.computedData.numberToFixed = 0;
      if (segment.step < 1) this.computedData.numberToFixed++;
      if (segment.step < 0.1) this.computedData.numberToFixed++;
      if (segment.step < 0.01) this.computedData.numberToFixed++;
      if (segment.step < 0.001) this.computedData.numberToFixed++;
      if (segment.step < 0.0001) this.computedData.numberToFixed++;
      res = true;
    }
  }

  this.computedData.oySegmentLength = this.$axisCtn.box.height / segment.segmentCount;
  return res;
};

RangeChart.prototype._createNote = function () {
  var ctn = this.$noteCtn.clearChild();
  var y0 = this.lineHeight / 2 + 1;
  var labelX = this.limitLineLength + 10;
  ctn.$maxLine = this._createLimitLine(0, y0, this.limitLineLength, 'max').addTo(ctn);
  ctn.$maxText = helper_text(this.maxText, labelX, y0 + 5).addTo(ctn);
  y0 += this.lineHeight;

  if (this.computedData.hasMidValue) {
    this._createLimitLine(0, y0, this.limitLineLength, 'mid').addTo(ctn);

    helper_text(this.midText, labelX, y0 + 5).addTo(ctn);
    y0 += this.lineHeight;
  }

  ctn.$minLine = this._createLimitLine(0, y0, this.limitLineLength, 'min').addTo(ctn);
  ctn.$minText = helper_text(this.minText, labelX, y0 + 5).addTo(ctn);

  if (this.computedData.hasNormalValue) {
    y0 += this.lineHeight;

    if (this.ranges[0].normal !== undefined) {
      circle(this.limitLineLength / 2, y0, this.valuePlotRadius, 'range-chart-value-plot').addTo(ctn);
      helper_text(this.normalText, labelX, y0 + 5).addTo(ctn);
    }
  }

  y0 += this.lineHeight / 2;
  ctn.box.setSize(ctn.getBBox().width + 7, y0);
};

RangeChart.prototype._updateNotesPosition = function () {
  var box = this.$noteCtn.box;
  this.$noteCtn.box.setPosition(this.contentPadding, this.box.height - box.height - this.contentPadding);
};

RangeChart.prototype.createOxTable = function () {
  var thisC = this;
  this.$oxValueCtn.clearChild();
  var hasMidValue = this.computedData.hasMidValue;
  var hasNormalValue = this.computedData.hasNormalValue;
  var maxValueWidth = 0;
  this.$oxRangeCols = this.ranges.map(function (range, i, arr) {
    var ctn = RangeChart_({
      tag: svg_GContainer.tag
    });

    thisC.$oxValueCtn.addChild(ctn);
    var maxText = '"';
    var midText = '"';
    var minText = '"';
    var normalText = '"';
    var y0 = 17;
    if (isNumber(range.max)) maxText = thisC.numberToText(range.max);
    ctn.$maxText = RangeChart_({
      tag: 'text',
      attr: {
        x: 0,
        y: y0
      },
      child: {
        text: maxText
      }
    });
    ctn.addChild(ctn.$maxText);
    y0 += thisC.lineHeight;

    if (hasMidValue) {
      if (isNumber(range.mid)) midText = thisC.numberToText(range.mid);
      ctn.$midText = RangeChart_({
        tag: 'text',
        attr: {
          x: 0,
          y: y0
        },
        child: {
          text: midText
        }
      });
      ctn.addChild(ctn.$midText);
      y0 += thisC.lineHeight;
    }

    if (isNumber(range.min)) minText = thisC.numberToText(range.min);
    ctn.$minText = RangeChart_({
      tag: 'text',
      attr: {
        x: 0,
        y: y0
      },
      child: {
        text: minText
      }
    });
    ctn.addChild(ctn.$minText);

    if (hasNormalValue) {
      y0 += thisC.lineHeight;
      if (isNumber(range.normal)) normalText = thisC.numberToText(range.normal);
      ctn.$normalText = RangeChart_({
        tag: 'text',
        attr: {
          x: 0,
          y: y0
        },
        child: {
          text: normalText
        }
      });
      ctn.addChild(ctn.$normalText);
    }

    y0 += thisC.lineHeight / 2 - 5;
    var textWidth = ctn.getBBox().width;
    ctn.box.setSize(textWidth, y0);
    maxValueWidth = Math.max(maxValueWidth, textWidth);
    return ctn;
  });
  this.computedData.maxValueWidth = maxValueWidth;
  if (this.$oxRangeCols.length > 0) this.$oxValueCtn.box.height = this.$oxRangeCols[0].box.height;
};

RangeChart.prototype.createOxLabel = function () {
  var lineHeight = this.lineHeight;
  var ctn = this.$oxLabelCtn;
  var keyLimitWidth = Math.max(this.minKeyWidth, this.computedData.maxValueWidth * this.maxKeyWidthRatio);
  var keyMaxWidth = 0;
  ctn.clearChild();
  this.$oxLabels = this.ranges.map(function (range) {
    var lines = wrapToLines(range.name, 14, keyLimitWidth);
    if (lines.length < 2) lines = [];else lines = lines.map(function (line, i) {
      return {
        tag: 'text',
        "class": 'vc-range-chart-label-line',
        attr: {
          x: '0',
          y: 17 + i * lineHeight + ''
        },
        child: {
          text: line
        }
      };
    });

    var labelBlock = RangeChart_({
      tag: svg_GContainer.tag,
      child: [{
        tag: 'text',
        attr: {
          x: '0',
          y: 17
        },
        "class": lines.length >= 2 ? 'vc-range-chart-label-full' : 'vc-range-chart-label',
        child: {
          text: range.name
        }
      }].concat(lines)
    }).addTo(ctn);

    keyMaxWidth = Math.max(keyMaxWidth, labelBlock.getBBox().width);
    return labelBlock;
  });
  this.computedData.keyMaxWidth = keyMaxWidth;
};

RangeChart.prototype.createAxisName = function () {
  this.$valueName.firstChild.data = this.valueName;
  this.computedData.valueNameWidth = this.$valueName.getBBox().width;
  this.$keyName.firstChild.data = this.keyName;
  this.computedData.keyNameWidth = this.$keyName.getBBox().width;
};

RangeChart.prototype.updateAxisX = function () {
  this.$axisCtn.box.x = Math.max(this.computedData.valueNameWidth, this.computedData.maxValueWidth + 5, this.$noteCtn.box.width);
  this.$axisCtn.box.width = this.$body.box.width - this.$axisCtn.box.x - 7 - this.computedData.keyNameWidth;
  this.$axis.resize(this.$axisCtn.box.width + this.computedData.keyNameWidth, 10);
  this.$keyName.attr('x', this.$axisCtn.box.width + 7 + this.computedData.keyNameWidth);
  this.$hscrollbar.width = this.$axisCtn.box.width;
  this.$hscrollbar.outterWidth = this.$axisCtn.box.width;
};

RangeChart.prototype.updateOxTablePosition = function () {
  var requireMinWidth = (Math.max(this.computedData.keyMaxWidth, this.computedData.maxValueWidth) + 10) * this.ranges.length;
  var colWidth = Math.max(this.computedData.maxValueWidth + 10, this.$axisCtn.box.width / this.ranges.length);
  this.computedData.oxLabelWrap = requireMinWidth > this.$axisCtn.box.width;

  if (this.computedData.oxLabelWrap) {
    this.addClass('vc-ox-label-wrap');
  } else {
    this.removeClass('vc-ox-label-wrap');
  }

  colWidth = this.$oxLabels.reduce(function (ac, labelBlock) {
    return Math.max(ac, labelBlock.getBBox().width + 10);
  }, colWidth);
  this.$oxLabelCtn.box.height = this.$oxLabelCtn.getBBox().height + 5;
  this.$oxValueCtn.box.y = this.$oxLabelCtn.box.height;
  this.$oxValueCtn.box.height = this.$noteCtn.box.height;
  this.$oxLabels.forEach(function (labelBlock, i) {
    labelBlock.box.x = colWidth * (i + 0.5);
  }, 0);
  this.$oxRangeCols.forEach(function (colElt, i) {
    colElt.box.x = colWidth * (i + 0.5) + colElt.box.width / 2;
  }, 0);
  this.$oxTable.box.width = colWidth * this.ranges.length;
  this.$oxTable.box.height = this.$oxLabelCtn.box.height + this.$oxValueCtn.box.height;
  this.$axisCtn.box.y = this.$noteCtn.box.y - this.$body.box.y - this.$oxLabelCtn.box.height;
  this.$axisCtn.box.height = this.$axisCtn.box.y - 20;
  this.$scrollArrow.width = this.$axisCtn.box.width - 10;
  this.$scrollArrow.box.setPosition(5, -this.$axisCtn.box.height / 2);
  this.computedData.collWidth = colWidth;
  this.computedData.oyLength = this.$axisCtn.box.height;
  this.$hscrollbar.innerWidth = this.$oxTable.box.width;

  this._updateScrollArrowBtb();

  if (!this.style.getPropertyValue('--vc-require-width')) {
    this.addStyle('--vc-require-width', this.$axisCtn.box.x + this.contentPadding + this.$keyName.getBBox().width + 50 + 'px');
    this.addStyle('--vc-require-height', this.box.height - this.$axisCtn.box.height + this.contentPadding * 2 + this.$title.getBBox().height + 60 + 'px');
  }

  ;
};

RangeChart.prototype.updateAxisY = function () {
  this.$axis.resize(this.$axisCtn.box.width + this.computedData.keyNameWidth, this.$axisCtn.box.height + 10);
  this.$valueName.attr('y', -this.$axisCtn.box.height - 22);
  this.$whiteMask.attr('d', 'M' + (-this.$axisCtn.box.x - this.$body.box.x - 1) + ' ' + (-this.$axisCtn.box.y - this.$body.box.y) + ' h' + (this.box.width + 2) + 'v' + this.box.height + 'h' + (-this.box.width - 2) + 'z' + 'M0 ' + (-this.$axisCtn.box.height - 10) + 'h ' + this.$axisCtn.box.width + 'v' + (this.$axisCtn.box.height + this.$oxTable.box.height + 10) + ' H 0z');
};

RangeChart.prototype._updateScrollArrowBtb = src_VerticalChart.prototype._updateScrollArrowBtb;
RangeChart.prototype._createOyValue = src_VerticalChart.prototype._createOyValue;

RangeChart.prototype._updateOYValuePosition = function () {
  this._computeOYSegment();

  if (!this.computedData.oyUpdated) {
    this._createOyValue();
  }

  var y = 0;
  var valueElt;

  for (var i = 0; i < this.$oyValues.length; ++i) {
    valueElt = this.$oyValues[i];
    valueElt.attr({
      y: y + 5,
      x: -10
    });
    y -= this.computedData.oySegmentLength;
  }

  this.$axis.oyDivision = this.computedData.oySegmentLength;
  this.$axis.updateOyDivision();
};

RangeChart.prototype.createRanges = function () {
  var ctn = this.$rangeCtn;
  ctn.clearChild();
  this.$ranges = this.ranges.map(function (range) {
    return this._createRange(range).addTo(ctn);
  }.bind(this));
};

RangeChart.prototype.updateRangesPosition = function () {
  var colWidth = this.computedData.collWidth;
  var thisC = this;
  this.$ranges.forEach(function (rangeElt, i) {
    var range = thisC.ranges[i];
    rangeElt.box.x = colWidth * (i + 0.5);
    var yMin, yMax, yMid, yNormal;

    if (isNumber(range.min) && rangeElt.$minLine) {
      yMin = -thisC.mapOYValue(range.min);
      moveHLine(rangeElt.$minLine, -thisC.limitLineLength / 2, yMin, thisC.limitLineLength);
    }

    if (isNumber(range.max) && rangeElt.$maxLine) {
      yMax = -thisC.mapOYValue(range.max);
      moveHLine(rangeElt.$maxLine, -thisC.limitLineLength / 2, yMax, thisC.limitLineLength);
    }

    if (isNumber(range.mid) && rangeElt.$midLine) {
      yMid = -thisC.mapOYValue(range.mid);
      moveHLine(rangeElt.$midLine, -thisC.limitLineLength / 2, yMid, thisC.limitLineLength);
    }

    if (isNumber(range.normal) && rangeElt.$plot) {
      yNormal = -thisC.mapOYValue(range.normal);
      rangeElt.$plot.attr('cy', yNormal);
    }

    if (isNumber(range.min) && isNumber(range.max)) {
      rangeElt.$rect.attr({
        x: -thisC.limitLineLength / 2,
        y: yMax,
        height: yMin - yMax,
        width: thisC.limitLineLength
      });
    }
  });
};

RangeChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);
  this.createOxTable();
  this.createOxLabel();
  this.createAxisName();
  this.createRanges();
};

RangeChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);
  this.updateAxisX();
  this.updateOxTablePosition();
  this.updateAxisY();

  this._updateOYValuePosition();

  this.updateRangesPosition();
};

RangeChart.prototype._createLimitLine = function (x, y, length, eClss) {
  return hline(x, y, length, ['range-chart-limit-line'].concat(eClss ? [eClss] : []));
};

RangeChart.prototype.numberToText = src_VerticalChart.prototype.numberToText;
/***
 *
 * @param range
 * @return {GContainer}
 * @private
 */

RangeChart.prototype._createRange = function (range) {
  var res = RangeChart_({
    tag: svg_GContainer.tag
  });

  if (isNumber(range.max) && isNumber(range.min)) res.$rect = RangeChart_('rect.vc-range-rect').addTo(res);
  if (isNumber(range.max)) res.$maxLine = this._createLimitLine(-this.limitLineLength / 2, 0, this.limitLineLength, 'max').addTo(res);
  if (isNumber(range.mid)) res.$midLine = this._createLimitLine(-this.limitLineLength / 2, 0, this.limitLineLength, 'mid').addTo(res);
  if (isNumber(range.min)) res.$minLine = this._createLimitLine(-this.limitLineLength / 2, 0, this.limitLineLength, 'min').addTo(res);
  if (isNumber(range.normal)) res.$plot = circle(0, 0, this.valuePlotRadius, 'range-chart-value-plot').addTo(res);
  return res;
};

src_VCore.install(RangeChart);
src_VCore.install('ostickchart', function () {
  return RangeChart_('rangechart.base-chart.o-stick-chart', true);
});
;// CONCATENATED MODULE: ./src/AssessmentChart.js









var AssessmentChart_ = src_VCore._;
var AssessmentChart_$ = src_VCore.$;
/***
 * or RadaChart
 * @extends BChart
 * @constructor
 */

function AssessmentChart() {
  src_BChart.call(this);
  this.rangePlotRadius = 5; //? not display

  this.rangeFillColor = null;
  this.rangeFillColor = null;
  this.rangeMaxStrokeColor = Color/* default.parse */.Z.parse('rgba(255, 150, 0, 0.3)');
  this.rangeMinStrokeColor = Color/* default.parse */.Z.parse('rgba(200, 200, 0, 0.3)');
  /**
   *
   * @type {{values:number[], name: string, stroke: Color|string, fill:Color|string, color:Color|string}[]}
   */

  this.areas = [];
  this.ranges = [];
  /***
   *
   * @type {string[]}
   */

  this.keys = [];
  this.levels = [];
  /***
   *
   * @type {null|[]}
   */

  this.axisWeight = null;
  /***
   *
   * @type {GContainer}
   */

  this.$netCtn = AssessmentChart_('gcontainer.vc-assessment-net-ctn');
  this.$netCtn = AssessmentChart_('gcontainer.vc-assessment-net-ctn');
  this.$body.addChild(this.$netCtn);
  this.$netCtn.box.setPosition(200, 200);
  this.$axisCnt = AssessmentChart_('gcontainer.vc-assessment-axis-ctn');
  this.$levelValueCnt = AssessmentChart_('gcontainer.vc-assessment-axis-level-ctn');
  this.$levelCnt = AssessmentChart_('gcontainer.vc-assessment-level-ctn');
  this.$areaCtn = AssessmentChart_('gcontainer.vc-assessment-area-ctn');
  this.$rangeCtn = AssessmentChart_('gcontainer.vc-assessment-range-ctn');
  this.$netCtn.addChild(this.$levelCnt);
  this.$netCtn.addChild(this.$axisCnt);
  this.$netCtn.addChild(this.$rangeCtn);
  this.$netCtn.addChild(this.$areaCtn);
  this.$netCtn.addChild(this.$levelValueCnt);
}

OOP/* default.mixClass */.ZP.mixClass(AssessmentChart, src_BChart);
AssessmentChart.property = Object.assign({}, src_BChart.property);
AssessmentChart.eventHandler = Object.assign({}, src_BChart.eventHandler);
AssessmentChart.tag = 'AssessmentChart'.toLowerCase();

AssessmentChart.render = function () {
  return src_BChart.render().addClass('vc-assessment-chart');
};

AssessmentChart.prototype.dataKeys = ['title', 'simpleMode ', 'keys ', 'rangeFillColor'];

AssessmentChart.prototype.normalizeData = function () {
  var thisC = this; // fill: area.fill || this.autoColor(i, 0.3),
  //     stroke: area.stroke || this.autoColor(i, 0.8),

  this.areas.forEach(function (area, i) {
    var color = area.color || area.stroke || area.fill || thisC.autoColor(i);
    color = Color/* default.parse */.Z.parse(color + '');
    color.rgba[3] = 1;
    var strokeColor = color.clone();
    strokeColor.rgba[3] = 0.8;
    var filColor = color.clone();
    filColor.rgba[3] = 0.3;

    if (area.color) {
      area.fill = area.fill || filColor;
      area.stroke = area.stroke || strokeColor;
    } else {
      if (area.stroke) {
        area.fill = area.fill || 'none';
      } else if (area.fill) {
        area.stroke = area.stroke || 'none';
      } else {
        area.fill = filColor;
        area.stroke = strokeColor;
      }

      area.color = color;
    }
  });
};

AssessmentChart.prototype.computeNotes = function () {
  return this.areas.map(function (area) {
    return {
      type: 'stroke',
      color: area.color,
      text: area.name
    };
  }).filter(function (it) {
    return !!it.text;
  });
};

AssessmentChart.prototype._createAxis = function () {
  this.$axisCnt.clearChild();
  this.$axisLines = this.keys.map(function (u, i) {
    var res = AssessmentChart_('hlinearrow');

    res.resize(200);
    res.attr('transform', rotate(-90 + i * 360 / this.keys.length));
    res.addTo(this.$axisCnt);
    return res;
  }.bind(this));
  this.$axisNames = this.keys.map(function (key, i, arr) {
    var anchor = 'start';
    if (i === 0 || i === arr.length / 2) anchor = 'middle';else if (i > arr.length / 2) anchor = 'end';
    return AssessmentChart_({
      tag: 'text',
      attr: {
        x: 0,
        y: 0
      },
      style: {
        textAnchor: anchor
      },
      child: {
        text: key
      }
    }).addTo(this.$axisCnt);
  }.bind(this));
  this.$levelCnt.clearChild();
  this.$levels = this.levels.map(function (level, i, levels) {
    return AssessmentChart_('path.vc-assessment-chart-level' + (i + 1 == levels.length ? '.last' : '')).addTo(this.$levelCnt);
  }.bind(this));
  this.computedData.axisNameSize = this.$axisNames.map(function (elt) {
    var box = elt.getBBox();
    return {
      width: box.width,
      height: box.height
    };
  });
  this.$levelValueCnt.clearChild();
  this.$levelValues = this.levels.map(function (level) {
    return this._createLevelValue(level).addTo(this.$levelValueCnt);
  }.bind(this));
};

AssessmentChart.prototype._createAreas = function () {
  this.$areaCtn.clearChild();
  this.$areas = this.areas.map(function (area, i, arr) {
    return AssessmentChart_('path.vc-assessment-chart-area').addTo(this.$areaCtn).addStyle({
      fill: area.fill,
      stroke: area.stroke
    });
  }.bind(this));
};

AssessmentChart.prototype._createRanges = function () {
  this.$rangeCtn.clearChild();

  if (this.ranges && this.ranges.length > 0) {
    this.$rangeArea = AssessmentChart_('shape.vc-assessment-chart-range-area').addStyle('fill-rule', "evenodd").addTo(this.$rangeCtn);

    if (this.rangeFillColor) {
      var rangeFillColor = Color/* default.parse */.Z.parse(this.rangeFillColor + '');
      rangeFillColor.rgba[3] = 0.3;
      this.$rangeArea.addStyle({
        fill: rangeFillColor.toString()
      });
    }

    this.$ranges = this.ranges.map(function (range, i, arr) {
      return this._createRangeLine().addTo(this.$rangeCtn);
    }.bind(this));
    this.$rangeMax = AssessmentChart_('shape.vc-assessment-chart-range-area-stroke').addTo(this.$rangeCtn).addStyle({
      stroke: this.rangeMaxStrokeColor || 'rgba(255, 150, 0, 0.3)'
    });
    this.$rangeMin = AssessmentChart_('shape.vc-assessment-chart-range-area-stroke').addTo(this.$rangeCtn).addStyle({
      stroke: this.rangeMinStrokeColor || 'rgba(200, 200, 0, 0.3)'
    });
  }
};

AssessmentChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createAxis();

  this._createRanges();

  this._createAreas();
};

AssessmentChart.prototype._createLevelValue = function (value) {
  var res = AssessmentChart_('gcontainer.vc-assessment-chart-level-value');

  res.$bound = rect(0, -6, 0, 13).attr({
    rx: '4',
    ry: '4'
  }).addTo(res);
  res.$text = helper_text(value + '', 0, 4).attr({
    'text-anchor': 'middle'
  }).addTo(res);
  if (value === '' || value === undefined || value === null) res.addStyle('visibility', 'hidden');
  return res;
};

AssessmentChart.prototype.autoColor = function (index, alpha) {
  var hsla = [index / this.areas.length, 0.8, 0.5, alpha === undefined ? 1 : alpha];
  var c = Color/* default.fromHSLA */.Z.fromHSLA(hsla[0], hsla[1], hsla[2], hsla[3]);
  return c.toString('rgba');
};

AssessmentChart.prototype.mapAngle = function (i, deg) {
  return (-90 + i * 360 / this.keys.length) * (deg ? 1 : Math.PI / 180);
};

AssessmentChart.prototype.mapRadius = function (level) {
  return this.computedData.axisLength * (level / (this.levels.length - 1));
};

AssessmentChart.prototype.mapLevel = function (value) {
  if (this.isMappingLevel) {
    if (value < this.levelMappingArray[0]) return map(value, this.levelMappingArray[0], this.levelMappingArray[1], 0, 1);
    if (value > this.levelMappingArray[this.levels.length - 1]) return map(value, this.levelMappingArray[this.levels.length - 2], this.levelMappingArray[this.levels.length - 1], 0, 1);

    for (var i = 1; i < this.levels.length; ++i) {
      if (value >= this.levelMappingArray[i - 1] && value <= this.levelMappingArray[i]) return map(value, this.levelMappingArray[i - 1], this.levelMappingArray[i], i - 1, i);
    }
  } else {
    return value;
  }
};

AssessmentChart.prototype._createRangeLine = function () {
  var res = AssessmentChart_({
    tag: 'g',
    "class": 'vc-assessment-chart-range-segment'
  });

  res.$min = circle(0, 0, this.rangePlotRadius, 'vc-assessment-chart-range-plot').addTo(res);
  res.$max = circle(0, 0, this.rangePlotRadius, 'vc-assessment-chart-range-plot').addTo(res);
  res.$line = AssessmentChart_('path.vc-assessment-chart-range-line').addTo(res);
  return res;
};
/**
 * @param {Array<Rectangle>} rects
 * @returns {Rectangle}
 */


AssessmentChart.prototype._expectSize = function (rects, r) {
  var cr = new Math_Rectangle/* default */.Z(0, 0, 0, 0);
  var rect;

  for (var i = 0; i < rects.length; ++i) {
    var angle = Math.PI * 2 * i / rects.length - Math.PI / 2;
    rect = rects[i];

    if (i == 0) {
      rect.x = rect.width / 2;
      rect.y = -rect.height - r - 7;
    } else if (rects.length % 4 == 0 && i == rects.length >> 2) {
      rect.x = r;
      rect.y = rect.height / 2;
    } else if (rects.length % 4 == 0 && i == (rects.length >> 2) * 3) {
      rect.x = -r - rect.width;
      rect.y = rect.height / 2;
    } else if (rects.length % 2 == 0 && i == rects.length >> 1) {
      rect.x = rect.width / 2;
      rect.y = r + 7;
    } else if (i < rects.length / 4) {
      rect.x = r * Math.cos(angle);
      rect.y = r * Math.sin(angle) - rect.height;
    } else if (i < rects.length / 2) {
      rect.x = r * Math.cos(angle);
      rect.y = r * Math.sin(angle);
    } else if (i < rects.length / 4 * 3) {
      rect.x = r * Math.cos(angle) - rect.width;
      rect.y = r * Math.sin(angle);
    } else {
      rect.x = r * Math.cos(angle) - rect.width;
      rect.y = r * Math.sin(angle) - rect.height;
    }

    cr = cr.merge(rect);
  }

  return cr;
};

AssessmentChart.prototype._computedNetSize = function () {
  var rects = this.computedData.axisNameSize.map(function (box) {
    return new Math_Rectangle/* default */.Z(0, 0, box.width, box.height);
  });
  var aWidth = this.$body.box.width;
  var aHeight = this.$body.box.height;
  var maxR = Math.min(aWidth, this.$body.box.height) / 2;
  var minR = 20; //

  while (maxR - minR > 3) {
    var midR = (minR + maxR) / 2;

    var size = this._expectSize(rects, midR);

    if (size.width < aWidth && size.height < aHeight) {
      minR = midR;
    } else {
      maxR = midR;
    }
  }

  this.computedData.expectedSize = this._expectSize(rects, minR);
  this.computedData.expectedRadius = minR;
  this.computedData.axisLength = this.computedData.expectedRadius - 30;
};

AssessmentChart.prototype._updateAxisPosition = function () {
  var axisLength = this.computedData.axisLength;
  this.$axisLines.forEach(function ($axisLine) {
    $axisLine.resize(axisLength + 20);
  }.bind(this));

  if (this.axisWeight && this.axisWeight.forEach) {
    this.axisWeight.forEach(function (value, i) {
      var axisLineElt = this.$axisLines[i];

      if (axisLineElt) {
        if (value >= 0) {
          axisLineElt.addStyle('strokeWidth', value + '');
        } else {
          axisLineElt.remove('strokeWidth');
        }
      }
    }.bind(this));
  }

  this.$axisNames.forEach(function ($axisName, i) {
    var angle = (-90 + i * 360 / this.keys.length) * Math.PI / 180;
    var x = (axisLength + 30) * Math.cos(angle);
    var y = (axisLength + 30) * Math.sin(angle) + 5;

    if (this.keys.length % 2 == 0 && i == this.keys.length >> 1) {
      y += 7;
    } else if (i == 0) {
      y -= 7;
    }

    $axisName.attr({
      x: x,
      y: y
    });
  }.bind(this));
  this.$levels.forEach(function ($level, level) {
    var points = this.keys.reduce(function (ac, value, i) {
      var angle = this.mapAngle(i);
      var x = this.mapRadius(level) * Math.cos(angle);
      var y = this.mapRadius(level) * Math.sin(angle);
      ac.push(x + ' ' + y);
      return ac;
    }.bind(this), []);
    var d = 'M' + points.join('L') + 'Z';
    $level.attr('d', d);
  }.bind(this));
  var levelValueWidth = this.$levelValues.reduce(function (w, $levelValue) {
    return Math.max(w, $levelValue.$text.getBBox().width + 4);
  }, 0);

  if (this.mapRadius(1) - this.mapRadius(0) > 13) {
    this.$levelValues.forEach(function ($levelValue, i) {
      $levelValue.$bound.attr({
        x: -levelValueWidth / 2,
        width: levelValueWidth
      });
      $levelValue.attr('transform', translate(0, -this.mapRadius(i)));
    }.bind(this));
  } else {
    this.$levelValues.forEach(function ($levelValue, i) {
      $levelValue.addStyle('display', 'none');
    }.bind(this));
  }

  var contentBound = new Math_Rectangle/* default */.Z(0, 0, this.$body.box.width, this.$body.box.height);
  var centerBound = contentBound.centerPoint();
  this.$netCtn.box.setPosition(centerBound.x + (-this.computedData.expectedSize.x - this.computedData.expectedSize.width / 2), centerBound.y + (-this.computedData.expectedSize.y - this.computedData.expectedSize.height / 2));
};

AssessmentChart.prototype._updateAreaPosition = function () {
  this.$areas.forEach(function ($area, i) {
    var area = this.areas[i];
    var points = area.values.reduce(function (ac, value, i) {
      var angle = this.mapAngle(i);
      var level = this.mapLevel(value);
      var x = this.mapRadius(level) * Math.cos(angle);
      var y = this.mapRadius(level) * Math.sin(angle);
      ac.push(x + ' ' + y);
      return ac;
    }.bind(this), []);
    var d = 'M' + points.join('L') + 'Z';
    $area.attr('d', d);

    if (typeof area.strokeWidth == "number") {
      $area.addStyle('stroke-width', area.strokeWidth + '');
    }
  }.bind(this));
};

AssessmentChart.prototype._updateRangePosition = function () {
  if (this.ranges && this.ranges.length > 0) {
    this.$ranges.forEach(function ($range, i) {
      var range = this.ranges[i];
      var angle = this.mapAngle(i);
      var levelMax = this.mapLevel(range[1]);
      var xMax = this.mapRadius(levelMax) * Math.cos(angle);
      var yMax = this.mapRadius(levelMax) * Math.sin(angle);
      $range.$max.attr({
        cx: xMax,
        cy: yMax
      });
      var levelMin = this.mapLevel(range[0]);
      var xMin = this.mapRadius(levelMin) * Math.cos(angle);
      var yMin = this.mapRadius(levelMin) * Math.sin(angle);
      $range.$min.attr({
        cx: xMin,
        cy: yMin
      });
      $range.$line.attr('d', 'M' + xMin + ' ' + yMin + 'L' + xMax + ' ' + yMax);
    }.bind(this));
    this.$rangeArea.begin();
    this.$rangeMax.begin();
    this.$rangeMin.begin();
    this.ranges.forEach(function (range, i, arr) {
      var angle = this.mapAngle(i);
      var levelMax = this.mapLevel(range[1]);
      var xMax = this.mapRadius(levelMax) * Math.cos(angle);
      var yMax = this.mapRadius(levelMax) * Math.sin(angle);

      if (i == 0) {
        this.$rangeArea.moveTo(xMax, yMax);
        this.$rangeMax.moveTo(xMax, yMax);
      } else {
        this.$rangeArea.lineTo(xMax, yMax);
        this.$rangeMax.lineTo(xMax, yMax);
      }

      if (i + 1 == arr.length) {
        this.$rangeArea.closePath();
        this.$rangeMax.closePath();
      }
    }.bind(this));
    this.ranges.forEach(function (range, i, arr) {
      var angle = this.mapAngle(i);
      var levelMax = this.mapLevel(range[0]);
      var xMin = this.mapRadius(levelMax) * Math.cos(angle);
      var yMin = this.mapRadius(levelMax) * Math.sin(angle);

      if (i == 0) {
        this.$rangeArea.moveTo(xMin, yMin);
        this.$rangeMin.moveTo(xMin, yMin);
      } else {
        this.$rangeArea.lineTo(xMin, yMin);
        this.$rangeMin.lineTo(xMin, yMin);
      }

      if (i + 1 == arr.length) {
        this.$rangeArea.closePath();
        this.$rangeMin.closePath();
      }
    }.bind(this));
    this.$rangeMax.end();
    this.$rangeMin.end();
    this.$rangeArea.end();
  }
};

AssessmentChart.prototype._updatePrintViewport = function () {
  var children = Array.prototype.slice.call(this.childNodes);
  var bound = children.reduce(function (ac, cr) {
    var bbox = cr.getBBox();
    if (bbox.width === 0 || bbox.height === 0) return ac;
    var rect = getGlobalBBox(cr);
    if (!ac) return rect;
    return ac.merge(rect);
  }, null);

  if (bound) {
    this.attr('data-print-view-box', Math.floor(bound.x) - 0.5 + ' ' + (Math.floor(bound.y) - 0.5) + ' ' + Math.ceil(bound.width + 1) + ' ' + Math.ceil(bound.height + 1));
  } else this.attr('data-print-view-box', null);
};

AssessmentChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._computedNetSize();

  this._updateAxisPosition();

  this._updateAreaPosition();

  this._updateRangePosition();

  this._updatePrintViewport();
};

AssessmentChart.prototype.updateContent = function () {
  this.prepareData();
  src_BChart.prototype.updateContent.call(this);
};

AssessmentChart.prototype.prepareData = function () {
  this.levelMappingArray = this.levels.map(function (value) {
    return parseFloat(value + '');
  });
  this.isMappingLevel = this.levelMappingArray.reduce(function (ac, cr) {
    return ac && !isNaN(cr);
  }, true);
};

AssessmentChart.property.simpleMode = {
  set: function set(value) {
    if (value) this.addClass('simple-mode');else this.removeClass('simple-mode');
  },
  get: function get() {
    return this.containsClass('simple-mode');
  }
};
AssessmentChart.property.rangeSegment = {
  set: function set(value) {
    if (value) this.addClass('show-range-segment');else this.removeClass('show-range-segment');
  },
  get: function get() {
    return this.containsClass('show-range-segment');
  }
};
src_VCore.install(AssessmentChart);
/* harmony default export */ const src_AssessmentChart = (AssessmentChart);
;// CONCATENATED MODULE: ./src/ColumnChart.js





var ColumnChart_ = src_VCore._;
var ColumnChart_$ = src_VCore.$;
/***
 *
 * @returns {VerticalChart}
 * @constructor
 */

function ColumnChart() {
  src_VerticalChart.call(this);
  this.values = [];
  this.$columnCtn = ColumnChart_('gcontainer.vc-column-ctn');
  this.$oxySpace.addChild(this.$columnCtn);
  if (!this.numberToString) this.numberToString = function (value) {
    return numberToString.apply(this, arguments);
  };
}

ColumnChart.property = Object.assign({}, src_VerticalChart.property);
ColumnChart.eventHandler = Object.assign({}, src_VerticalChart.eventHandler);
OOP/* default.mixClass */.ZP.mixClass(ColumnChart, src_VerticalChart);
ColumnChart.tag = 'ColumnChart'.toLowerCase();

ColumnChart.render = function () {
  return src_VerticalChart.render().addClass('vc-column-chart');
};

ColumnChart.prototype.dataKeys = src_VerticalChart.prototype.dataKeys.concat(['values', 'oxColWidth']);

ColumnChart.prototype.computeMinMax = function () {
  this.computedData.min = this.values.filter(isNumber).reduce(function (ac, cr) {
    return Math.min(ac, cr);
  }, 1000000000);
  this.computedData.max = this.values.filter(isNumber).reduce(function (ac, cr) {
    return Math.max(ac, cr);
  }, -1000000000);
};

ColumnChart.prototype.createContent = function () {
  src_VerticalChart.prototype.createContent.call(this);

  this._createColumns();
};

ColumnChart.prototype._createColumn = function (value, i, color) {
  var res = ColumnChart_('gcontainer.vc-column');

  res.$rect = rect(-this.oxColWidth / 2, 0, this.oxColWidth, 10).addTo(res);

  if (value === 0) {
    res.addClass('vc-value-zero');
  }

  res.$value = helper_text(this.numberToString(value) + '', 0, 0).attr('text-anchor', 'middle').addTo(res);

  if (color) {
    res.$rect.addStyle('fill', color);
  }

  return res;
};

ColumnChart.prototype._createColumns = function () {
  this.$columnCtn.clearChild();
  this.$columnes = this.values.map(function (value, i) {
    return this._createColumn(value, i, this.columnColors && this.columnColors[i]).addTo(this.$columnCtn);
  }.bind(this));
};

ColumnChart.prototype.updateBodyPosition = function () {
  src_VerticalChart.prototype.updateBodyPosition.call(this);

  this._updateColumnPosition();
};

ColumnChart.prototype._updateColumnPosition = function () {
  this.$columnes.forEach(function ($column, i) {
    if (isNumber(this.values[i])) {
      $column.removeStyle('display');
      var height = this.mapOYValue(this.values[i]); // x: (i + 0.5) * this.oxSegmentLength - this.columnWidth / 2

      $column.$rect.attr({
        height: height,
        y: -height
      });
      $column.$value.attr('y', -height - 4);
      $column.attr({
        transform: translate((i + 0.5) * this.computedData.oxSegmentLength, 0)
      });
    } else {
      $column.addStyle('display', 'none');
    }
  }.bind(this));
};

src_VCore.install(ColumnChart);
/* harmony default export */ const src_ColumnChart = (ColumnChart);
;// CONCATENATED MODULE: ./src/ColumnAreaChart.js








var ColumnAreaChart_ = src_VCore._;
var ColumnAreaChart_$ = src_VCore.$;
/***
 * @extends  ColumnChart
 * @constructor
 */

function ColumnAreaChart() {
  src_ColumnChart.call(this);
  this.$areaCtn = ColumnAreaChart_('gcontainer.vc-area-ctn');
  this.$oxySpace.addChildBefore(this.$areaCtn, this.$columnCtn);
  this.areas = [];
}

OOP/* default.mixClass */.ZP.mixClass(ColumnAreaChart, src_ColumnChart);
ColumnAreaChart.property = Object.assign({}, src_ColumnChart.property);
ColumnAreaChart.eventHandler = Object.assign({}, src_ColumnChart.eventHandler);
ColumnAreaChart.tag = 'ColumnAreaChart'.toLowerCase();

ColumnAreaChart.render = function () {
  return src_ColumnChart.render().addClass('vc-column-area-chart');
};

ColumnAreaChart.prototype.dataKeys = src_ColumnChart.prototype.dataKeys.concat(['areas']);

ColumnAreaChart.prototype.computeMinMax = function () {
  src_ColumnChart.prototype.computeMinMax.call(this);
  this.computedData.min = this.areas.reduce(function (minValue, area) {
    return area.values.filter(isNumber).reduce(function (minValue, value) {
      if (!isNumber(value)) return minValue;
      return Math.min(minValue, value);
    }, minValue);
  }, this.computedData.min);
  this.computedData.max = this.areas.reduce(function (maxValue, area) {
    return area.values.filter(isNumber).reduce(function (maxValue, value) {
      if (!isNumber(value)) return maxValue;
      return Math.max(maxValue, value);
    }, maxValue);
  }, this.computedData.max);
};

ColumnAreaChart.prototype.computeNotes = function () {
  return this.areas.map(function (area) {
    return {
      text: area.name,
      type: 'rect',
      color: area.color
    };
  });
};

ColumnAreaChart.prototype._createArea = src_DualChart.prototype._createArea;
ColumnAreaChart.prototype._createAreaNote = src_DualChart.prototype._createAreaNote;

ColumnAreaChart.prototype._createAreas = function () {
  this.$areaCtn.clearChild();
  this.$areas = this.areas.map(function (area, i) {
    return this._createArea(area, area.color).addTo(this.$areaCtn);
  }.bind(this));
};

ColumnAreaChart.prototype.createContent = function () {
  src_ColumnChart.prototype.createContent.call(this);

  this._createAreas();
};

ColumnAreaChart.prototype._updateAreaPosition = function () {};

ColumnAreaChart.prototype.updateBodyPosition = function () {
  src_ColumnChart.prototype.updateBodyPosition.call(this);

  this._updateAreaPosition();

  this._updateAreaPosition();
};

ColumnAreaChart.prototype._updateAreaPosition = function () {
  var oxSegmentLength = this.computedData.oxSegmentLength;
  this.$areas.map(function ($area, i) {
    var values = this.areas[i].values;
    var subAreas = getSubNumberArray(values);
    $area.begin();
    subAreas.forEach(function (subArea) {
      var start = subArea.start;
      var values = subArea.values;

      if (values.length > 1) {
        $area.moveTo(oxSegmentLength * (start + 0.5), -1);

        for (var xi = 0; xi < values.length; ++xi) {
          $area.lineTo(oxSegmentLength * (start + xi + 0.5), -this.mapOYValue(values[xi]));
        }

        $area.lineTo(oxSegmentLength * (start + values.length - 1 + 0.5), -1);
        $area.closePath();
      } else {
        $area.moveTo(oxSegmentLength * (start + 0.25), -1);
        $area.lineTo(oxSegmentLength * (start + 0.25), -this.mapOYValue(values[0]));
        $area.lineTo(oxSegmentLength * (start + 0.75), -this.mapOYValue(values[0]));
        $area.lineTo(oxSegmentLength * (start + 0.75), -1);
        $area.closePath();
      }
    }.bind(this));
    $area.end();
  }.bind(this));
};

svg_Core.install(ColumnAreaChart);
/* harmony default export */ const src_ColumnAreaChart = (ColumnAreaChart);
;// CONCATENATED MODULE: ./src/RangeGroupChart.js



var RangeGroupChart_ = src_VCore._;
var RangeGroupChart_$ = src_VCore.$;

function RangeGroupChart() {
  var res = RangeGroupChart_('basechart', true);

  return res;
}

;

RangeGroupChart.prototype._createNote = function () {
  var res = RangeGroupChart_('g');

  res.$maxLine = hline(0, 7, 40, ['range-group-chart-limit-line', 'max']).addTo(res);
  res.$maxText = helper_text(this.maxText, 50, 12).addTo(res);
  res.$minLine = hline(200, 7, 40, ['range-group-chart-limit-line', 'min']).addTo(res);
  res.$minText = helper_text(this.minText, 250, 12).addTo(res);
  return res;
};

RangeGroupChart.prototype._createMember = function (member) {
  var res = RangeGroupChart_('g');

  res.$plot = circle(this.plotRadius, 0, this.plotRadius, 'range-group-chart-plot').addTo(res);
  res.$value = helper_text(this.numberToString(member.value), this.plotRadius * 2 + 8, 5).addTo(res);
  res.$nameContainer = RangeGroupChart_('g').addTo(res).attr('transform', 'rotate(45)');
  res.$name = helper_text(member.name, this.plotRadius, 10).addTo(res.$nameContainer);
  return res;
};

RangeGroupChart.prototype._createRange = function (range) {
  var res = RangeGroupChart_('g');

  res.$lineLeft = hline(0, 0, 0, 'range-group-chart-range-line').addTo(res);
  res.$lineRight = hline(0, 0, 0, 'range-group-chart-range-line').addTo(res);
  res.$maxLine = hline(10, -this.paddingnAxisBottom, this.rangePaddingH * 2, ['range-group-chart-limit-line', 'max']).addTo(res);
  res.$minLine = hline(10, -this.paddingnAxisBottom, this.rangePaddingH * 2, ['range-group-chart-limit-line', 'min']).addTo(res);
  res.$max = helper_text(this.numberToString(range.max), 0, 0).attr('text-anchor', 'middle').addTo(res);
  res.$min = helper_text(this.numberToString(range.min), 0, 0).attr('text-anchor', 'middle').addTo(res);
  res.$members = range.members.map(function (member) {
    return this._createMember(member).addTo(res);
  }.bind(this));
  res.$name = helper_text(range.name, 0, 0).attr('text-anchor', 'middle').addTo(res);
  return res;
};

RangeGroupChart.prototype.processMinMax = function () {
  this["super"]();
  this.maxValue = this.ranges.reduce(function (max, range) {
    return range.members.reduce(function (max, member, i) {
      return Math.max(max, member.value);
    }.bind(this), Math.max(max, range.max, range.normal));
  }.bind(this), -1000000000);
  this.minValue = this.ranges.reduce(function (min, range) {
    return range.members.reduce(function (min, member) {
      return Math.min(min, member.value);
    }.bind(this), Math.min(min, range.min, range.normal));
  }.bind(this), 1000000000);
};

RangeGroupChart.prototype.preInit = function () {
  this["super"]();
  this.paddingnAxisBottom = 40;
  this.rangePaddingH = 10;
  this.plotRadius = 6;
  this.rangeMarginH = 10;
  this.memberMarginH = 5;
};

RangeGroupChart.prototype.initBackComp = function () {
  this["super"]();
  this.$note = this._createNote().addTo(this);
};

RangeGroupChart.prototype.updateBackComp = function () {
  var noteBBox = this.$note.getBBox();
  this.$note.attr('transform', translate(0, this.canvasHeight - noteBBox.height - 5));
  var x = 50 + this.$note.$maxText.getBBox().width + 40;
  moveHLine(this.$note.$minLine, x, 7, 40);
  this.$note.$minText.attr('x', x + 50);
  this.oxyBottom = this.canvasHeight - noteBBox.height - 30;
  this.memberNameHeight = this.$ranges.reduce(function (memberHeight, $range) {
    return $range.$members.reduce(function (memberHeight, $member) {
      return Math.max(memberHeight, $member.$nameContainer.getBBox().width / 1.4);
    }, memberHeight);
  }, 0);
  this.oxyBottom -= this.memberNameHeight + 25;
  this["super"]();
};

RangeGroupChart.prototype.initComp = function () {
  this.$ranges = this.ranges.map(function (range) {
    return this._createRange(range).addTo(this.$content);
  }.bind(this));
};

RangeGroupChart.prototype.updateComp = function () {
  var memberWidth = this.$ranges.reduce(function (memberWidth, $range) {
    return $range.$members.reduce(function (memberWidth, $member) {
      return Math.max(memberWidth, $member.getBBox().width);
    }, memberWidth);
  }, 0);
  this.oxContentLength = this.$ranges.reduce(function (oxContentLength, $range, rangeIndex) {
    oxContentLength += this.rangeMarginH;
    var range = this.ranges[rangeIndex];
    $range.attr('transform', translate(oxContentLength, 0));
    var rangeWidth = $range.$members.reduce(function (rangeWidth, $member, memberIndex) {
      rangeWidth += this.memberMarginH;
      var member = range.members[memberIndex];
      $member.attr('transform', translate(rangeWidth, 0));
      $member.$plot.attr('cy', this.mapOYValue(member.value));
      $member.$value.attr('y', this.mapOYValue(member.value) + 5);
      rangeWidth += memberWidth;
      rangeWidth += this.memberMarginH;
      return rangeWidth;
    }.bind(this), this.rangePaddingH) + this.rangePaddingH;
    moveHLine($range.$maxLine, 0, this.mapOYValue(range.max), rangeWidth);
    moveHLine($range.$minLine, 0, this.mapOYValue(range.min), rangeWidth);
    var rangeHeight = this.mapOYValue(range.max) - this.mapOYValue(range.min);
    moveVLine($range.$lineLeft, 0, this.mapOYValue(range.min), rangeHeight);
    moveVLine($range.$lineRight, rangeWidth, this.mapOYValue(range.min), rangeHeight);
    $range.$name.attr({
      x: rangeWidth / 2,
      y: this.memberNameHeight + 25
    });
    oxContentLength += rangeWidth;
    $range.$max.attr({
      x: rangeWidth / 2,
      y: this.mapOYValue(range.max) - 5
    });
    $range.$min.attr({
      x: rangeWidth / 2,
      y: this.mapOYValue(range.min) + 15
    });
    oxContentLength += this.rangeMarginH;
    return oxContentLength;
  }.bind(this), 0);
};

src_VCore.creator.rangegroupchart = RangeGroupChart;
/* harmony default export */ const src_RangeGroupChart = ((/* unused pure expression or super */ null && (RangeGroupChart)));
;// CONCATENATED MODULE: ./src/CurveChart.js


/**
 *
 * @returns {LineChart}
 * @constructor
 */

function CurveChart() {}

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

CurveChart.render = function () {
  return src_VCore._('linechart', true);
};

CurveChart.prototype.updateComp = function () {
  this.$lines.map(function ($line, i) {
    var line = this.lines[i];
    $line.$plots.forEach(function ($plot, j) {
      var value = line.values[j];
      $plot.attr({
        cx: this.oxSegmentLength * (j + 0.5),
        cy: this.mapOYValue(value)
      });
    }.bind(this));
    var points = line.values.map(function (value, j) {
      var y = this.mapOYValue(value);
      var x = this.oxSegmentLength * (j + 0.5);
      return [x, y];
    }.bind(this));
    var d = autoCurve(points, 0.5, 0.000001);
    $line.$path.attr('d', d);
  }.bind(this));
};

src_VCore.creator.curvechart = CurveChart;
/* harmony default export */ const src_CurveChart = ((/* unused pure expression or super */ null && (CurveChart)));
;// CONCATENATED MODULE: ./src/RankChart.js










var RankChart_ = src_VCore._;
var RankChart_$ = src_VCore.$;
/***
 * @extends BChart
 * @constructor
 */

function RankChart() {
  src_BChart.call(this);
  OOP/* default.drillProperty */.ZP.drillProperty(this, this, 'numberToString', 'numberToText');
  this.colors = ['transparent', 'rgb(201, 241, 253)', 'rgb(212, 227, 252)', 'rgb(218, 202, 251)', 'rgb(242, 201, 251)', 'rgb(255, 218, 216)', 'rgb(255, 236, 215)', 'rgb(254, 252, 224)', 'rgb(223, 237, 214)', 'rgb(77, 215, 250)', 'rgb(117, 169, 249)', 'rgb(139, 81, 245)', 'rgb(215, 87, 246)', 'rgb(255, 138, 132)', 'rgb(152, 165, 52)', 'rgb(254, 248, 160)', 'rgb(174, 221, 148)', 'rgb(0, 164, 221)', 'rgb(20, 100, 246)', 'rgb(156, 41, 183)'];
  this.computedData.oyUpdated = false;
  this.computedData.oy = {};
  this.computedData.numberToFixed = 0;
  this.integerOnly = false;
  this.positions = [];
  this.valueName = '';
  this.plotRadius = 9;
  this.zeroOY = true;
  this.extendOY = true;
  this.computedData.paddingAxisBottom = this.plotRadius + 30;
  this.$axisCtn = RankChart_({
    tag: svg_GContainer.tag,
    "class": 'vc-axis-ctn',
    child: [{
      tag: 'gcontainer',
      "class": 'vc-oxy-space',
      child: ['gcontainer.vc-ox-label-ctn', 'gcontainer.vc-rank-list-ctn']
    }, {
      tag: 'path',
      "class": 'vc-white-mask',
      attr: {
        fill: 'white',
        stroke: 'white',
        'fill-rule': 'evenodd',
        d: 'M0,0  0,2000 2000,2000 2000,0zM100,0  0,200 200,200 200,0z'
      }
    }, 'axis', {
      tag: 'text',
      "class": 'vc-key-name',
      attr: {
        y: 14,
        x: 5
      },
      child: {
        text: ''
      }
    }, 'scrollarrow', 'hscrollbar', {
      tag: 'text',
      "class": 'vc-value-name',
      attr: {
        y: 14,
        x: 5
      },
      child: {
        text: ''
      }
    }]
  });
  this.$body.addChild(this.$axisCtn);
  this.$hscrollbar = RankChart_$('hscrollbar', this.$axisCtn).on('scroll', this.eventHandler.scrollOxySpace);
  this.$hscrollbar.height = 10;
  this.$scrollArrow = RankChart_$('scrollarrow', this.$axisCtn).on('pressleft', this.eventHandler.scrollArrowsPressLeft).on('pressright', this.eventHandler.scrollArrowsPressRight);
  this.$oxySpace = RankChart_$('gcontainer.vc-oxy-space', this.$axisCtn);
  this.$whiteMask = RankChart_$('.vc-white-mask', this.$axisCtn);
  this.$axis = RankChart_$('axis', this.$axisCtn);
  this.$keyName = RankChart_$('.vc-key-name', this.$axisCtn);
  this.$valueName = RankChart_$('.vc-value-name', this.$axisCtn);
  this.$oxLabelCtn = RankChart_$('gcontainer.vc-ox-label-ctn', this.$axisCtn);
  this.$oxLabels = [];
  this.$oyValueCtn = RankChart_('gcontainer.vc-oy-value-ctn').addTo(this.$body);
  this.$oyValues = [];
  this.$postion = [];
  this.$rankListCtn = RankChart_$('.vc-rank-list-ctn', this.$axisCtn);
}

RankChart.tag = 'RankChart'.toLowerCase();
RankChart.property = Object.assign({}, src_VerticalChart.property);
RankChart.eventHandler = Object.assign({}, src_VerticalChart.eventHandler);
OOP/* default.mixClass */.ZP.mixClass(RankChart, src_VerticalChart);

RankChart.render = function () {
  return src_BChart.render().addClass('vc-rank-chart');
};

RankChart.prototype.updateBodyPosition = function () {
  this._isAutoWidth = this.style.width === 'auto';
  if (this._isAutoWidth) this.addStyle('width', '450px');
  src_VerticalChart.prototype.updateBodyPosition.call(this);

  this._updateOyDivision();

  this._updatePosListPosition();

  this._updateScrollerPosition();

  if (this._isAutoWidth) {
    this._isAutoWidth = false;
    this.addStyle('width', this.contentPadding * 2 + this.$oyValueCtn.box.x + this.$hscrollbar.innerWidth + this.$keyName.getBBox().width + 10 + 'px');
    this.updateBodyPosition();
  }
};

RankChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createOxLabel();

  this._createPosList();
};

RankChart.prototype.computeData = src_VerticalChart.prototype.computeData;

RankChart.prototype.computeMinMax = function () {
  var min = Infinity,
      max = -Infinity;
  this.positions.forEach(function (position) {
    position.ranks.forEach(function (rank) {
      min = Math.min(min, rank);
      max = Math.max(max, rank);
    });
  });
  this.computedData.min = min;
  this.computedData.max = max + 1;
};

RankChart.prototype._createOxLabel = function () {
  this.$keyName.firstChild.data = this.valueName;
  this.$oxLabelCtn.clearChild();
  this.$oxLabels = this.positions.map(function (position) {
    return RankChart_({
      tag: 'text',
      "class": 'vc-ox-label',
      child: {
        text: position.name
      }
    });
  });
  this.$oxLabelCtn.addChild(this.$oxLabels);
  this.$valueName.firstChild.data = this.valueName || '';
};

RankChart.prototype._updateOxLabelPosition = function () {
  this.$oxLabelCtn.box.y = 20;
};

RankChart.prototype._updateScrollerPosition = function () {
  this.computedData.oxOverFlow = this.computedData.oxScrollWidth > this.computedData.oxLength;
  this.$hscrollbar.outterWidth = this.computedData.oxLength;
  this.$hscrollbar.innerWidth = this.computedData.oxScrollWidth;
  this.$hscrollbar.width = Math.max(0, this.computedData.oxLength); // this.$hscrollbar.scrollLeft = Math.max(0, Math.min(this.$hscrollbar.scrollLeft, this.computedData.oxScrollWidth - this.computedData.oxLength));

  this.$hscrollbar.scrollLeft = 0;

  if (this.computedData.oxOverFlow) {
    this.$scrollArrow.removeStyle('display');
    this.$scrollArrow.box.y = this.computedData.oyLength / 2;
    this.$scrollArrow.width = this.computedData.oxLength - 20;

    this._updateScrollArrowBtb();
  } else {
    this.$scrollArrow.addStyle('display', 'none');
  }

  this.$axis.oyDivision = this.computedData.oySegmentLength;
  this.$axis.updateOyDivision();
};

RankChart.prototype._updateOyDivision = function (value) {
  this.$axis.oyDivision = this.computedData.oySegmentLength;
  this.$axis.oyPadding = this.computedData.paddingAxisBottom;
  this.$axis.updateOyDivision();
};

RankChart.prototype.mapOYValue = function (val) {
  return this.computedData.paddingAxisBottom + map(val, this.computedData.oy.minValue, this.computedData.oy.maxValue, 0, this.computedData.oyLength);
};

RankChart.prototype._createRank = function (rank, value) {
  var res = RankChart_({
    tag: 'g',
    "class": 'rank-chart-group',
    child: [{
      tag: 'circle',
      "class": 'rank-chart-plot',
      attr: {
        cx: this.plotRadius,
        cy: 0,
        r: this.plotRadius
      },
      style: {
        fill: this.colors[rank]
      }
    }, {
      tag: 'text',
      "class": 'rank-chart-plot-text',
      attr: {
        x: this.plotRadius,
        y: 5,
        'text-anchor': 'middle'
      },
      props: {
        innerHTML: rank + 1 + ''
      }
    }]
  });

  res.attr('title', this.numberToString(value));
  return res;
};

RankChart.prototype.numberToString = function (num) {
  return num.toString();
};

RankChart.prototype._createPosition = function (position) {
  var res = RankChart_({
    tag: svg_GContainer.tag
  });

  res.$ranks = position.ranks.map(function (value, rank) {
    return this._createRank(rank, value);
  }.bind(this));
  res.$rect = RankChart_({
    tag: 'rect',
    "class": 'vc-rank-position-list-rect',
    attr: {
      x: '0',
      y: '0'
    }
  });
  res.addChild(res.$rect).addChild(res.$ranks);
  return res;
};

RankChart.prototype._createPosList = function () {
  this.$positions = this.positions.map(this._createPosition.bind(this));
  this.$rankListCtn.clearChild().addChild(this.$positions);
};

RankChart.prototype._updatePosListPosition = function () {
  var contentLength = this.$positions.reduce(function (contentLength, pe, positionIndex) {
    var position = this.positions[positionIndex];
    contentLength = contentLength + 20;
    var maxDY = pe.$ranks.reduce(function (maxDY, meme, j) {
      var value = position.ranks[j];
      var y = -this.mapOYValue(value);
      meme.attr('transform', translate(contentLength, y));
      meme._tr_y = y;
      return Math.max(maxDY, -y);
    }.bind(this), 0);
    var valueElements = pe.$ranks.slice();
    valueElements.sort(function (a, b) {
      return a._tr_y - b._tr_y;
    });
    var ninf = -1000000;
    var messure = valueElements.reduce(function (ac, e) {
      var y = e._tr_y;
      var colIndex = 0;

      while (ac[colIndex].minY > y) {
        ++colIndex;
      }

      ac[colIndex].minY = y + 20;
      ac[colIndex].child.push(e);
      ac[colIndex].maxWidth = Math.max(ac[colIndex].maxWidth, e.getBBox().width);
      return ac;
    }, Array(200).fill(null).map(function () {
      return {
        minY: ninf,
        child: [],
        maxWidth: ninf
      };
    }));
    messure.reduce(function (left, col) {
      if (col.child.length == 0) return;
      col.child.forEach(function (vale) {
        vale.attr('transform', translate(left, vale._tr_y));
      });
      return left + col.maxWidth + 9;
    }, 10);
    pe.$rect.addStyle('display', 'none');
    var innerWidth = pe.getBBox().width;
    pe.$rect.removeStyle('display');
    pe.$rect.attr({
      width: innerWidth + 20,
      y: -maxDY - (this.plotRadius + 10),
      height: maxDY + this.plotRadius + 10
    });
    var columeWidth = Math.max(pe.getBBox().width + 20, this.$oxLabels[positionIndex].getBBox().width + 10);
    this.$oxLabels[positionIndex].attr('x', contentLength + columeWidth / 2);
    pe.box.x = contentLength + columeWidth / 2 - (innerWidth + 20) / 2;
    contentLength += columeWidth;
    return contentLength;
  }.bind(this), 9);
  this.computedData.oxScrollWidth = contentLength;
};

src_VCore.install(RankChart);
/* harmony default export */ const src_RankChart = ((/* unused pure expression or super */ null && (RankChart)));
;// CONCATENATED MODULE: ./src/SunburstChart.js







var SunburstChart_ = src_VCore._;
var SunburstChart_$ = src_VCore.$;
/***
 * @extends BChart
 * @constructor
 */

function SunburstChart() {
  src_BChart.call(this);
  this.$sunbirstCtn = SunburstChart_('gcontainer.vc-sunburst-ctn');
  this.$body.addChild(this.$sunbirstCtn);
  this.root = {};
}

SunburstChart.property = Object.assign({}, src_BChart.property);
SunburstChart.eventHandler = Object.assign({}, src_BChart.eventHandler);
OOP/* default.mixClass */.ZP.mixClass(SunburstChart, src_BChart);
SunburstChart.tag = 'SunburstChart'.toLowerCase();

SunburstChart.render = function () {
  return src_BChart.render().addClass('vc-sunburst-chart');
};

SunburstChart.prototype._normalizeColorData = function () {
  var needAutoColor = [];
  this.acceptNode(this.root, function (node) {
    try {
      if (node.fillColor.rgba) return;
      var c = Color/* default.parse */.Z.parse(node.fillColor + '');
      if (!node.fillColor.rgba) node.fillColor = c;
    } catch (error) {
      needAutoColor.push(node);
    }
  });
  var aColors = generateBackgroundColors(needAutoColor.length);
  needAutoColor.forEach(function (node, i) {
    node.fillColor = aColors[i];
  });
  this.acceptNode(this.root, function (node) {
    try {
      if (node.textColor.rgba) return;
      var c = Color/* default.parse */.Z.parse(node.textColor + '');
      if (!node.textColor.rgba) node.textColor = c;
    } catch (error) {
      node.textColor = node.fillColor.getContrastYIQ();
    }
  });
};

SunburstChart.prototype.computeData = function () {
  this.computedData.depth = this.calDepth(this.root);
};

SunburstChart.prototype._measureFan = function (r, R, as, ae) {
  var dn = 0;

  if (as < 0) {
    dn = Math.ceil(-as / (Math.PI * 2));
  } else if (as >= Math.PI * 2) {
    dn = -Math.floor(as / (Math.PI * 2));
  }

  as += Math.PI * 2 * dn;
  ae += Math.PI * 2 * dn;
  var cosS = Math.cos(as);
  var sinS = Math.sin(as);
  var cosE = Math.cos(ae);
  var sinE = Math.sin(ae);
  var A = new Math_Rectangle/* default */.Z(r * cosS, r * sinS, 0, 0);
  var B = new Math_Rectangle/* default */.Z(R * cosS, R * sinS, 0, 0);
  var C = new Math_Rectangle/* default */.Z(R * cosE, R * sinE, 0, 0);
  var D = new Math_Rectangle/* default */.Z(r * cosE, r * sinE, 0, 0);
  var points = [A, B, C, D];
  var e90, cosE90, sinE90;

  for (var k = 0; k < 4; ++k) {
    e90 = k * Math.PI / 2;
    cosE90 = Math.cos(e90);
    sinE90 = Math.sin(e90);

    if (e90 > as && e90 < ae) {
      points.push(new Math_Rectangle/* default */.Z(r * cosE90, r * sinE90, 0, 0));
      points.push(new Math_Rectangle/* default */.Z(R * cosE90, R * sinE90, 0, 0));
    }
  }

  return points.reduce(function (ac, cr) {
    return ac.merge(cr);
  });
};

SunburstChart.prototype._measureSunburst = function (rFan) {
  var r0 = this.computedData.rootR;
  var rects = [new Math_Rectangle/* default */.Z(-r0, -r0, 2 * r0, 2 * r0)];

  function visit($node) {
    var level = $node.level;
    var r = r0 + rFan * (level - 1);
    var R = r + rFan * $node.span;

    var fanRect = this._measureFan(r, R, $node.chartAngle[0], $node.chartAngle[1]);

    rects.push(fanRect);
    if ($node.$child) $node.$child.forEach(visit.bind(this));
  }

  if (this.$root.$child) this.$root.$child.forEach(visit.bind(this));
  return rects.reduce(function (ac, cr) {
    return ac.merge(cr);
  });
};

SunburstChart.prototype._findBestFanRadius = function () {
  var mid;
  var bound;
  var exi = 1;
  var aWidth = this.$body.box.width - 4;
  var aHeight = this.$body.box.height - 4;
  var h = (Math.max(aWidth, aHeight) - this.computedData.rootR - 2) / this.computedData.depth;
  var l = (Math.min(aWidth, aHeight) - this.computedData.rootR - 2) / this.computedData.depth / 2;
  mid = (l + h) / 2;

  while (l + exi < h) {
    bound = this._measureSunburst(mid);

    if (bound.width > aWidth || bound.height > aHeight) {
      h = mid;
    } else {
      l = mid;
    }

    mid = (l + h) / 2;
  }

  this.computedData.fanR = mid;
};

SunburstChart.prototype.normalizeData = function () {
  src_BChart.prototype.normalizeData.call(this);

  this._normalizeColorData();
}; // SunburstChart.prototype.updateSize = BaseChart.prototype.updateSize;


SunburstChart.prototype.acceptNode = function (node, visitFunction, content) {
  visitFunction(node, content);

  if (node.child) {
    node.child.forEach(function (cNode) {
      this.acceptNode(cNode, visitFunction, content);
    }.bind(this));
  }
};

SunburstChart.prototype._updateNodePosition = function () {
  var rootR = this.computedData.rootR;
  var fanR = this.computedData.fanR;

  function visit($node) {
    var r0 = rootR + ($node.level - 1) * fanR;
    var r1 = r0 + fanR * $node.span;
    var isLeftPath = ($node.chartAngle[1] + $node.chartAngle[0]) / 2 > Math.PI / 2;
    $node.$nameCtn.attr('transform', rotate(($node.chartAngle[1] + $node.chartAngle[0]) / 2 / Math.PI * 180 + (isLeftPath ? 180 : 0)));
    var textX = (isLeftPath ? -1 : 1) * (r0 + r1) / 2;

    if ((r0 + r1) / 2 * Math.abs($node.chartAngle[1] - $node.chartAngle[0]) < 15) {
      $node.$nameCtn.addStyle('visibility', 'hidden');
    } else {
      //     //todo:
      var nodeText = $node.data.name;
      var textColor = $node.textColor; //

      var words = nodeText.trim().split(/\s+/);
      var updateNodeSession = this.updateNodeSession;

      var tryText = function (nLine) {
        $node.$nameCtn.clearChild();
        var wordPerLine = Math.ceil(words.length / nLine);
        var lines = words.reduce(function (ac, cr) {
          if (ac.top.length == 0) {
            ac.result.push(ac.top);
          }

          ac.top.push(cr);
          if (ac.top.length >= wordPerLine) ac.top = [];
          return ac;
        }, {
          result: [],
          top: []
        }).result;
        lines.reduce(function (y, line) {
          var lineText = line.join(' ');
          $node.$nameCtn.addChild(helper_text(lineText, textX, y, 'vc-sunburst-node-name').attr('text-anchor', 'middle').addStyle('fill', textColor));
          return y + 20;
        }, 5 - (nLine - 1) * 20 / 2);
        var box = $node.$nameCtn.getBBox();
        var out = box.width + 8 > r1 - r0 || box.height > (r0 + r1) / 2 * Math.abs($node.chartAngle[1] - $node.chartAngle[0]);

        if (nLine < words.length && out) {
          tryText(nLine + 1);
        } else if (out) {
          $node.$nameCtn.addStyle('visibility', 'hidden');
        } else {
          $node.$nameCtn.removeStyle('visibility', 'hidden');
        }
      }.bind(this);

      tryText(1);
    }

    $node.$shape.begin().moveTo(r0 * Math.cos($node.chartAngle[0]), r0 * Math.sin($node.chartAngle[0])).arcTo(r0 * Math.cos($node.chartAngle[1]), r0 * Math.sin($node.chartAngle[1]), r0, r0, $node.chartAngle[1] - $node.chartAngle[0] > Math.PI ? 1 : 0, 1).lineTo(r1 * Math.cos($node.chartAngle[1]), r1 * Math.sin($node.chartAngle[1])).arcTo(r1 * Math.cos($node.chartAngle[0]), r1 * Math.sin($node.chartAngle[0]), r1, r1, $node.chartAngle[1] - $node.chartAngle[0] > Math.PI ? 1 : 0, 0).closePath().end();

    if ($node.$child && $node.$child.length > 0) {
      $node.$child.forEach(visit.bind(this));
    }
  }

  if (this.$root.$child && this.$root.$child.length > 0) {
    this.$root.$child.forEach(visit.bind(this));
  }
};

SunburstChart.prototype._updateSunburstPosition = function () {
  var ctnBox = this.$sunbirstCtn.getBBox();
  var rootBox = this.$root.getBBox();
  var x = this.$body.box.width / 2;
  var y = this.$body.box.height / 2;
  x -= ctnBox.x + ctnBox.width / 2 - (rootBox.x + rootBox.width / 2);
  y -= ctnBox.y + ctnBox.height / 2 - (rootBox.y + rootBox.height / 2);
  this.$sunbirstCtn.box.setPosition(x, y);
};

SunburstChart.prototype._updatePrintViewport = function () {
  var children = Array.prototype.slice.call(this.childNodes);
  var bound = children.reduce(function (ac, cr) {
    var bbox = cr.getBBox();
    if (bbox.width === 0 || bbox.height === 0) return ac;
    var rect = getGlobalBBox(cr);
    if (!ac) return rect;
    return ac.merge(rect);
  }, null);

  if (bound) {
    this.attr('data-print-view-box', Math.floor(bound.x) - 0.5 + ' ' + (Math.floor(bound.y) - 0.5) + ' ' + Math.ceil(bound.width + 1) + ' ' + Math.ceil(bound.height + 1));
  } else this.attr('data-print-view-box', null);
};

SunburstChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._findBestFanRadius();

  this._updateNodePosition();

  this._updateSunburstPosition();

  this._updatePrintViewport();
};

SunburstChart.prototype._createRoot = function () {
  var rootWords = this.root.name.trim().split(/\s+/);
  var rectsPerLine = Math.ceil(Math.sqrt(rootWords.length) * Math.log10(7));
  var lines = rootWords.reduce(function (ac, cr) {
    if (ac.top.length === 0) {
      ac.result.push(ac.top);
    }

    ac.top.push(cr);
    if (ac.top.length >= rectsPerLine) ac.top = [];
    return ac;
  }, {
    result: [],
    top: []
  }).result;
  this.$root = SunburstChart_('g.vc-title').addTo(this.$sunbirstCtn);
  this.$root.$circle = circle(0, 0, 1).addTo(this.$root);
  this.$root.$circle.addStyle('fill', this.root.fillColor.toString('hex8'));
  this.$root.$lines = lines.map(function (line, i, arr) {
    return helper_text(line.join(' '), 0, -(arr.length * 15) / 2 + 12 + 15 * i).attr('text-anchor', 'middle').addTo(this.$root);
  }.bind(this));
  var rootBox = this.$root.getBBox();
  this.computedData.rootR = Math.sqrt(rootBox.width * rootBox.width + rootBox.height * rootBox.height) / 2 + 5;
  this.$root.$circle.attr('r', this.computedData.rootR);
  this.$root.data = this.root;
  this.$root.level = 0;
  this.$root.span = 1;
  this.$root.chartAngle = [-Math.PI / 2, -Math.PI / 2 + Math.PI * 2];
};

SunburstChart.prototype._createChild = function (fromElt) {
  var sum = fromElt.data.value;
  if (!fromElt.data.child || !(fromElt.data.child.length > 0)) return;
  fromElt.$child = fromElt.data.child.map(function (childData) {
    var fillColor = childData.fillColor;

    var res = SunburstChart_({
      tag: 'g',
      "class": 'sunburst-chart-node',
      props: {
        data: childData,
        level: fromElt.level + (fromElt.data.span || 1),
        span: childData.span || 1,
        textColor: Color/* default.parse */.Z.parse(fillColor).getContrastYIQ().toString('rgb')
      }
    });

    res.$title = SunburstChart_('<title>' + childData.name + ': ' + childData.value + '</title>').addTo(res);
    res.$shape = SunburstChart_({
      tag: 'shape',
      "class": 'sunburst-chart-node-shape',
      style: {
        fill: fillColor
      }
    }).addTo(res);
    res.$nameCtn = SunburstChart_('g').addTo(res);
    return res.addTo(this.$sunbirstCtn);
  }.bind(this));
  fromElt.$child.reduce(function (offset, $childNode) {
    $childNode.chartAngle = [map(offset, 0, sum, fromElt.chartAngle[0], fromElt.chartAngle[1]), map(offset + $childNode.data.value, 0, sum, fromElt.chartAngle[0], fromElt.chartAngle[1])];

    this._createChild($childNode);

    return offset += $childNode.data.value;
  }.bind(this), 0);
};

SunburstChart.prototype._createSunburst = function () {
  this.$sunbirstCtn.clearChild();

  this._createRoot();

  this._createChild(this.$root);
};

SunburstChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createSunburst();
};

SunburstChart.prototype.calDepth = function (node) {
  if (node.child && node.child.length > 0) {
    return (node.span || 1) + Math.max.apply(Math, node.child.map(this.calDepth.bind(this)));
  } else return node.span || 1;
};

src_VCore.creator.sunburstchart = SunburstChart;
/* harmony default export */ const src_SunburstChart = ((/* unused pure expression or super */ null && (SunburstChart)));
;// CONCATENATED MODULE: ./src/SquareChart.js


 // vchart.creator.correlationchart = function () {
//     var _ = _;
//     var $ = vchart.$;
//     var res = _({
//         tag: 'svg',
//         class: 'base-chart',
//         child: 'axis'
//     }, true);
//     res.$axis = $('axis', res);
//     res.sync = res.afterAttached();
//     return res;
// };
// vchart.creator.correlationchart.prototype.updateSize = vchart.creator.basechart.prototype.updateSize;
// vchart.creator.correlationchart.prototype.update = function () {
//     this.updateSize();
//     this.updateBackComp();
//     this.updateAxis();
//     this.updateComp();
// };
// vchart.creator.correlationchart.prototype.mapOXColumn = function (index) {
//     return this.oxyLeft + (index + 0.5) * this.oxSegmentLength;
// };
// vchart.creator.correlationchart.prototype.mapOYValue = function (value) {
//     return this.oxyBottom - this.oyLength * value;
// };
// vchart.creator.correlationchart.prototype.updateAxis = function () {
//     this.$axis.moveTo(this.oxyLeft, this.oxyBottom);
//     this.$axis.resize(this.canvasWidth - this.oxyLeft - 10, this.oxyBottom - 43);
//     this.$oyName.attr({ x: 3, y: 30 });
//     this.$oxName.attr({ x: this.canvasWidth - 4, y: this.oxyBottom + 20 });
// };
// vchart.creator.correlationchart.prototype.initBackComp = function () {
//     this.$title = text(this.title, 0, 0, 'base-chart-title').attr('text-anchor', 'middle').addTo(this);
//     this.$oyName = text(this.valueName, 0, 0, 'base-chart-oxy-text').addTo(this);
//     this.$oxName = text(this.keyName, 0, 100, 'base-chart-oxy-text').attr('text-anchor', 'end').addTo(this);
//     this.$keyNames = this.keys.map(function (key) {
//         return text(key, 100, 100).attr('text-anchor', 'middle').addTo(this);
//     }.bind(this));
// };
// vchart.creator.correlationchart.prototype.updateBackComp = function () {
//     this.$title.attr({ x: this.canvasWidth / 2, y: 20 });
//     this.oxyLeft = Math.max(20, this.$oyName.getBBox().width);
//     this.oxyBottom = this.canvasHeight - 10;
//     this.oxLength = this.canvasWidth - this.oxyLeft - 12 - this.$oxName.getBBox().width;
//     this.oxSegmentLength = this.oxLength / this.keys.length;
//     var oyNameHeight = this.$keyNames.reduce(function (ac, $keyName) {
//         return Math.max($keyName.getBBox().height);
//     }.bind(this), 0);
//     this.oxyBottom -= oyNameHeight;
//     this.oyLength = this.oxyBottom - 50;
//     this.$keyNames.forEach(function ($keyName, i) {
//         $keyName.attr({ x: this.mapOXColumn(i), y: this.oxyBottom + 20 });
//     }.bind(this), 0);
// };
// vchart.creator.correlationchart.prototype.initComp = function () {
//     this.$staticVLines = this.staticValues.map(function (value, i) {
//         return vline(0, 0, 0, ['correlation-chart-normal-line', 'static']).addTo(this);
//     }.bind(this));
//     this.$staticHLines = this.staticValues.map(function (value, i) {
//         return hline(0, 0, 0, ['correlation-chart-normal-line', 'static']).addTo(this);
//     }.bind(this));
//     this.$dynamicVLines = this.dynamicValues.map(function (value, i) {
//         return vline(0, 0, 0, ['correlation-chart-normal-line', 'dynamic']).addTo(this);
//     }.bind(this));
//     this.$dynamicHLines = this.dynamicValues.map(function (value, i) {
//         return hline(0, 0, 0, ['correlation-chart-normal-line', 'dynamic']).addTo(this);
//     }.bind(this));
//     this.$staticPlots = this.staticValues.map(function (value, i) {
//         return circle(50 + i * 30, 100, this.plotRadius, ['correlation-chart-plot', 'static']).addTo(this);
//     }.bind(this));
//     this.$staticLine = _('path.correlation-chart-line.static').addTo(this);
//     this.$dynamicPlots = this.dynamicValues.map(function (value, i) {
//         return circle(50 + i * 30, 200, this.plotRadius, ['correlation-chart-plot', 'dynamic']).addTo(this);
//     }.bind(this));
//     this.$dynamicLine = _('path.correlation-chart-line.dynamic').addTo(this);
// };
// vchart.creator.correlationchart.prototype.updateComp = function () {
//     this.$staticVLines.forEach(function ($staticVLine, i) {
//        moveVLine($staticVLine, this.mapOXColumn(i), this.oxyBottom, this.mapOYValue(this.staticValues[i]) - this.oxyBottom);
//     }.bind(this));
//     this.$staticHLines.forEach(function ($staticHLine, i) {
//         moveHLine($staticHLine, this.oxyLeft, this.mapOYValue(this.staticValues[i]), this.mapOXColumn(i) - this.oxyLeft);
//     }.bind(this));
//     this.$dynamicVLines.forEach(function ($dynamicVLine, i) {
//        moveVLine($dynamicVLine, this.mapOXColumn(i), this.oxyBottom, this.mapOYValue(this.dynamicValues[i]) - this.oxyBottom);
//     }.bind(this));
//     this.$dynamicHLines.forEach(function ($dynamicHLine, i) {
//         moveHLine($dynamicHLine, this.oxyLeft, this.mapOYValue(this.dynamicValues[i]), this.mapOXColumn(i) - this.oxyLeft);
//     }.bind(this));
//     this.$staticPlots.forEach(function ($plot, i) {
//         $plot.attr({ cx: this.mapOXColumn(i), cy: this.mapOYValue(this.staticValues[i]) });
//     }.bind(this));
//     var staticPoints = this.staticValues.map(function (value, i) {
//         return [this.mapOXColumn(i), this.mapOYValue(value)];
//     }.bind(this));
//     this.$staticLine.attr('d', vchart.autoCurve(staticPoints, 0.7, 0.01));//
//     this.$dynamicPlots.forEach(function ($plot, i) {
//         $plot.attr({ cx: this.mapOXColumn(i), cy: this.mapOYValue(this.dynamicValues[i]) });
//     }.bind(this));
//     var dynamicPoints = this.dynamicValues.map(function (value, i) {
//         return [this.mapOXColumn(i), this.mapOYValue(value)];
//     }.bind(this));
//     this.$dynamicLine.attr('d', vchart.autoCurve(dynamicPoints, 0.7, 0.01));//
// };
// vchart.creator.correlationchart.prototype.preInit = function (props) {
//     this.plotRadius = 6;
// };
// vchart.creator.correlationchart.prototype.init = function (props) {
//     this.super(props);
//     this.preInit();
//     this.initBackComp();
//     this.initComp();
//     this.sync = this.sync.then(this.update.bind(this));
// };

var SquareChart_ = src_VCore._;
var SquareChart_$ = src_VCore.$;

function SquareChart() {
  var res = SquareChart_({
    tag: 'svg',
    "class": 'base-chart',
    child: 'axis'
  }, true);

  res.$axis = SquareChart_$('axis', res);
  res.sync = res.afterAttached();
  return res;
}

;
SquareChart.prototype.updateSize = src_BaseChart.prototype.updateSize;

SquareChart.prototype.getY = function (k, y0, x) {
  var a = k * k / 64;
  return map(a * x * x * x * x + a * x * x + x, 0, 1 + 2 * a, y0, 1);
};

SquareChart.prototype.staticY = function (x) {
  return this.getY(this["static"].k, this["static"].y0, x);
};

SquareChart.prototype.dynamicY = function (x) {
  return this.getY(this.dynamic.k, this.dynamic.y0, x);
};

SquareChart.prototype.getX = function (index) {
  return index / (this.keys.length - 1);
};

SquareChart.prototype.update = function () {
  this.updateSize();
  this.updateBackComp();
  this.updateAxis();
  this.updateComp();
};

SquareChart.prototype.mapOXColumn = function (index) {
  return this.oxyLeft + (index + 0.5) * this.oxSegmentLength;
};

SquareChart.prototype.mapOYValue = function (value) {
  return this.oxyBottom - this.oyLength * value;
};

SquareChart.prototype.updateAxis = function () {
  this.$axis.moveTo(this.oxyLeft, this.oxyBottom);
  this.$axis.resize(this.canvasWidth - this.oxyLeft - 10, this.oxyBottom - 43);
  this.$oyName.attr({
    x: this.oxyLeft - 5,
    y: 30
  });
  this.$oxName.attr({
    x: this.canvasWidth - 4,
    y: this.oxyBottom + 20
  });
};

SquareChart.prototype.initBackComp = function () {
  this.$title = helper_text(this.title || '', 0, 0, 'base-chart-title').attr('text-anchor', 'middle').addTo(this);
  this.$oyName = helper_text(this.valueName, 0, 0, 'base-chart-oxy-text').attr('text-anchor', 'end').addTo(this);
  this.$oxName = helper_text(this.keyName, 0, 100, 'base-chart-oxy-text').attr('text-anchor', 'end').addTo(this);
  this.$keyNames = this.keys.map(function (key) {
    return helper_text(key, 100, 100).attr('text-anchor', 'middle').addTo(this);
  }.bind(this));
  this.$testText = helper_text('0'.repeat(10), 0, 18).addStyle('visibility', 'hidden').addTo(this);
};

SquareChart.prototype.updateBackComp = function () {
  // update value text
  if (this.minValueText !== null && this.minValueText !== undefined) this.$minValueText.innerHTML = this.minValueText;else this.$minValueText.innerHTML = '';
  if (this.maxValueText !== null && this.maxValueText !== undefined) this.$maxValueText.innerHTML = this.maxValueText;else this.$maxValueText.innerHTML = '';
  this.$title.attr({
    x: this.canvasWidth / 2,
    y: 20
  });
  this.oxyLeft = Math.max(20, this.$oyName.getBBox().width + 10, this.$maxValueText.getBBox().width + 10, this.$minValueText.getBBox().width + 10, this.$testText.getBBox().width / 10 * this.minValueTextLength + 10);
  this.oxyBottom = this.canvasHeight - 10;
  this.oxLength = this.canvasWidth - this.oxyLeft - 12 - this.$oxName.getBBox().width;
  this.oxSegmentLength = this.oxLength / this.keys.length;
  var oyNameHeight = this.$keyNames.reduce(function (ac, $keyName) {
    return Math.max($keyName.getBBox().height);
  }.bind(this), 0);
  this.oxyBottom -= oyNameHeight;
  this.oyLength = this.oxyBottom - 50;
  this.$keyNames.forEach(function ($keyName, i) {
    $keyName.attr({
      x: this.mapOXColumn(i),
      y: this.oxyBottom + 20
    });
  }.bind(this), 0);
};

SquareChart.prototype.initComp = function () {
  this.$staticVLines = this.keys.map(function (value, i) {
    return vline(0, 0, 0, ['correlation-chart-normal-line', 'static']).addTo(this);
  }.bind(this));
  this.$staticHLines = this.keys.map(function (value, i) {
    return hline(0, 0, 0, ['correlation-chart-normal-line', 'static']).addTo(this);
  }.bind(this));
  this.$dynamicVLines = this.keys.map(function (value, i) {
    return vline(0, 0, 0, ['correlation-chart-normal-line', 'dynamic']).addTo(this);
  }.bind(this));
  this.$dynamicHLines = this.keys.map(function (value, i) {
    return hline(0, 0, 0, ['correlation-chart-normal-line', 'dynamic']).addTo(this);
  }.bind(this));
  this.$staticPlots = this.keys.map(function (value, i) {
    return circle(50 + i * 30, 100, this.plotRadius, ['correlation-chart-plot', 'static']).addTo(this);
  }.bind(this));
  this.$staticLine = SquareChart_('path.correlation-chart-line.static').addTo(this);
  this.$dynamicPlots = this.keys.map(function (value, i) {
    return circle(50 + i * 30, 200, this.plotRadius, ['correlation-chart-plot', 'dynamic']).addTo(this);
  }.bind(this));
  this.$dynamicLine = SquareChart_('path.correlation-chart-line.dynamic').addTo(this); // (this.minValueText !== undefined && this.minValueText  === null)

  this.$minValueText = helper_text('test', 10, 100).attr('text-anchor', 'end').addTo(this);
  this.$maxValueText = helper_text('test 2   ', 100, 100).attr('text-anchor', 'end').addTo(this);
};

SquareChart.prototype.updateComp = function () {
  this.$staticVLines.forEach(function ($staticVLine, i) {
    moveVLine($staticVLine, this.mapOXColumn(i), this.oxyBottom, this.mapOYValue(this.staticY(this.getX(i))) - this.oxyBottom);
  }.bind(this));
  this.$staticHLines.forEach(function ($staticHLine, i) {
    moveHLine($staticHLine, this.oxyLeft, this.mapOYValue(this.staticY(this.getX(i))), this.mapOXColumn(i) - this.oxyLeft);
  }.bind(this));
  this.$dynamicVLines.forEach(function ($dynamicVLine, i) {
    moveVLine($dynamicVLine, this.mapOXColumn(i), this.oxyBottom, this.mapOYValue(this.dynamicY(this.getX(i))) - this.oxyBottom);
  }.bind(this));
  this.$dynamicHLines.forEach(function ($dynamicHLine, i) {
    moveHLine($dynamicHLine, this.oxyLeft, this.mapOYValue(this.dynamicY(this.getX(i))), this.mapOXColumn(i) - this.oxyLeft);
  }.bind(this));
  this.$staticPlots.forEach(function ($plot, i) {
    $plot.attr({
      cx: this.mapOXColumn(i),
      cy: this.mapOYValue(this.staticY(this.getX(i)))
    });
  }.bind(this));
  var staticPoints = Array(101).fill(0).map(function (value, i) {
    return [this.mapOXColumn(i * (this.keys.length - 1) / 100), this.mapOYValue(this.staticY(i / 100))];
  }.bind(this));
  this.$staticLine.attr('d', vchart.autoCurve(staticPoints, 0.7, 0.01)); //

  this.$dynamicPlots.forEach(function ($plot, i) {
    $plot.attr({
      cx: this.mapOXColumn(i),
      cy: this.mapOYValue(this.dynamicY(this.getX(i)))
    });
  }.bind(this));
  var dynamicPoints = Array(101).fill(0).map(function (value, i) {
    return [this.mapOXColumn(i * (this.keys.length - 1) / 100), this.mapOYValue(this.dynamicY(i / 100))];
  }.bind(this));
  this.$dynamicLine.attr('d', vchart.autoCurve(dynamicPoints, 0.7, 0.01)); //

  this.$minValueText.attr({
    x: this.oxyLeft - 5,
    y: this.mapOYValue(this.dynamicY(this.getX(0))) + 6
  });
  this.$maxValueText.attr({
    x: this.oxyLeft - 5,
    y: this.mapOYValue(this.dynamicY(this.getX(this.keys.length - 1))) + 6
  });
};

SquareChart.prototype.preInit = function (props) {
  this.plotRadius = 6;
  this.minValueTextLength = 0;
};

SquareChart.prototype.init = function (props) {
  this.preInit();
  this["super"](props);
  this.initBackComp();
  this.initComp();
  this.sync = this.sync.then(this.update.bind(this));
};

src_VCore.creator.squarechart = SquareChart;
/* harmony default export */ const src_SquareChart = ((/* unused pure expression or super */ null && (SquareChart)));
;// CONCATENATED MODULE: ./src/GroupRankChart.js




var GroupRankChart_ = src_VCore._;
var GroupRankChart_$ = src_VCore.$;

function GroupRankChart() {
  var suffix = (Math.random() + '').replace(/\./g, '');

  var res = GroupRankChart_({
    tag: 'svg',
    "class": 'grank-chart',
    child: [{
      tag: 'g',
      attr: {
        id: 'contentBox'
      },
      child: 'g#content'
    }, {
      tag: 'path',
      "class": 'base-chart-white-mask',
      attr: {
        fill: 'white',
        stroke: 'white',
        'fill-rule': 'evenodd',
        d: 'M0,0  0,2000 2000,2000 2000,0zM100,0  0,200 200,200 200,0z'
      }
    }, 'axis', 'hscrollbar']
  });

  res.sync = res.afterAttached();
  res.$axis = GroupRankChart_$('axis', res);
  res.$whiteBoxMask = GroupRankChart_$('.base-chart-white-mask', res);
  res.$content = GroupRankChart_$('g#content', res);
  res.eventHandler = OOP/* default.bindFunctions */.ZP.bindFunctions(res, GroupRankChart.eventHandler); // res.on('wheel', res.eventHandler.wheel);

  res.$hscrollbar = GroupRankChart_$('hscrollbar', res).on('scroll', res.eventHandler.scrollbarscroll);
  return res;
}

;
GroupRankChart.eventHandler = {};

GroupRankChart.eventHandler.wheel = function (event) {
  var d = this.scrollBy(event.deltaY);

  if (d != 0) {
    event.preventDefault();
  }
};

GroupRankChart.eventHandler.scrollArrowsPressLeft = function (event) {
  this.scrollBy(-60);
};

GroupRankChart.eventHandler.scrollArrowsPressRight = function (event) {
  this.scrollBy(60);
};

GroupRankChart.eventHandler.scrollbarscroll = function (event) {
  this.scrollLeft = this.$hscrollbar.scrollLeft;
  event.preventDefault();
};

GroupRankChart.prototype.scrollBy = function (dX) {
  var scrollLeft = this.scrollLeft + dX / 5;
  var scrollLeft = Math.max(0, Math.min(this.oxContentLength - this.oxLength, scrollLeft));
  var deltaX = scrollLeft - this.scrollLeft;

  if (deltaX != 0) {
    this.scrollLeft = scrollLeft;
    this.$hscrollbar.scrollLeft = scrollLeft;
  }

  return deltaX;
};

GroupRankChart.prototype.numberToString = function (value) {
  return value.toString();
};

GroupRankChart.prototype._createMember = function (member) {
  var res = GroupRankChart_('g');

  res.$plot = circle(this.plotRadius, 0, this.plotRadius, 'grank-chart-plot').addTo(res);
  res.$name = helper_text(member.name, this.plotRadius * 2 + 9, -3).addTo(res);
  res.$value = helper_text('' + this.numberToString(member.value) + '', this.plotRadius * 2 + 9, 16).addTo(res);
  return res;
};

GroupRankChart.prototype._createOyValues = function (minValue, step, segmentCount, extendOY) {
  var child = Array(segmentCount + 1 + (extendOY ? 1 : 0)).fill(0).map(function (u, i) {
    var value;

    if (extendOY) {
      if (i == 0) {
        value = 0;
      } else {
        value = minValue + (i - 1) * step;
      }
    } else {
      value = minValue + i * step;
    }

    return {
      tag: 'text',
      attr: {
        x: '-14',
        y: '0',
        'text-anchor': 'end'
      },
      props: {
        innerHTML: this.numberToString(value)
      }
    };
  }.bind(this));
  return GroupRankChart_({
    tag: 'g',
    child: child
  });
};

GroupRankChart.prototype._createOYSegmentLines = function (n) {
  var res = GroupRankChart_({
    tag: 'g',
    child: Array(n).fill('path.vchart-segment-line')
  });

  return res;
};

GroupRankChart.prototype._createGroup = function (group) {
  return GroupRankChart_({
    tag: 'g',
    child: group.members.map(this._createMember.bind(this))
  });
};

GroupRankChart.prototype._callOYValue = function (val) {
  return -this.paddingnAxisBottom + (this.extendOY ? -this.oySegmentLength : 0) - map(val, this.oyMinValue, this.oyMaxValue, 0, this.oyLength - (this.extendOY ? this.oySegmentLength : 0));
};

GroupRankChart.prototype.updateSize = function () {
  this.attr({
    width: this.canvasWidth + '',
    height: this.canvasHeight + '',
    viewBox: [0, 0, this.canvasWidth, this.canvasHeight].join(' ')
  });
  this.$title.attr('x', this.canvasWidth / 2);
};

GroupRankChart.prototype.updateOyValues = function () {
  this.oyLength = this.oxyBottom - 70 - this.paddingnAxisBottom;
  this.oySegmentLength = this.oyLength / (this.oySegmentCount + (this.extendOY ? 1 : 0));
  Array.prototype.forEach.call(this.$oyValues.childNodes, function (e, i) {
    e.attr({
      y: -i * this.oySegmentLength + 5 - this.paddingnAxisBottom,
      x: -10
    });
  }.bind(this));
  var oyValuesBox = this.$oyValues.getBBox();
  this.oxyLeft = Math.max(this.oxyLeft, oyValuesBox.width + 14, this.$oyName.getBBox().width);
  this.oxLength = this.canvasWidth - this.oxyLeft - 24;
  this.$oyValues.attr('transform', 'translate(' + this.oxyLeft + ',' + this.oxyBottom + ')');
};

GroupRankChart.prototype.updateAxis = function () {
  this.$axis.attr('transform', translate(this.oxyLeft, this.oxyBottom));
  this.$axis.resize(this.canvasWidth - this.oxyLeft - 10, this.oxyBottom - 50);
  this.$oyName.attr({
    x: this.oxyLeft,
    y: 30,
    'text-anchor': 'end'
  });
  this.$whiteBoxMask.attr('d', 'M0,0  0,cvh cvw,cvh cvw,0zMleft,top  left,bottom right,bottom right,topz'.replace(/cvh/g, this.canvasHeight).replace(/cvw/g, this.canvasWidth).replace(/left/g, this.oxyLeft).replace(/top/g, 1).replace(/bottom/g, this.canvasHeight).replace(/right/g, this.canvasWidth - 10));
  this.$content.attr('transform', 'translate(' + this.oxyLeft + ',' + this.oxyBottom + ')');
  this.$oxName.attr({
    x: this.canvasWidth - this.$oxName.getBBox().width - 3,
    y: this.oxyBottom - 9
  });
};

GroupRankChart.prototype.updateOYSegmentLines = function () {
  this.$oySegmentLines.attr('transform', 'translate(' + this.oxyLeft + ',' + this.oxyBottom + ')');
  Array.prototype.forEach.call(this.$oySegmentLines.childNodes, function (e, i) {
    moveHLine(e, -2, -i * this.oySegmentLength - this.paddingnAxisBottom, 4);
  }.bind(this));
};

GroupRankChart.prototype.updateGroups = function () {
  this.oxContentLength = this.$groups.reduce(function (contentLength, ge, groupIndex) {
    var group = this.groups[groupIndex];
    contentLength = contentLength + 20;
    var maxDY = Array.prototype.reduce.call(ge.childNodes, function (maxDY, meme, j) {
      var member = group.members[j];

      var y = this._callOYValue(member.value);

      meme.attr('transform', translate(contentLength, y));
      meme._tr_y = y;
      return Math.max(maxDY, -y);
    }.bind(this), 0); //todo:auto x

    var memberElements = Array.apply(null, ge.childNodes);
    memberElements.sort(function (a, b) {
      return a._tr_y - b._tr_y;
    });
    var ninf = -1000000;
    var messure = memberElements.reduce(function (ac, e) {
      var y = e._tr_y;
      var colIndex = 0;

      while (ac[colIndex].minY > y) {
        ++colIndex;
      }

      ac[colIndex].minY = y + 40;
      ac[colIndex].child.push(e);
      ac[colIndex].maxWidth = Math.max(ac[colIndex].maxWidth, e.getBBox().width);
      return ac;
    }, Array(200).fill(null).map(function () {
      return {
        minY: ninf,
        child: [],
        maxWidth: ninf
      };
    }));
    messure.reduce(function (left, col) {
      if (col.child.length == 0) return;
      col.child.forEach(function (meme) {
        meme.attr('transform', translate(left, meme._tr_y));
      });
      return left + col.maxWidth + 9;
    }, contentLength);
    var innerWidth = ge.getBBox().width;
    this.$groupBoxes[groupIndex].attr({
      x: contentLength - 10,
      width: innerWidth + 20,
      y: -maxDY - (this.plotRadius + 20),
      height: maxDY + this.plotRadius + 20
    });
    var columeWidth = Math.max(ge.getBBox().width + 20, this.$groupNames[groupIndex].getBBox().width + 10);
    this.$groupNames[groupIndex].attr('x', contentLength + columeWidth / 2);
    contentLength += columeWidth;
    return contentLength;
  }.bind(this), 0);
};

GroupRankChart.prototype.updateScrollArrows = function () {
  this.$scrollArrows.attr('transform', 'translate(' + (this.oxyLeft + 7) + ', ' + (this.oxyBottom - this.oyLength / 2) + ')');
  this.$scrollArrows.$rightArrow.attr('transform', 'translate(' + (this.oxLength - 15) + ', 0)');
  this.scrollLeft = this.scrollLeft; //update

  this.$hscrollbar.resize(this.oxLength, 10);
  this.$hscrollbar.moveTo(this.oxyLeft, this.oxyBottom - 10);
  this.$hscrollbar.outterWidth = this.oxLength;
  this.$hscrollbar.innerWidth = this.oxContentLength;
};

GroupRankChart.prototype.update = function () {
  if (!this.groups || this.groups.length <= 0) return;

  if (typeof this.canvasWidth != 'number') {
    this.canvasWidth = 300;
    this.autoWidth = true;
  }

  this.updateSize();
  this.updateOyValues();
  this.updateAxis();
  this.updateOYSegmentLines();
  this.updateGroups();
  this.updateScrollArrows();
  requestAnimationFrame(function () {
    if (this.autoWidth) {
      var requireWidth = this.canvasWidth + this.overflowOX;
      var proviceWidth = this.parentElement.getBoundingClientRect().width;
      this.canvasWidth = Math.max(Math.min(requireWidth, proviceWidth), 300);
      this.autoWidth = false;
      this.update();
    }
  }.bind(this));
};

GroupRankChart.prototype.initComp = function () {
  this.maxValue = this.groups.reduce(function (ac, group) {
    return group.members.reduce(function (ac, member) {
      return Math.max(ac, member.value);
    }, ac);
  }, -10000000000);
  this.minValue = this.groups.reduce(function (ac, group) {
    return group.members.reduce(function (ac, member) {
      return Math.min(ac, member.value);
    }, ac);
  }, 10000000000);
  if (this.maxValue == this.minValue) this.maxValue += this.maxSegment;
  this.oxyBottom = this.canvasHeight - 40; //fix size, not need update

  this.oxyLeft = 0;
  var btSgmt = calBeautySegment(this.maxSegment, this.minValue, this.maxValue);
  this.oySegmentCount = btSgmt.segmentCount;
  this.oyMinValue = btSgmt.minValue;
  this.oyMaxValue = btSgmt.maxValue;
  this.extendOY = !!(this.zeroOY && this.oyMinValue > 0);
  this.oyStep = btSgmt.step;
  this.$oyValues = this._createOyValues(this.oyMinValue, this.oyStep, this.oySegmentCount, this.extendOY).addTo(this);
  this.$oySegmentLines = this._createOYSegmentLines(this.oySegmentCount + 1 + (this.extendOY ? 1 : 0)).addTo(this);
  this.$title = vchart.text(this.title || '', 0, 19, 'base-chart-title').attr('text-anchor', 'middle').addTo(this);
  this.$oyName = vchart.text(this.valueName || '', 0, 0, 'base-chart-oxy-text').addTo(this);
  this.$oxName = vchart.text(this.keyName || '', 0, 0, 'base-chart-oxy-text').addTo(this);
  this.$groups = this.groups.map(function (group) {
    return this._createGroup(group).addTo(this.$content);
  }.bind(this));
  this.$groupNames = this.groups.map(function (group) {
    return vchart.text(group.name, 0, 18).attr('text-anchor', 'middle').addTo(this.$content);
  }.bind(this));
  this.$groupBoxes = this.groups.map(function (group) {
    return vchart.rect(0, 0, 0, 0, 'grank-chart-group-rect').addTo(this.$content);
  }.bind(this));
  this.$scrollArrows = GroupRankChart_('scrollarrow').addTo(this).on('pressleft', this.eventHandler.scrollArrowsPressLeft).on('pressright', this.eventHandler.scrollArrowsPressRight);
};

GroupRankChart.prototype.init = function (props) {
  this.plotRadius = 6;
  this.canvasWidth = 400;
  this.canvasHeight = 300;
  this.maxSegment = 9;
  this.paddingnAxisBottom = this.plotRadius + 30;
  this.valueName = '';
  this["super"](props);

  if (!this.groups || this.groups.length <= 0) {
    console.log('Empty data!');
    return;
  }

  this.initComp();
  this.sync = this.sync.then(this.update.bind(this));
};

GroupRankChart.property = {};
GroupRankChart.property.scrollLeft = {
  set: function set(value) {
    this._scrollLeft = value || 0;
    this.$content.attr('transform', 'translate(' + (this.oxyLeft - this.scrollLeft) + ',' + this.oxyBottom + ')');

    if (this.scrollLeft > 0.001) {
      this.$scrollArrows.$leftArrow.removeStyle('display');
    } else {
      this.$scrollArrows.$leftArrow.addStyle('display', 'none');
    }

    if (this.oxContentLength - this.oxLength > this.scrollLeft + 0.001) {
      this.$scrollArrows.$rightArrow.removeStyle('display');
    } else {
      this.$scrollArrows.$rightArrow.addStyle('display', 'none');
    }
  },
  get: function get() {
    return this._scrollLeft || 0;
  }
};
GroupRankChart.property.overflowOX = {
  get: function get() {
    return Math.max(0, this.oxContentLength - this.oxLength);
  }
};
src_VCore.creator.grouprankchart = GroupRankChart;
/* harmony default export */ const src_GroupRankChart = ((/* unused pure expression or super */ null && (GroupRankChart)));
;// CONCATENATED MODULE: ./src/MappingChart.js




var MappingChart_ = src_VCore._;
var MappingChart_$ = src_VCore.$;
var STATE_READY = 0;
var STATE_MODIFY = 1;

function MappingChart() {
  var res = MappingChart_({
    tag: 'svg',
    attr: {
      tabindex: '1'
    },
    "class": 'mapping-chart',
    extendEvent: ['add', 'addmakertop', 'addmarkerbot', 'clicktop', 'clickbot', 'addline', 'removeline', 'editline'],
    child: ['g.background', 'g.middleground', 'g.forceground']
  });

  res.$background = MappingChart_$('g.background', res);
  res.$middleground = MappingChart_$('g.middleground', res);
  res.$forceground = MappingChart_$('g.forceground', res);
  res.sync = res.afterAttached();
  return res;
}

;

MappingChart.prototype.generateValue = function (number) {
  return Math.round(Math.round(number * this.precision) / this.precision);
};

MappingChart.prototype.preInit = function () {
  this.canvasWidth = 300;
  this.canvasHeight = 300;
  this.rangePlotRadius = 6;
  this.axisTop = 70;
  this.hitboxHeight = 20;
  this.tempValue = 0;
  this.markerHitboxWidth = 1;
};

MappingChart.prototype.numberToString = function (number) {
  return number + '';
};

MappingChart.prototype.updateSize = src_BaseChart.prototype.updateSize;
MappingChart.prototype.numberToString = src_BaseChart.prototype.numberToString;

MappingChart.prototype.initAxis = function () {
  this.$topMinPlot = MappingChart_('shape.mapping-chart-range-plot').addTo(this.$background);
  this.$topMaxPlot = MappingChart_('shape.mapping-chart-range-plot').addTo(this.$background);
  this.$botMinPlot = MappingChart_('shape.mapping-chart-range-plot').addTo(this.$background);
  this.$botMaxPlot = MappingChart_('shape.mapping-chart-range-plot').addTo(this.$background);
  this.$topLine = hline(50, 50, 500, 'mapping-chart-range-line').addTo(this.$background);
  this.$botLine = hline(50, 50, 500, 'mapping-chart-range-line').addTo(this.$background);
  this.$topMinText = helper_text(this.numberToString(this.min), 20, 20, 'mapping-chart-range-text').addTo(this.$background);
  this.$topMaxText = helper_text(this.numberToString(this.max), 30, 20, 'mapping-chart-range-text').addTo(this.$background);
  this.$botMinText = helper_text(this.numberToString(this.min), 20, 50, 'mapping-chart-range-text').addTo(this.$background);
  this.$botMaxText = helper_text(this.numberToString(this.max), 30, 50, 'mapping-chart-range-text').addTo(this.$background);
  this.$title = helper_text(this.title || '', 0, 25, 'mapping-chart-title').addTo(this.$background).attr('text-anchor', 'middle');
};

MappingChart.prototype.updateAxis = function () {
  this.axisLeft = 10 + this.$topMinText.getBBox().width + 10;
  var maxTextWidth = this.$botMaxText.getBBox().width;
  this.axisRight = this.canvasWidth - 10 - maxTextWidth - 10;
  this.axisBottom = this.canvasHeight - 50;
  this.$topMinText.attr({
    x: '10',
    y: this.axisTop - 4 + ''
  });
  this.$topMaxText.attr({
    x: this.canvasWidth - 10 - maxTextWidth,
    y: this.axisTop - 4 + ''
  });
  this.$botMinText.attr({
    x: '10',
    y: this.axisBottom + 4 + 14
  });
  this.$botMaxText.attr({
    x: this.canvasWidth - 10 - maxTextWidth,
    y: this.axisBottom + 4 + 14
  });
  this.$topMinPlot.begin().moveTo(this.axisLeft, this.axisTop - 5).lineTo(this.axisLeft, this.axisTop + 5).end();
  this.$topMaxPlot.begin().moveTo(this.axisRight, this.axisTop - 5).lineTo(this.axisRight, this.axisTop + 5).end();
  moveHLine(this.$topLine, this.axisLeft, this.axisTop, this.axisRight - this.axisLeft);
  this.$botMinPlot.begin().moveTo(this.axisLeft, this.axisBottom - 5).lineTo(this.axisLeft, this.axisBottom + 5).end();
  this.$botMaxPlot.begin().moveTo(this.axisRight, this.axisBottom - 5).lineTo(this.axisRight, this.axisBottom + 5).end();
  moveHLine(this.$botLine, this.axisLeft, this.axisBottom, this.axisRight - this.axisLeft);
  this.$title.attr({
    x: this.canvasWidth / 2,
    y: 10 + 20
  });
};

MappingChart.prototype.initHitbox = function () {
  this.$topHitbox = rect(20, 20, 300, 20, 'vchart-hitbox').on({
    mouseenter: this.eventEnterHitboxHandler.bind(this),
    mouseleave: this.eventLeaveHitboxHandler.bind(this),
    click: this.eventClickHitboxHandler.bind(this)
  }).addTo(this.$forceground);
  this.$botHitbox = rect(20, 80, 300, 20, 'vchart-hitbox').on({
    mouseenter: this.eventEnterHitboxHandler.bind(this),
    mouseleave: this.eventLeaveHitboxHandler.bind(this),
    click: this.eventClickHitboxHandler.bind(this)
  }).addTo(this.$forceground);
};

MappingChart.prototype.updateHitbox = function () {
  this.$topHitbox.attr({
    x: this.axisLeft,
    y: this.axisTop - this.hitboxHeight / 2,
    height: this.hitboxHeight,
    width: this.axisRight - this.axisLeft
  });
  this.$botHitbox.attr({
    x: this.axisLeft,
    y: this.axisBottom - this.hitboxHeight / 2,
    height: this.hitboxHeight,
    width: this.axisRight - this.axisLeft
  });
};

MappingChart.prototype.initTempmarker = function () {
  this.$tempTopMarker = MappingChart_('mappingchartmarker.top').addTo(this.$forceground);
  this.$tempBotMarker = MappingChart_('mappingchartmarker.bot').addTo(this.$forceground);
  this.$tempTopMarker.rotate180 = true;
  this.$tempTopMarker.text = this.numberToString(this.min);
  this.$tempBotMarker.text = this.numberToString(this.min);
};

MappingChart.prototype.updateTempMarker = function () {
  //todo
  if (isNumber(this.collision)) {
    this.markerHitboxWidth = Math.max(1, map(this.collision, 0, this.max - this.min, 0, this.axisRight - this.axisLeft));
  }

  this.$tempTopMarker.moveTo(this.axisLeft, this.axisTop);
  this.$tempBotMarker.moveTo(this.axisLeft, this.axisBottom);
  this.$tempTopMarker.hitboxWidth = this.markerHitboxWidth;
  this.$tempBotMarker.hitboxWidth = this.markerHitboxWidth;
};

MappingChart.prototype.initComp = function () {
  this.initAxis();
  this.initTempmarker();
  this.initHitbox();
};

MappingChart.prototype.updateComp = function () {
  this.updateAxis();
  this.updateHitbox();
  this.updateTempMarker();
};

MappingChart.prototype.update = function () {
  this.updateSize();
  this.updateComp();
};

MappingChart.prototype.addMarkerTop = function (value) {
  var value = this.generateValue(this.tempValue);
  var cLine;

  if (!this._tempLine) {
    this._tempLine = {
      value: 0,
      //default
      $line: MappingChart_('shape.mapping-chart-map-line').addTo(this.$background),
      $line_hitbox: MappingChart_('shape.mapping-chart-map-line-hitbox.vchart-hitbox').addTo(this.$middleground),
      $topMarker: MappingChart_({
        tag: 'mappingchartmarker'
      }).addTo(this.$forceground),
      $topPlot: circle(20, 20, 5, 'mapping-chart-line-plot').addTo(this.$forceground)
    };
  }

  this._tempLine.value = value;
  var x0 = map(value, this.min, this.max, this.axisLeft, this.axisRight);
  var y0 = this.axisTop;
  this._tempLine.x0 = x0;
  this._tempLine.y0 = y0;

  this._tempLine.$topMarker.moveTo(x0, y0);

  this._tempLine.$topPlot.attr({
    cx: x0,
    cy: y0
  });

  this._tempLine.$topMarker.text = this.numberToString(this.generateValue(value));
  var self = this;
  var lineElt = this._tempLine.$line;

  function mouseMoveHandler(event) {
    lineElt.begin().moveTo(x0, y0).lineTo(self.mouseX, self.mouseY).end();
  }

  this.on('mousemove', mouseMoveHandler);
  this.once('addmarkerbot', function () {
    this.off('mousemove', mouseMoveHandler);
  });
};

MappingChart.prototype.addMarkerBottom = function (mapValue) {
  if (!this._tempLine) return; //must click top first

  var mapValue = this.generateValue(this.tempValue);

  var isCross = this._checkLineIsCross(this._tempLine.value, mapValue);

  if (isCross) return;
  var x1 = map(mapValue, this.min, this.max, this.axisLeft, this.axisRight);
  var y1 = this.axisBottom;
  this._tempLine.mapValue = mapValue;
  this._tempLine.$botMarker = MappingChart_({
    tag: 'mappingchartmarker',
    props: {
      text: this.numberToString(this.generateValue(mapValue)),
      rotate180: true
    }
  }).moveTo(x1, y1).addTo(this.$forceground);
  this._tempLine.x1 = x1;
  this._tempLine.y1 = y1;
  this._tempLine.$botPlot = circle(20, 80, 5, 'mapping-chart-line-plot').addTo(this.$forceground);

  this._tempLine.$botPlot.attr({
    cx: x1,
    cy: y1
  });

  this._tempLine.$line.begin().moveTo(this._tempLine.x0, this._tempLine.y0).lineTo(x1, y1).end();

  this._tempLine.$line_hitbox.attr('d', this._tempLine.$line.attr('d'));

  var tempLine = this._tempLine;
  this.settupEvent(tempLine);

  this._lineList.push(this._tempLine);

  this._tempLine = undefined;
  this.emit('addmarkerbot', {
    target: this,
    data: tempLine
  }, this);
  this.emit('addline', this.content, this);
};

MappingChart.prototype._checkLineIsCross = function (value, mapValue) {
  return this._lineList.some(function (element) {
    return (element.value - value) * (element.mapValue - mapValue) < 0;
  });
};

MappingChart.prototype.eventEnterHitboxHandler = function (event) {
  if (this.__removeClassTimeOutTop) {
    clearTimeout(this.__removeClassTimeOutTop);
    self.__removeClassTimeOutTop = false;
  }

  if (this.__removeClassTimeOutBot) {
    clearTimeout(this.__removeClassTimeOutBot);
    self.__removeClassTimeOutBot = false;
  }

  if (event.target == this.$topHitbox) {
    this.addClass('mapping-chart-hover-top');
  } else if (event.target == this.$botHitbox) {
    this.addClass('mapping-chart-hover-bot');
  }
};

MappingChart.prototype.eventLeaveHitboxHandler = function (event) {
  var target = event.target;
  var self = this;

  if (target == self.$topHitbox) {
    if (this.__removeClassTimeOutTop) {
      clearTimeout(this.__removeClassTimeOutTop);
      self.__removeClassTimeOutTop = false;
    }

    this.__removeClassTimeOutTop = setTimeout(function () {
      self.removeClass('mapping-chart-hover-top');
      self.__removeClassTimeOutTop = false;
    }, 100);
  } else if (target == self.$botHitbox) {
    if (this.__removeClassTimeOutBot) {
      clearTimeout(this.__removeClassTimeOutBot);
      self.__removeClassTimeOutBot = false;
    }

    self.__removeClassTimeOutBot = setTimeout(function () {
      self.removeClass('mapping-chart-hover-bot');
      self.__removeClassTimeOutBot = false;
    }, 100);
  }
};

MappingChart.prototype.eventClickHitboxHandler = function (event) {
  var target = event.target;

  if (target == this.$topHitbox) {
    if (this.state == STATE_READY) {
      this.addMarkerTop(this.tempValue);
    }

    this.emit('clicktop', {}, this);
  } else if (target == this.$botHitbox) {
    if (this.state == STATE_READY) {
      this.addMarkerBottom(this.tempValue);
    }

    this.emit('clickbot', {}, this);
  }
};

MappingChart.prototype.eventMoveHandler = function (event) {
  var hitboxBound = this.$botHitbox.getBoundingClientRect();
  var eventX = event.clientX;
  var tempValue = map(eventX, hitboxBound.left, hitboxBound.right, this.min, this.max);
  tempValue = Math.round(tempValue);
  this.tempValue = Math.min(this.max, Math.max(this.min, tempValue));
  var newX = map(this.tempValue, this.min, this.max, this.axisLeft, this.axisRight);
  this.$tempTopMarker.moveTo(newX, this.axisTop);
  this.$tempBotMarker.moveTo(newX, this.axisBottom);
  var markerText = this.numberToString(this.generateValue(this.tempValue));
  this.$tempTopMarker.text = markerText;
  this.$tempBotMarker.text = markerText;
  var bound = this.getBoundingClientRect();
  this.mouseX = map(event.clientX, bound.left, bound.right, 0, this.canvasWidth);
  this.mouseY = map(event.clientY, bound.top, bound.bottom, 0, this.canvasHeight);
};

MappingChart.prototype.cancelCMD = function () {
  if (this._tempLine) {
    this.removeElementInObject(this._tempLine);
    this._tempLine = undefined;
  } else {}
};

MappingChart.prototype.deleteCMD = function () {
  if (this._tempLine) {
    this.removeElementInObject(this._tempLine);
    this._tempLine = undefined;
  } else {
    if (this._selectedLine !== undefined) {
      var tempLine = this._selectedLine;
      this.removeElementInObject(tempLine);
      this._lineList = this._lineList.filter(function (elt) {
        return elt.value != tempLine.value && elt.mapValue != tempLine.mapValue;
      });
      this._selectedLine = undefined;
      this.emit('removeline', this.content, this);
    }
  }
};

MappingChart.prototype.eventKeyDownHandler = function (event) {
  if (event.key == "Escape") {
    this.cancelCMD();
    event.preventDefault();
  } else if (event.key == "Delete") {
    this.deleteCMD();
    event.preventDefault();
  }
};

MappingChart.prototype.settupEvent = function (tempLine) {
  var self = this;

  function clickLineHandler(event) {
    if (self._selectedLine !== undefined) {
      self._selectedLine.$line.removeClass('selected-line');

      self._selectedLine = undefined;
    }

    self._selectedLine = tempLine;
    tempLine.$line.addClass('selected-line');

    function unSelectLine() {
      tempLine.$line.removeClass('selected-line');
      if (self._selectedLine !== undefined) if (self._selectedLine.$line == tempLine.$line) self._selectedLine = undefined;
      self.off('click', clickOutHandler);
      self.off('keydown', cancelFocusHandler);
    }

    function clickOutHandler(event) {
      if (event.target != tempLine.$line) {
        unSelectLine();
      }
    }

    function cancelFocusHandler(event) {
      if (event.key == "Escape") {
        unSelectLine();
      }
    }

    setTimeout(function () {
      self.on('click', clickOutHandler);
    }, 1);
    setTimeout(function () {
      self.on('keydown', cancelFocusHandler);
    }, 1);
  }

  var lineElt = tempLine.$line;
  var line_hitboxElt = tempLine.$line_hitbox;

  function clickTopPlotHandler(event) {
    self.state = STATE_MODIFY;
    tempLine.$topMarker.addStyle('visibility', 'hidden');
    tempLine.$topPlot.addStyle('visibility', 'hidden');

    function mouseMoveHandler(event) {
      lineElt.begin().moveTo(self.mouseX, self.mouseY).lineTo(tempLine.x1, tempLine.y1).end();
    }

    function clickTopBarHandler(event, sender) {
      var newValue = self.tempValue;

      if (self._checkLineIsCross(newValue, tempLine.mapValue)) {} else {
        var newX0 = map(newValue, this.min, this.max, this.axisLeft, this.axisRight);
        lineElt.begin().moveTo(newX0, tempLine.y0).lineTo(tempLine.x1, tempLine.y1).end();
        line_hitboxElt.attr('d', lineElt.attr('d'));
        tempLine.$topMarker.moveTo(newX0, tempLine.y0);
        tempLine.$topMarker.text = this.numberToString(this.generateValue(newValue));
        tempLine.$topPlot.attr({
          cx: newX0,
          cy: tempLine.y0
        });
        tempLine.x0 = newX0;
        tempLine.value = newValue;
        tempLine.$topMarker.removeStyle('visibility', 'hidden');
        tempLine.$topPlot.removeStyle('visibility', 'hidden');
        self.off('clicktop', clickTopBarHandler);
        self.off('mousemove', mouseMoveHandler);
        self.off('keydown', KeyDownHandler);
        self.state = STATE_READY;
        this.emit('editline', this.content, this);
      }
    }

    function cancel() {
      lineElt.begin().moveTo(tempLine.x0, tempLine.y0).lineTo(tempLine.x1, tempLine.y1).end();
      line_hitboxElt.attr('d', lineElt.attr('d'));
    }

    ;

    function deleteElt() {
      self.removeElementInObject(tempLine);
      self._lineList = self._lineList.filter(function (elt) {
        return elt.value != tempLine.value && elt.mapValue != tempLine.mapValue;
      });
      this.emit('removeline', this.content, this);
    }

    ;

    function KeyDownHandler(event) {
      tempLine.$topMarker.removeStyle('visibility', 'hidden');
      tempLine.$topPlot.removeStyle('visibility', 'hidden');

      if (event.key == "Escape") {
        cancel();
        event.preventDefault();
      } else if (event.key == "Delete") {
        deleteElt();
        event.preventDefault();
      }

      self.off('clicktop', clickTopBarHandler);
      self.off('mousemove', mouseMoveHandler);
      self.off('keydown', KeyDownHandler);
      self.state = STATE_READY;
    }

    ;
    self.on('clicktop', clickTopBarHandler);
    self.on('mousemove', mouseMoveHandler);
    self.on('keydown', KeyDownHandler);
  }

  function clickBotPlotHandler(event) {
    self.state = STATE_MODIFY;
    tempLine.$botMarker.addStyle('visibility', 'hidden');
    tempLine.$botPlot.addStyle('visibility', 'hidden');

    function mouseMoveHandler(event) {
      lineElt.begin().moveTo(tempLine.x0, tempLine.y0).lineTo(self.mouseX, self.mouseY).end();
    }

    function clickBotBarHandler(event, sender) {
      var newValue = self.tempValue;

      if (self._checkLineIsCross(tempLine.value, newValue)) {} else {
        var newX1 = map(newValue, this.min, this.max, this.axisLeft, this.axisRight);
        lineElt.begin().moveTo(tempLine.x0, tempLine.y0).lineTo(newX1, tempLine.y1).end();
        line_hitboxElt.attr('d', lineElt.attr('d'));
        tempLine.$botMarker.moveTo(newX1, tempLine.y1);
        tempLine.$botMarker.text = this.numberToString(this.generateValue(newValue));
        tempLine.$botPlot.attr({
          cx: newX1,
          cy: tempLine.y1
        });
        tempLine.x1 = newX1;
        tempLine.mapValue = newValue;
        tempLine.$botMarker.removeStyle('visibility', 'hidden');
        tempLine.$botPlot.removeStyle('visibility', 'hidden');
        self.off('clickbot', clickBotBarHandler);
        self.off('mousemove', mouseMoveHandler);
        self.off('keydown', KeyDownHandler);
        self.state = STATE_READY;
        this.emit('editline', this.content, this);
      }
    }

    function cancel() {
      lineElt.begin().moveTo(tempLine.x0, tempLine.y0).lineTo(tempLine.x1, tempLine.y1).end();
      line_hitboxElt.attr('d', lineElt.attr('d'));
    }

    ;

    function deleteElt() {
      self.removeElementInObject(tempLine);
      self._lineList = self._lineList.filter(function (elt) {
        return elt.value != tempLine.value && elt.mapValue != tempLine.mapValue;
      });
    }

    ;

    function KeyDownHandler(event) {
      tempLine.$botMarker.removeStyle('visibility', 'hidden');
      tempLine.$botPlot.removeStyle('visibility', 'hidden');

      if (event.key == "Escape") {
        cancel();
        event.preventDefault();
      } else if (event.key == "Delete") {
        deleteElt();
        event.preventDefault();
      }

      self.off('clickbot', clickBotBarHandler);
      self.off('mousemove', mouseMoveHandler);
      self.off('keydown', KeyDownHandler);
      self.state = STATE_READY;
    }

    ;
    self.on('clickbot', clickBotBarHandler);
    self.on('mousemove', mouseMoveHandler);
    self.on('keydown', KeyDownHandler);
  }

  tempLine.$line_hitbox.on("click", clickLineHandler);
  tempLine.$topPlot.on("click", clickTopPlotHandler);
  tempLine.$botPlot.on("click", clickBotPlotHandler);
};

MappingChart.prototype.setLineElt = function (value, mapValue) {
  value = this.generateValue(value);
  mapValue = this.generateValue(mapValue);
  var x0 = map(value, this.min, this.max, this.axisLeft, this.axisRight);
  var y0 = this.axisTop;
  var x1 = map(mapValue, this.min, this.max, this.axisLeft, this.axisRight);
  var y1 = this.axisBottom;
  var tempLine;
  var cLine;
  tempLine = {
    value: value,
    mapValue: mapValue,
    $line: MappingChart_('shape.mapping-chart-map-line').addTo(this.$background),
    $line_hitbox: MappingChart_('shape.mapping-chart-map-line-hitbox.vchart-hitbox').addTo(this.$middleground),
    $topMarker: MappingChart_({
      tag: 'mappingchartmarker'
    }).addTo(this.$forceground),
    $topPlot: circle(20, 20, 5, 'mapping-chart-line-plot').addTo(this.$forceground),
    $botMarker: MappingChart_({
      tag: 'mappingchartmarker',
      props: {
        rotate180: true
      }
    }).addTo(this.$forceground),
    $botPlot: circle(20, 20, 5, 'mapping-chart-line-plot').addTo(this.$forceground),
    x0: x0,
    x1: x1,
    y0: y0,
    y1: y1
  };
  tempLine.x0 = x0;
  tempLine.y0 = y0;
  tempLine.x1 = x1;
  tempLine.y1 = y1;
  tempLine.$topMarker.moveTo(x0, y0);
  tempLine.$topPlot.attr({
    cx: x0,
    cy: y0
  });
  tempLine.$botMarker.moveTo(x1, y1);
  tempLine.$botPlot.attr({
    cx: x1,
    cy: y1
  });
  tempLine.$topMarker.text = this.numberToString(value);
  tempLine.$botMarker.text = this.numberToString(mapValue);
  tempLine.$line.begin().moveTo(x0, y0).lineTo(x1, y1).end();
  tempLine.$line_hitbox.attr('d', tempLine.$line.attr('d')); ///todo

  this.settupEvent(tempLine);

  this._lineList.push(tempLine);
};

MappingChart.prototype.removeElementInObject = function (object) {
  Object.keys(object).forEach(function (key) {
    if (typeof object[key].remove == 'function') object[key].remove();
  });
};

MappingChart.property = {};
MappingChart.property.content = {
  set: function set(content) {
    this._lineList.forEach(function (lineData) {
      this.removeElementInObject(lineData);
    }.bind(this));

    this._lineList = [];
    this.sync.then(function () {
      for (var i = 0; i < content.length; i++) {
        this.setLineElt(content[i].value, content[i].mapValue);
      }
    }.bind(this)); //
  },
  get: function get() {
    var ret = this._lineList.map(function (lineData) {
      return {
        value: lineData.value,
        mapValue: lineData.mapValue
      };
    });

    ret.sort(function (a, b) {
      return a.value - b.value;
    });
    return ret;
  }
};
/**
 * @typedef MapLine
 * @property {Number} value
 * @property {Number} mapValue
 * @property {Path} $line
 * @property {MappingChartMarker} $topMarker
 * @property {MappingChartMarker} $botMarker
 * @property {circle} $botPlot
 * @property {circle} $botPlot
 */

MappingChart.prototype.init = function (props) {
  this.on('mousemove', this.eventMoveHandler.bind(this));
  this.on('keydown', this.eventKeyDownHandler.bind(this));
  this.preInit();
  this._lineList = [];
  this.sync = this.sync.then(this.update.bind(this));
  this["super"](props);
  this.state = STATE_READY;
  /**
  * @type {Array<MapLine>}
  */

  this.initComp();
};

function MappingChartMarker() {
  var res = MappingChart_({
    // tag:'g',
    "class": 'mapping-chart-marker',
    attr: {
      transform: translate(200, 200)
    }
  });

  res.$box = MappingChart_('shape.mapping-chart-marker-box').addTo(res);
  res.$text = helper_text('', 0, -10, 'mapping-chart-marker-text').attr('text-anchor', 'middle').addTo(res);
  res.sync = res.afterAttached();
  return res;
}

MappingChartMarker.prototype.updateBox = function () {
  var textBBox = this.$text.getBBox();

  if (this.rotate180) {
    this.$box.begin().moveTo(0, 0).lineTo(-2, 5).lineTo(-textBBox.width / 2 - 5, 5).lineTo(-textBBox.width / 2 - 5, textBBox.height + 2 + 5).lineTo(textBBox.width / 2 + 5, +textBBox.height + 2 + 5).lineTo(textBBox.width / 2 + 5, 5).lineTo(2, 5).end();
    this.$text.attr('y', 3 + textBBox.height);
  } else {
    this.$box.begin().moveTo(0, 0).lineTo(-2, -5).lineTo(-textBBox.width / 2 - 5, -5).lineTo(-textBBox.width / 2 - 5, -textBBox.height - 2 - 5).lineTo(textBBox.width / 2 + 5, -textBBox.height - 2 - 5).lineTo(textBBox.width / 2 + 5, -5).lineTo(2, -5).end();
    this.$text.attr('y', -10);
  }
};

MappingChartMarker.prototype.moveTo = function (x, y) {
  this.attr('transform', translate(x, y));
  return this;
};

MappingChartMarker.property = {};
MappingChartMarker.property.text = {
  set: function set(value) {
    this._text = value + '';
    this.$text.innerHTML = this._text;
    this.updateBox();
  },
  get: function get() {
    return this._text || '';
  }
};
MappingChartMarker.property.rotate180 = {
  set: function set(value) {
    this._rotate180 = !!value;
    this.updateBox();
  },
  get: function get() {
    return !!this._rotate180;
  }
};
MappingChartMarker.attribute = {};
MappingChartMarker.attribute.rotate180 = {
  set: function set(value) {
    this.rotate180 = value == 'true' || value === true;
  },
  get: function get() {
    return this.rotate180 ? 'true' : 'false';
  },
  remove: function remove() {
    this.rotate180 = false;
  }
};
MappingChartMarker.attribute.rotate180 = {
  set: function set(value) {
    value = parseFloat(value + '');

    if (isNumber(value)) {
      this.hitboxWidth = value;
    }
  },
  get: function get() {
    return this.hitboxWidth + '';
  },
  remove: function remove() {
    this.hitboxWidth = 6;
  }
};

MappingChartMarker.prototype.init = function (props) {
  this["super"](props);
  this.sync.then(this.updateBox.bind(this));
};

src_VCore.creator.mappingchartmarker = MappingChartMarker;
src_VCore.creator.mappingchart = MappingChart;
/* harmony default export */ const src_MappingChart = ((/* unused pure expression or super */ null && (MappingChart)));
;// CONCATENATED MODULE: ./template/salaryimgchart.svg
/* harmony default export */ const salaryimgchart = ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- Created with Inkscape (http://www.inkscape.org/) -->\n<svg width=\"560\" height=\"320\" version=\"1.1\" viewBox=\"0 0 560 320\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n <defs>\n  <marker id=\"Arrow1Send\" overflow=\"visible\" orient=\"auto\">\n   <path transform=\"scale(.2) rotate(180) translate(6)\" d=\"m0 0 5-5-17.5 5 17.5 5-5-5z\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1pt\"/>\n  </marker>\n  <marker id=\"Arrow1Sstart\" overflow=\"visible\" orient=\"auto\">\n   <path transform=\"scale(.2) translate(6)\" d=\"m0 0 5-5-17.5 5 17.5 5-5-5z\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1pt\"/>\n  </marker>\n  <marker id=\"Arrow2Mend\" overflow=\"visible\" orient=\"auto\">\n   <path transform=\"scale(-.6)\" d=\"m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-linejoin=\"round\" stroke-width=\".625\"/>\n  </marker>\n  <marker id=\"Arrow2Mstart\" overflow=\"visible\" orient=\"auto\">\n   <path transform=\"scale(.6)\" d=\"m8.7186 4.0337-10.926-4.0177 10.926-4.0177c-1.7455 2.3721-1.7354 5.6175-6e-7 8.0354z\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-linejoin=\"round\" stroke-width=\".625\"/>\n  </marker>\n  <marker id=\"Arrow1Sstart-8\" overflow=\"visible\" orient=\"auto\">\n   <path transform=\"matrix(.2 0 0 .2 1.2 0)\" d=\"m0 0 5-5-17.5 5 17.5 5z\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1pt\"/>\n  </marker>\n  <marker id=\"Arrow1Send-3\" overflow=\"visible\" orient=\"auto\">\n   <path transform=\"matrix(-.2 0 0 -.2 -1.2 0)\" d=\"m0 0 5-5-17.5 5 17.5 5z\" fill-rule=\"evenodd\" stroke=\"#000\" stroke-width=\"1pt\"/>\n  </marker>\n </defs>\n <metadata>\n  <rdf:RDF>\n   <cc:Work rdf:about=\"\">\n    <dc:format>image/svg+xml</dc:format>\n    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n    <dc:title/>\n   </cc:Work>\n  </rdf:RDF>\n </metadata>\n </g>\n</svg>\n");
;// CONCATENATED MODULE: ./src/ImagesChart.js




var ImagesChart_ = src_VCore._;
var ImagesChart_$ = src_VCore.$;
/**
 * @deprecated
 * @constructor
 */

function SalaryImgChart() {}
SalaryImgChart.tag = 'SalaryImgChart'.toLowerCase();

SalaryImgChart.render = function () {
  return ImagesChart_(salaryimgchart.replace(/(.|[\r\n])+\<svg/, '<svg')).addClass('image-chart').addClass('base-chart');
};

SalaryImgChart.property = {};

SalaryImgChart.prototype.preInit = function () {
  //this is defaul and can not be change
  this.bonus = 20;
  this.distance = 400;
  this.minDistance = 10;
  this.colTexts = ['Bậc 1', 'Bậc n -1', 'Bậc n'];
  this.distText = 'Khoảng cách lương';
  this.minDistText = 'Khoảng cách tối thiểu';
  this.bonusText = 'Hệ số ưu đãi (20%)';
};

SalaryImgChart.prototype.initComp = function () {
  this.$ox = ImagesChart_('shape.image-chart-ox').addTo(this);
  this.$oxDash = ImagesChart_('shape.image-chart-ox[stroke-dasharray="4, 2"]').addTo(this);
  this.$bases = [ImagesChart_('rect.image-chart-base').addTo(this), ImagesChart_('rect.image-chart-base').addTo(this), ImagesChart_('rect.image-chart-base').addTo(this)];
  this.$bonuses = [ImagesChart_('rect.image-chart-bonus').addTo(this), ImagesChart_('rect.image-chart-bonus').addTo(this), ImagesChart_('rect.image-chart-bonus').addTo(this)];
  this.$distRange = ImagesChart_('shape.image-chart-range[marker-end="url(#Arrow2Mend)"][marker-start="url(#Arrow2Mstart)"]').addTo(this);
  this.$minDistRange = ImagesChart_('shape.image-chart-range[marker-end="url(#Arrow1Send)"][marker-start="url(#Arrow1Sstart)"]').addTo(this);
  this.$bonusRange = ImagesChart_('shape.image-chart-range[marker-end="url(#Arrow1Send)"][marker-start="url(#Arrow1Sstart)"]').addTo(this);
  this.$distTop = ImagesChart_('shape.image-chart-range-limit[stroke-dasharray="2, 1"]').addTo(this);
  this.$distBot = ImagesChart_('shape.image-chart-range-limit[stroke-dasharray="2, 1"]').addTo(this);
  this.$minDistBot = ImagesChart_('shape.image-chart-range-limit[stroke-dasharray="2, 1"]').addTo(this);
  this.$bonusTop = ImagesChart_('shape.image-chart-range-limit[stroke-dasharray="2, 1"]').addTo(this);
  this.$bonusBot = ImagesChart_('shape.image-chart-range-limit[stroke-dasharray="2, 1"]').addTo(this);
  this.$distText = helper_text('', 0, 0).addTo(this);
  this.$minDistText = helper_text('', 0, 0).attr('text-anchor', 'end').addTo(this);
  this.$bonusText = helper_text('', 0, 0).addTo(this);
  this.$lvTexts = [null, null, null].map(function () {
    return helper_text('', 0, 0).attr('text-anchor', 'middle').addTo(this);
  }.bind(this));
};

SalaryImgChart.prototype.updateComp = function () {
  var width = 560;
  var height = 320;
  var maxColHeight = 288;

  var _this = this;

  this.oxY = height - 20;
  this.colWidth = 40;
  this.oxSeg = [10, 100, 260, 500];
  this.xCols = [37, 272, 373];
  this.heightCols = [maxColHeight / (1 + this.distance / 100), maxColHeight / (1 + this.minDistance / 100), maxColHeight]; //<path d="m2.9298 290.03h21.626m43.891 0h51.013" fill="none" stroke="#4472c4" stroke-width=".26458px"/>

  this.$ox.begin().moveTo(this.oxSeg[0], this.oxY + 1).lineTo(this.oxSeg[1], this.oxY + 1).moveTo(this.oxSeg[2], this.oxY + 1).lineTo(this.oxSeg[3], this.oxY + 1).end(); // <path d="m24.555 290.03h43.891" fill="none" stroke="#4372c4" stroke-dasharray="1.05999993, 0.52999997" stroke-width=".265"/>

  this.$oxDash.begin().moveTo(this.oxSeg[1], this.oxY + 1).lineTo(this.oxSeg[2], this.oxY + 1).end();
  this.heightBase = this.heightCols.map(function (hc) {
    return map(100, 0, 100 + _this.bonus, 0, hc);
  });
  this.heightBonus = this.heightCols.map(function (hc) {
    return map(_this.bonus, 0, 100 + _this.bonus, 0, hc);
  });
  this.$bases.forEach(function (e, i) {
    var x = _this.xCols[i];
    var height = _this.heightBase[i];
    e.attr({
      x: x,
      y: _this.oxY - height,
      width: _this.colWidth,
      height: height
    });
  });
  this.$bonuses.forEach(function (e, i) {
    var x = _this.xCols[i];
    var height = _this.heightBonus[i];
    e.attr({
      x: x,
      y: _this.oxY - _this.heightCols[i],
      width: _this.colWidth,
      height: height
    });
  });
  this.$distRange.begin().moveTo(this.xCols[0] - 13, this.oxY - this.heightBase[2] + 2).lineTo(this.xCols[0] - 13, this.oxY - this.heightBase[0] - 2).end();
  this.$minDistRange.begin().moveTo(this.xCols[1] - 38, this.oxY - this.heightBase[2] + 1).lineTo(this.xCols[1] - 38, this.oxY - this.heightBase[1] - 1).end();
  this.$bonusRange.begin().moveTo(this.xCols[2] + 13 + this.colWidth, this.oxY - this.heightBase[2] - this.heightBonus[2] + 1).lineTo(this.xCols[2] + 13 + this.colWidth, this.oxY - this.heightBase[2] - 1).end();
  this.$distTop.begin().moveTo(this.xCols[0] - 13, this.oxY - this.heightBase[2]).lineTo(this.xCols[2], this.oxY - this.heightBase[2]).end();
  this.$distBot.begin().moveTo(this.xCols[0] - 13, this.oxY - this.heightBase[0]).lineTo(this.xCols[0], this.oxY - this.heightBase[0]).end();
  this.$minDistBot.begin().moveTo(this.xCols[1] - 38, this.oxY - this.heightBase[1]).lineTo(this.xCols[1], this.oxY - this.heightBase[1]).end();
  this.$bonusBot.begin().moveTo(this.xCols[2] + this.colWidth, this.oxY - this.heightBase[2]).lineTo(this.xCols[2] + 13 + this.colWidth, this.oxY - this.heightBase[2]).end();
  this.$bonusTop.begin().moveTo(this.xCols[2] + this.colWidth, this.oxY - this.heightBase[2] - this.heightBonus[2]).lineTo(this.xCols[2] + 13 + this.colWidth, this.oxY - this.heightBase[2] - this.heightBonus[2]).end();
  this.$distText.innerHTML = this.distText;
  this.$distText.attr({
    x: this.xCols[0] - 7,
    y: this.oxY - (this.heightBase[2] + this.heightBase[0]) / 2 + 5
  });
  this.$minDistText.innerHTML = this.minDistText;
  this.$minDistText.attr({
    x: this.xCols[1] - 38 - 6,
    y: this.oxY - (this.heightBase[2] + this.heightBase[1]) / 2 + 5
  });
  this.$bonusText.innerHTML = this.bonusText;
  this.$bonusText.attr({
    x: this.xCols[2] + 13 + this.colWidth + 6,
    y: this.oxY - this.heightBase[2] - this.heightBonus[2] / 2 + 5
  });
  this.$lvTexts.forEach(function (e, i) {
    e.innerHTML = _this.colTexts[i];
    e.attr({
      x: _this.xCols[i] + _this.colWidth / 2,
      y: _this.oxY + 15
    });
  });
};

SalaryImgChart.prototype.init = function (props) {
  this.preInit();
  this["super"](props);
  this.initComp();
  this.updateComp();
};

src_VCore.install(SalaryImgChart);
/* harmony default export */ const ImagesChart = ((/* unused pure expression or super */ null && (SalaryImgChart)));
;// CONCATENATED MODULE: ./src/SalaryScaleChart.js





var SalaryScaleChart_ = src_VCore._;
var SalaryScaleChart_$ = src_VCore.$;
/**
 *
 * @constructor
 */

function SalaryScaleChart() {
  this.resizeCtrl = new ChartResizeController(this);
}

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

SalaryScaleChart.render = function () {
  var svg = SalaryScaleChart_(salaryimgchart.replace(/(.|[\r\n])+<svg/, '<svg')).addClass('image-chart').addClass('vc-image-chart').addClass('vc-chart');

  svg.$attachhook = SalaryScaleChart_('sattachhook').addTo(svg);
  return SalaryScaleChart_({
    tag: svg_SvgCanvas.tag,
    elt: svg
  });
}; // SalaryScaleChart.prototype.updateSize = function () {
//     // this.attr({
//     //     width: this.canvasWidth,
//     //     height: this.canvasHeight,
//     //     viewBox: [0, 0, this.canvasWidth, this.canvasHeight].join(' ')
//     // })
// };


SalaryScaleChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  this.update();
};

SalaryScaleChart.prototype.initComp = function () {
  this.$colTexts = this.colTexts.map(function () {
    return helper_text('', 100, 100).attr('text-anchor', 'middle').addTo(this);
  }.bind(this));
  this.$bases = this.colTexts.map(function () {
    return SalaryScaleChart_('rect.image-chart-base').addTo(this);
  }.bind(this));
  this.$bonuses = this.colTexts.map(function () {
    return SalaryScaleChart_('rect.image-chart-bonus').addTo(this);
  }.bind(this));
  this.$oxLine = SalaryScaleChart_('shape.image-chart-ox').addTo(this);
  this.$oxDash = SalaryScaleChart_('shape.image-chart-ox[stroke-dasharray="4, 2"]').addTo(this);
  this.$sizeTexts = this.sizeTexts.map(function () {
    return helper_text('', 100, 100).addTo(this);
  }.bind(this));
  this.$ranges = this.sizeTexts.map(function () {
    return SalaryScaleChart_('shape.image-chart-range[marker-end="url(#Arrow2Mend)"][marker-start="url(#Arrow2Mstart)"]', 100, 100).addTo(this);
  }.bind(this));
  this.$hLine = Array(5).fill(0).map(function () {
    return SalaryScaleChart_('shape.image-chart-range-limit[stroke-dasharray="2, 1"]').addTo(this);
  }.bind(this));
};

SalaryScaleChart.prototype.updateText = function () {
  var self = this;
  this.$colTexts.forEach(function (elt, i) {
    var text = self.colTexts[i];
    elt.innerHTML = text;
    elt.attr('y', self.oy);
  });
  this.oy -= getMaxHeightBox.apply(null, this.$colTexts);
  this.oy -= this.textMargin;
  this.$sizeTexts.forEach(function (elt, i) {
    var text = self.sizeTexts[i];
    elt.innerHTML = text;
  });
  this.oxLength -= getMaxWidthBox(this.$sizeTexts[0], this.$sizeTexts[1]);
  this.oxLength -= this.textMargin;
};

SalaryScaleChart.prototype.updateAxis = function () {
  var self = this;
  var leftCol = this.ox + this.axisPadding;
  var rightCol = this.ox + this.oxLength - this.axisPadding - this.rangeMargin - this.colWidth;
  this.colXs = [leftCol, leftCol / 3 + rightCol * 2 / 3, rightCol];
  this.$oxLine.begin().moveTo(this.ox, this.oy).lineTo(this.ox + this.oxLength / 4, this.oy).moveTo(this.ox + this.oxLength / 2, this.oy).lineTo(this.ox + this.oxLength, this.oy).end();
  this.$oxDash.begin().moveTo(this.ox + this.oxLength / 4, this.oy).lineTo(this.ox + this.oxLength / 2, this.oy).end();
  this.$colTexts.forEach(function (elt, i) {
    elt.attr('x', self.colXs[i] + self.colWidth / 2);
  });
  this.maxColHeight = this.oy - this.paddingContent;
};

SalaryScaleChart.prototype.updateCols = function () {
  var self = this;
  this.heightCols = [this.maxColHeight / (1 + this.distance / 100), this.maxColHeight / (1 + this.minDistance / 100), this.maxColHeight];

  if (this.bonus < 0) {
    this.heightCols = this.heightCols.map(function (x) {
      return x * (100 + self.bonus) / 100;
    });
  }

  if (this.bonus < 0) {
    this.addClass('as-bonus-under-100-percent');
  } else {
    this.removeClass('as-bonus-under-100-percent');
  }

  this.baseHeight = this.heightCols.map(function (h) {
    return h / (100 + self.bonus) * 100;
  });
  this.bonusHeight = this.heightCols.map(function (h) {
    return h / (100 + self.bonus) * self.bonus;
  });
  this.$bases.forEach(function (e, i) {
    var height = self.baseHeight[i];
    e.attr({
      x: self.colXs[i],
      y: self.oy - height,
      width: self.colWidth,
      height: height
    });
  });

  if (this.bonus >= 0) {
    this.$bonuses.forEach(function (e, i) {
      var height = self.bonusHeight[i];
      e.attr({
        x: self.colXs[i],
        y: self.oy - self.heightCols[i],
        width: self.colWidth,
        height: height
      });
    });
  } else {
    this.$bonuses.forEach(function (e, i) {
      var height = self.bonusHeight[i];
      e.attr({
        x: self.colXs[i],
        y: self.oy - self.heightCols[i] + height,
        width: self.colWidth,
        height: -height
      });
    });
  }
};

SalaryScaleChart.prototype.updateRange = function () {
  var self = this;
  var rangeX = this.colXs.map(function (x) {
    return x + self.colWidth + self.rangeMargin;
  });
  this.$ranges[0].begin().moveTo(rangeX[2], this.oy - this.baseHeight[2] + this.arrowPadding).lineTo(rangeX[2], this.oy - this.baseHeight[0] - this.arrowPadding).end();
  this.$ranges[1].begin().moveTo(rangeX[2], this.oy - this.baseHeight[0] + this.arrowPadding).lineTo(rangeX[2], this.oy - this.arrowPadding).end();
  this.$ranges[2].begin().moveTo(rangeX[1], this.oy - this.baseHeight[2] + this.arrowPadding).lineTo(rangeX[1], this.oy - this.baseHeight[1] - this.arrowPadding).end();
  this.$ranges[3].begin().moveTo(rangeX[1], this.oy - this.baseHeight[1] + this.arrowPadding).lineTo(rangeX[1], this.oy - this.arrowPadding).end();
  this.$ranges[4].begin().moveTo(rangeX[0], this.oy - this.heightCols[0] + this.arrowPadding).lineTo(rangeX[0], this.oy - this.arrowPadding).end();
  this.$hLine[0].begin().moveTo(this.colXs[2] + this.colWidth, this.oy - this.baseHeight[2]).lineTo(rangeX[2], this.oy - this.baseHeight[2]).end();
  this.$hLine[1].begin().moveTo(this.colXs[2], this.oy - this.baseHeight[2]).lineTo(rangeX[1], this.oy - this.baseHeight[2]).end();
  this.$hLine[2].begin().moveTo(this.colXs[1] + this.colWidth, this.oy - this.baseHeight[1]).lineTo(rangeX[1], this.oy - this.baseHeight[1]).end();
  this.$hLine[3].begin().moveTo(this.colXs[0] + this.colWidth, this.oy - this.heightCols[0]).lineTo(rangeX[0], this.oy - this.heightCols[0]).end();
  this.$hLine[4].begin().moveTo(this.colXs[0] + this.colWidth, this.oy - this.baseHeight[0]).lineTo(rangeX[2], this.oy - this.baseHeight[0]).end(); //a

  this.$sizeTexts[0].attr({
    x: rangeX[2] + this.textMargin,
    y: this.oy - (this.baseHeight[2] + this.baseHeight[0]) / 2 + 4
  }); //b

  this.$sizeTexts[1].attr({
    x: rangeX[2] + this.textMargin,
    y: this.oy - this.baseHeight[0] / 2 + 4
  }); //c

  this.$sizeTexts[2].attr({
    x: rangeX[1] + this.textMargin,
    y: this.oy - (this.baseHeight[2] + this.baseHeight[1]) / 2 + 4
  }); //d

  this.$sizeTexts[3].attr({
    x: rangeX[1] + this.textMargin,
    y: this.oy - this.baseHeight[1] / 2 + 4
  }); //e

  this.$sizeTexts[4].attr({
    x: rangeX[0] + this.textMargin,
    y: this.oy - this.heightCols[0] / 2 + 4
  });
};

SalaryScaleChart.prototype.update = function () {
  this.oy = this.canvasHeight - this.paddingContent;
  this.oxLength = this.canvasWidth - 2 * this.paddingContent;
  this.ox = this.paddingContent;
  this.updateText();
  this.updateAxis();
  this.updateCols();
  this.updateRange();
};

SalaryScaleChart.prototype.preInit = function () {
  this.canvasWidth = 560;
  this.canvasHeight = 320;
  this.paddingContent = 10;
  this.colTexts = ['Bậc 1', 'Bậc n -1', 'Bậc n'];
  this.sizeTexts = ['a', 'b', 'c', 'd', 'e'];
  this.bonus = 20;
  this.distance = 80;
  this.minDistance = 10; // this.sizeTexts = ['Lương tối đa', 'b', 'c', 'd', 'e'];

  this.colWidth = 40;
  this.textMargin = 5;
  this.axisPadding = 30;
  this.rangeMargin = 20;
  this.arrowPadding = 2.5;
};

SalaryScaleChart.prototype.init = function (props) {
  this.preInit();
  this["super"](props);
  this.initComp();
  this.$attachhook.once('attached', this.update.bind(this));
};

SalaryScaleChart.property = {};
SalaryScaleChart.property.canvasHeight = {
  set: function set(value) {
    this.addStyle('height', value + 'px');
    this.box.height = value;
  },
  get: function get() {
    return this.box.height;
  }
};
SalaryScaleChart.property.canvasWidth = {
  set: function set(value) {
    this.addStyle('width', value + 'px');
    this.box.width = value;
  },
  get: function get() {
    return this.box.width;
  }
};
src_VCore.install('SalaryScaleChart'.toLowerCase(), SalaryScaleChart);
;// CONCATENATED MODULE: ./src/HorizontalBarChart.js





var HorizontalBarChart_ = src_VCore._;
var HorizontalBarChart_$ = src_VCore.$;

function HorizontalBarChart() {
  var self = this;
  this.resizeCtrl = new ChartResizeController(this);
  this._bars = [];
  this._vLines = [];
  this._title = '';
  this._ranges = [];
  this._includeValues = [];
  this._dataUpdateTimeout = -1;
  this._padding = 5;
  this._ox = 0;
  this._oy = 0;
  this._oxLength = 0;
  this._oyLength = 0;
  this._oyTop = 25;
  this._oxRight = this._padding;
  this._barWidth = 35;
  this._rangeWidth = 15;
  this._minValue = 0;
  this._maxValue = 10;
  this._keys = [];
  this._keyColors = [];
  this._barMargin = 5;
  this._zeroOY = true;
  this._maxSegment = 10;
  this._minRangeText = "Min";
  this._maxRangeText = "Max";
  /**
   * @type {import('./Axis').default}
   */

  this.$axis = HorizontalBarChart_$('axis', this);
  this.$title = HorizontalBarChart_$('text.vc-horizontal-bar-title', this);
  this.$whiteBoxMask = HorizontalBarChart_$('.base-chart-white-mask', this);
  this.$content = HorizontalBarChart_$('.vc-horizontal-bar-chart-content', this);
  this.$noteContainer = HorizontalBarChart_$('g.vc-horizontal-bar-note-container', this);
  this.$noteBox = HorizontalBarChart_$('.vc-horizontal-bar-vline-note-box', this);
  this.$oneBarNoteContainer = HorizontalBarChart_$('g.vc-horizontal-bar-one-bar-note-container', this); // this.$keysNoteContainer = $('g.vc-horizontal-bar-keys-note-container', this);

  this.$vLinesNoteContainer = HorizontalBarChart_$('g.vc-horizontal-bar-vline-note-container', this);
  this.$segmentTextContainer = HorizontalBarChart_$('g.vc-horizontal-bar-segment-text-container', this);
  this.$vLineContainer = HorizontalBarChart_$('g.vc-horizontal-bar-vline-container', this);
  this.$valueLineContainer = HorizontalBarChart_$('.vc-horizontal-bar-chart-value-line-container', this);
  this.$keys = [];
  this.$segmentTexts = [];
  this.$valueLines = [];
  this.$bars = [];
  this.$ranges = [];
  this.$vLines = [];
  this.$attachhook = HorizontalBarChart_$("sattachhook", this).on('error', function (error) {
    this.updateSize = this.updateSize || self.updatePosition.bind(self);
    Dom/* default.addToResizeSystem */.ZP.addToResizeSystem(this);
  });
  this.sync = new Promise(function (rs) {
    self.$attachhook.on('error', rs);
  });
  this.sync.then(this.notifyDataChange.bind(this));
}

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

HorizontalBarChart.prototype._createKeyNote = function (color, keyName) {
  return HorizontalBarChart_({
    "class": 'vc-horizontal-bar-key-note',
    child: [rect(0, 0, 14, 14).addStyle('fill', color), helper_text(keyName, 17, 12)]
  });
};

HorizontalBarChart.prototype._createVLineNote = function (color, keyName) {
  return HorizontalBarChart_({
    "class": 'vc-horizontal-bar-vline-note',
    child: [hline(0, 7, 20).addStyle('stroke', color), helper_text(keyName, 25, 12)]
  });
};

HorizontalBarChart.prototype.processData = function () {
  this._minValue = this._bars.concat(this._includeValues).reduce(function (ac, cr) {
    return Math.min(ac, cr);
  }, 10000000);
  this._minValue = this._ranges.reduce(function (ac, cr) {
    return Math.min(ac, cr[0], cr[1]);
  }, this._minValue);
  this._maxValue = this._bars.concat(this._includeValues).reduce(function (ac, cr) {
    return Math.max(ac, cr);
  }, -10000000);
  this._maxValue = this._ranges.reduce(function (ac, cr) {
    return Math.max(ac, cr[1], cr[0]);
  }, this._maxValue);
  if (this._zeroOY) this._minValue = Math.min(0, this._minValue);
  this._beautiSegment = calBeautySegment(this._maxSegment, this._minValue, this._maxValue);
};

HorizontalBarChart.prototype.initBarNote = function () {
  this.$oneBarNoteContainer.$minText = helper_text(this._minRangeText, 0, 14).addTo(this.$oneBarNoteContainer);
  this.$oneBarNoteContainer.$maxText = helper_text(this._maxRangeText, 0, 14 + 10 + this._barWidth + 10 + 14).addTo(this.$oneBarNoteContainer);
  this.$oneBarNoteContainer.$bar = this.$oneBarNoteContainer.$bar || rect(0.5, 14 + 10 + 0.5, 100, this._barWidth - 1, 'vc-horizontal-bar-chart-bar').addTo(this.$oneBarNoteContainer);
  this.$oneBarNoteContainer.$range = this.$oneBarNoteContainer.$range || rect(80.5, 14 + 10 + Math.floor((this._barWidth - this._rangeWidth) / 2) + 0.5, 30, this._rangeWidth - 1, 'vc-horizontal-bar-chart-range').addTo(this.$oneBarNoteContainer);
  this.$oneBarNoteContainer.$minLine = vline(80.5, 14 + 10 + Math.floor((this._barWidth - this._rangeWidth) / 3), -Math.floor((this._barWidth - this._rangeWidth) / 3) - 5, 'vc-horizontal-bar-chart-range-min-line').addTo(this.$oneBarNoteContainer);
  this.$oneBarNoteContainer.$maxLine = vline(80.5 + 30, 14 + 10 + this._barWidth - Math.floor((this._barWidth - this._rangeWidth) / 2), Math.floor((this._barWidth - this._rangeWidth) / 2) + 8, 'vc-horizontal-bar-chart-range-max-line').addTo(this.$oneBarNoteContainer);
};

HorizontalBarChart.prototype.updateOneBarNotePosition = function () {
  var minTextBox = this.$oneBarNoteContainer.$minText.getBBox();
  var maxTextBox = this.$oneBarNoteContainer.$maxText.getBBox();
  var maxTextLength = Math.max(minTextBox.width, maxTextBox.width);

  if (minTextBox.width / 2 > 80.5) {
    this.$oneBarNoteContainer.$bar.attr('x', Math.floor(maxTextLength / 2 - 80.5) + 0.5 + '');
    this.$oneBarNoteContainer.$range.attr('x', Math.floor(maxTextLength / 2 - 80.5) + 0.5 + 80 + '');
    moveVLine(this.$oneBarNoteContainer.$minLine, Math.floor(minTextBox.width / 2 - 80.5) + 0.5 + 80, 14 + 10 + Math.floor((this._barWidth - this._rangeWidth) / 3), -Math.floor((this._barWidth - this._rangeWidth) / 3) - 5);
    moveVLine(this.$oneBarNoteContainer.$maxLine, Math.floor(minTextBox.width / 2 - 80.5) + 0.5 + 80 + 30, 14 + 10 + this._barWidth - Math.floor((this._barWidth - this._rangeWidth) / 2), Math.floor((this._barWidth - this._rangeWidth) / 2) + 8);
  } else {
    this.$oneBarNoteContainer.$minText.attr('x', 80.5 - minTextBox.width / 2);
    this.$oneBarNoteContainer.$maxText.attr('x', 80.5 + 30 - maxTextBox.width / 2);
  }
};

HorizontalBarChart.prototype.generateColor = function () {
  var colorLength = Math.max(this._keys.length, this._bars.length) + this._vLines.length;

  if (this._keyColors.length < colorLength) {
    this._keyColors = generateBackgroundColors(colorLength).map(function (c) {
      return fresherColor(c);
    });
  }
};

HorizontalBarChart.prototype.initKeysNote = function () {
  var self = this;
  this.$keysNoteContainer.clearChild();
  this.$keyNotes = this._keys.map(function (text, i) {
    var color = self._keyColors[i];
    return self._createKeyNote(color, text).addTo(self.$keysNoteContainer);
  });
};

HorizontalBarChart.prototype.initVLinesNote = function () {
  var self = this;
  this.$vLinesNoteContainer.clearChild();
  this.$vLineNotes = this._vLines.map(function (vline, i) {
    return self._createVLineNote(vline.color || lighterColor(self._keyColors[self._keys.length + i], -0.2), vline.name + '').addTo(self.$vLinesNoteContainer).attr('transform', translate(0, i * 20));
  });
};

HorizontalBarChart.prototype.initNote = function () {
  this.initVLinesNote();
  this.initBarNote();
};

HorizontalBarChart.prototype.updateNotePosition = function () {
  this.updateOneBarNotePosition();
  var y = this._padding;
  var x = this._padding;
  this.$vLinesNoteContainer.attr('transform', translate(x, y));
  y += this.$vLinesNoteContainer.getBBox().height + 5 + this._padding;
  this.$oneBarNoteContainer.attr('transform', translate(this._padding, y));
  this.$noteBox.attr({
    width: '1',
    height: '1'
  }); //align right

  var box = this.$noteContainer.getBBox();
  this.$noteBox.attr({
    width: box.width + this._padding - 1 + '',
    height: box.height + this._padding - 1 + ''
  });
  this.$noteContainer.attr('transform', translate(this._canvasWidth - this._padding - box.width - this._padding, this._canvasHeight / 3 - (box.height + this._padding) / 2));
  this._oxRight = this._canvasWidth - box.width - this._padding * 2;
};

HorizontalBarChart.prototype.initAxisText = function () {
  while (this.$keys.length < this._keys.length) {
    this.$keys.push(helper_text('', 0, 0, 'vc-horizontal-bar-chart-key').addTo(this.$content));
  }

  while (this.$keys.length > this._keys.length) {
    this.$keys.pop().remove();
  }

  for (var i = 0; i < this._keys.length; ++i) {
    this.$keys[i].innerHTML = this._keys[i];
  }

  while (this.$segmentTexts.length > this._beautiSegment.segmentCount + 1) {
    this.$segmentTexts.pop().remove();
  }

  while (this.$segmentTexts.length < this._beautiSegment.segmentCount + 1) {
    this.$segmentTexts.push(helper_text('', 0, 0, 'vc-horizontal-bar-chart-segment-text').addTo(this.$segmentTextContainer));
  }

  for (var i = 0; i < this.$segmentTexts.length; ++i) {
    this.$segmentTexts[i].innerHTML = this._beautiSegment.minValue + this._beautiSegment.step * i + '';
  }

  this.$valueLineContainer.clearChild();
  this.$valueLines = Array(this.$segmentTexts.length - 1).fill(0).map(function () {
    return vline(0, 0, 0, 'vc-horizontal-bar-chart-value-line').addTo(this.$valueLineContainer);
  }.bind(this));
};

HorizontalBarChart.prototype.initBars = function () {
  while (this.$bars.length < this._bars.length) {
    this.$bars.push(rect(0, 0, 0, this._barWidth, 'vc-horizontal-bar-chart-bar').addTo(this.$content));
  }

  while (this.$bars.length > this._bars.length) {
    this.$bars.pop().remove();
  }

  for (var i = 0; i < this.$bars.length; ++i) {
    this.$bars[i].addStyle('fill', this._keyColors[i]);
  }
};

HorizontalBarChart.prototype.initRanges = function () {
  while (this.$ranges.length < this._ranges.length) {
    this.$ranges.push(rect(0, 0, 0, this._rangeWidth, 'vc-horizontal-bar-chart-range').addTo(this.$content));
  }

  while (this.$ranges.length > this._ranges.length) {
    this.$ranges.pop().remove();
  }

  for (var i = 0; i < this.$ranges.length; ++i) {
    this.$ranges[i].addStyle('fill', lighterColor(this._keyColors[i], 0.3));
  }
};

HorizontalBarChart.prototype.initVLines = function () {
  var self = this;
  this.$vLineContainer.clearChild();
  this.$vLines = this._vLines.map(function (vLineData, i) {
    return vline(0, 0, 0, 'vc-horizontal-bar-vline').addStyle('stroke', vLineData.color || lighterColor(self._keyColors[self._keys.length + i], -0.2)).addTo(self.$vLineContainer);
  });
};

HorizontalBarChart.prototype.notifyDataChange = function () {
  if (this._dataUpdateTimeout >= 0) return;
  var self = this;
  this._dataUpdateTimeout = setTimeout(function () {
    self.update();
    self._dataUpdateTimeout = -1;
  });
};

HorizontalBarChart.prototype.updateCanvasSize = function () {
  var bound = this.getBoundingClientRect();
  this._canvasHeight = this.__canvasHeight;
  this._canvasWidth = this.__canvasWidth;

  if (!(this._canvasWidth > 0)) {
    this._canvasWidth = bound.width;
  }

  if (!(this._canvasHeight > 0)) {
    this._canvasHeight = bound.height;
  }

  this.attr('width', this._canvasWidth + '');
  this.attr('height', this._canvasHeight + '');
  this._oyTop = 25 + this.$title.getBBox().height * 1.5;
  this._ox = this._padding;
  this._oy = this._canvasHeight - this._padding;
  this._oxLength = this._oxRight - this._padding - this._ox;
  this._oyLength = this._oy - this._padding - this._oyTop;
};

HorizontalBarChart.prototype.updateAxisPosition = function () {
  this.$axis.moveTo(this._ox - 0.5, this._oy - 0.5);
  this.$axis.resize(this._oxLength + 15, this._oyLength + 10);
  this.$whiteBoxMask.attr('d', 'M0,0  0,cvh cvw,cvh cvw,0zMleft,top  left,bottom right,bottom right,topz'.replace(/cvh/g, this._canvasHeight).replace(/cvw/g, this._canvasWidth).replace(/left/g, this._padding).replace(/top/g, 10).replace(/bottom/g, this._oy).replace(/right/g, this._canvasWidth - 10));
  this.$title.attr('x', (this._oxRight + this._ox) / 2 + '');
};

HorizontalBarChart.prototype.updateAxisTextPosition = function () {
  var maxWidthKey = getMaxWidthBox.apply(null, this.$keys);
  this._ox = Math.ceil(maxWidthKey) + 0.5 + this._padding + 5;
  this._oxLength = this._oxRight - this._padding - this._ox;
  this._oy -= 21;
  this._oyLength = this._oy - this._padding - this._oyTop;
  var barMargin = Math.max(this._barMargin, (this._oyLength / this._keys.length - this._barWidth) / 2);
  var i;

  for (i = 0; i < this.$keys.length; ++i) {
    this.$keys[i].attr({
      x: -5,
      y: -(i + 0.5) * (barMargin * 2 + this._barWidth) + 7
    });
    this.$bars[i].attr('y', -i * (barMargin * 2 + this._barWidth) - barMargin - this._barWidth);
    this.$ranges[i].attr('y', -i * (barMargin * 2 + this._barWidth) - barMargin - this._barWidth + Math.floor((this._barWidth - this._rangeWidth) / 2));
  }

  this._segmentLength = this._oxLength / this._beautiSegment.segmentCount;

  for (i = 0; i < this.$segmentTexts.length; ++i) {
    this.$segmentTexts[i].attr({
      x: this._ox + this._segmentLength * i,
      y: this._oy + 18
    });
  }

  for (i = 0; i < this.$valueLines.length; ++i) {
    moveVLine(this.$valueLines[i], this._ox + this._segmentLength * (i + 1), this._oy - this._oyLength, this._oyLength);
  }

  this.$content.attr('transform', translate(this._ox, this._oy));
};

HorizontalBarChart.prototype.updateBarsPosition = function () {
  for (var i = 0; i < this.$bars.length; ++i) {
    this.$bars[i].attr('width', map(this._bars[i], this._beautiSegment.minValue, this._beautiSegment.maxValue, 0, this._oxLength));
  }
};

HorizontalBarChart.prototype.updateRangesPosition = function () {
  var left, right, range;

  for (var i = 0; i < this.$bars.length; ++i) {
    range = this._ranges[i];
    left = map(range[0], this._beautiSegment.minValue, this._beautiSegment.maxValue, 0, this._oxLength);
    right = map(range[1], this._beautiSegment.minValue, this._beautiSegment.maxValue, 0, this._oxLength);
    this.$ranges[i].attr({
      width: right - left + '',
      x: left + ''
    });
  }
};

HorizontalBarChart.prototype.updateVLinesPosition = function () {
  for (var i = 0; i < this.$vLines.length; ++i) {
    moveVLine(this.$vLines[i], this._ox + map(this._vLines[i].value, this._beautiSegment.minValue, this._beautiSegment.maxValue, 0, this._oxLength), this._oy - this._oyLength, this._oyLength);
  }
};

HorizontalBarChart.prototype.updatePosition = function () {
  this.updateCanvasSize();
  this.updateNotePosition();
  this.updateAxisTextPosition();
  this.updateBarsPosition();
  this.updateRangesPosition();
  this.updateVLinesPosition();
  this.updateAxisPosition();
};

HorizontalBarChart.prototype.update = function () {
  this.generateColor();
  this.processData();
  this.initNote();
  this.initAxisText();
  this.initBars();
  this.initRanges();
  this.initVLines();
  this.updatePosition();
};

HorizontalBarChart.property = {};
HorizontalBarChart.property.canvasWidth = {
  set: function set(value) {
    if (value >= 0) {
      this.attr('width', undefined);
      this.__canvasWidth = value;
    } else {
      this._canvasWidth = -1;
    }

    this.notifyDataChange();
  },
  get: function get() {
    return this.__canvasWidth;
  }
};
HorizontalBarChart.property.canvasHeight = {
  set: function set(value) {
    if (value >= 0) {
      this.attr('height', undefined);
      this.__canvasHeight = value;
    } else {
      this.__canvasHeight = -1;
    }

    this.notifyDataChange();
  },
  get: function get() {
    return this.__canvasHeight;
  }
};
HorizontalBarChart.property.keys = {
  set: function set(value) {
    this._keys = value || [];
    this.notifyDataChange();
  },
  get: function get() {
    return this._keys;
  }
};
HorizontalBarChart.property.bars = {
  set: function set(value) {
    this._bars = value || [];
    this.notifyDataChange();
  },
  get: function get() {
    return this._bars;
  }
};
HorizontalBarChart.property.ranges = {
  set: function set(value) {
    this._ranges = value || [];
    this.notifyDataChange();
  },
  get: function get() {
    return this._ranges;
  }
};
HorizontalBarChart.property.vLines = {
  set: function set(value) {
    this._vLines = value || [];
    this.notifyDataChange();
  },
  get: function get() {
    return this._vLines;
  }
};
HorizontalBarChart.property.includeValues = {
  set: function set(value) {
    this._includeValues = value || [];
    this.notifyDataChange();
  },
  get: function get() {
    return this._includeValues;
  }
};
HorizontalBarChart.property.maxSegment = {
  set: function set(value) {
    this._maxSegment = value || 10;
  },
  get: function get() {
    return this._maxSegment;
  }
};
HorizontalBarChart.property.title = {
  set: function set(value) {
    this._title = value || '';
    this.$title.innerHTML = this._title;
    this.notifyDataChange();
  },
  get: function get() {
    return this._title;
  }
};
HorizontalBarChart.property.minRangeText = {
  set: function set(value) {
    this._minRangeText = value || '';
    this.notifyDataChange();
  },
  get: function get() {
    return this._minRangeText;
  }
};
HorizontalBarChart.property.maxRangeText = {
  set: function set(value) {
    this._maxRangeText = value || '';
    this.notifyDataChange();
  },
  get: function get() {
    return this._maxRangeText;
  }
};
HorizontalBarChart.property.title = {
  set: function set(value) {
    this._title = value || '';
    this.$title.innerHTML = this._title;
    this.notifyDataChange();
  },
  get: function get() {
    return this._title;
  }
};

HorizontalBarChart.render = function () {
  return HorizontalBarChart_({
    tag: 'svg',
    "class": ['vc-horizontal-bar-chart', 'base-chart'],
    child: ['.vc-horizontal-bar-chart-value-line-container', '.vc-horizontal-bar-chart-content', {
      tag: 'path',
      "class": 'base-chart-white-mask',
      attr: {
        fill: 'white',
        stroke: 'white',
        'fill-rule': 'evenodd',
        d: 'M0,0  0,2000 2000,2000 2000,0zM100,100  100,200 200,200 200,100z'
      }
    }, 'axis', 'g.vc-horizontal-bar-segment-text-container', 'g.vc-horizontal-bar-vline-container', {
      "class": 'vc-horizontal-bar-note-container',
      child: [rect(0.5, 0.5, 1, 1, 'vc-horizontal-bar-vline-note-box'), 'g.vc-horizontal-bar-vline-note-container', 'g.vc-horizontal-bar-one-bar-note-container']
    }, 'text.vc-horizontal-bar-title[y="20"]', 'sattachhook']
  });
};

src_VCore.install('HorizontalBarChart'.toLowerCase(), HorizontalBarChart);
/* harmony default export */ const src_HorizontalBarChart = ((/* unused pure expression or super */ null && (HorizontalBarChart)));
// EXTERNAL MODULE: ./src/style/spiderchart.css
var spiderchart = __webpack_require__(9563);
;// CONCATENATED MODULE: ./src/NoteGrid.js


var NoteGrid_ = src_VCore._;
var NoteGrid_$ = src_VCore.$;

function NoteGrid() {
  this._width = NaN;
  this._height = NaN;
  this._itemMargin = 0;
  this._padding = 0;
  this.$content = NoteGrid_$('.vchart-node-grid-content', this);
  this.$box = NoteGrid_$('rect.vchart-node-grid-box', this);
  this.boxWidth = 0;
  this.boxHeight = 0;
}

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

NoteGrid.prototype.updateSize = function () {
  // this.
  var children = Array.prototype.slice.call(this.$content.children);
  var bBoxes = children.map(function (e) {
    return e.getBBox();
  });
  var maxWidth = bBoxes.reduce(function (ac, cr) {
    return Math.max(ac, cr.width);
  }, 0);
  var maxHeight = bBoxes.reduce(function (ac, cr) {
    return Math.max(ac, cr.height);
  }, 0);
  var availableWidth;
  if (this._width > 0) availableWidth = this._width;else availableWidth = this._padding * 2 + (children.length - 1) * this._itemMargin + children.length * maxWidth;
  var itemPerRow = Math.floor((availableWidth - this._padding * 2 + this._itemMargin + 0.1) / (maxWidth + this._itemMargin));
  var marginRight = (availableWidth - this._padding * 2 - itemPerRow * maxWidth) / (itemPerRow - 1); //in view

  var availableHeight;
  var itemPerCol = Math.ceil(children.length / itemPerRow);
  if (this._height > 0) availableHeight = this._height;else availableHeight = this._padding * 2 + (itemPerCol - 1) * this._itemMargin + itemPerCol * maxHeight;
  var marginBottom = (availableHeight - this._padding * 2 - itemPerCol * maxHeight) / (itemPerCol - 1); //in view

  this.boxWidth = availableWidth;
  this.boxHeight = availableHeight;
  this.$box.attr({
    x: 0,
    y: 0,
    width: availableWidth,
    height: availableHeight
  });
  var i = 0;
  var x, y;
  if (isNaN(marginBottom)) marginBottom = 0;
  if (isNaN(marginRight)) marginRight = 0;

  for (var rIndex = 0; rIndex < itemPerCol && i < children.length; ++rIndex) {
    for (var cIndex = 0; cIndex < itemPerRow && i < children.length; ++cIndex) {
      x = this._padding + cIndex * (maxWidth + marginRight);
      y = this._padding + rIndex * (maxHeight + marginBottom);
      children[i].attr('transform', translate(x, y));
      ++i;
    }
  }
};

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

NoteGrid.render = function () {
  return NoteGrid_({
    "class": 'vchart-node-grid',
    child: ['rect.vchart-node-grid-box', '.vchart-node-grid-content']
  });
};

NoteGrid.attribute = {};
NoteGrid.attribute.width = {
  set: function set(value) {
    value = parseFloat(value);
    this._width = value;
  },
  get: function get() {
    return this._width;
  },
  remove: function remove() {
    this._width = NaN;
  }
};
NoteGrid.attribute.height = {
  set: function set(value) {
    value = parseFloat(value);
    this._height = value;
  },
  get: function get() {
    return this._height;
  },
  remove: function remove() {
    this._height = NaN;
  }
};
NoteGrid.attribute.itemMargin = {
  set: function set(value) {
    value = parseFloat(value);
    this._itemMargin = value;
  },
  get: function get() {
    return this._itemMargin;
  },
  remove: function remove() {
    this._itemMargin = NaN;
  }
};
NoteGrid.attribute.padding = {
  set: function set(value) {
    value = parseFloat(value);
    this._padding = value;
  },
  get: function get() {
    return this._padding;
  },
  remove: function remove() {
    this._padding = NaN;
  }
};
src_VCore.install('NoteGrid'.toLowerCase(), NoteGrid);
/* harmony default export */ const src_NoteGrid = ((/* unused pure expression or super */ null && (NoteGrid)));
;// CONCATENATED MODULE: ./src/SpiderChart.js






var SpiderChart_ = src_VCore._;
var SpiderChart_$ = src_VCore.$;

function SpiderChart() {
  this.$attachhook = SpiderChart_('attachhook').addTo(this).on('attached', this.eventHandler.attached);
  this.$background = SpiderChart_$('.vchart-spider-chart-background', this);
  this.$axisCtn = SpiderChart_$('.vchart-spider-chart-axis-ctn', this.$background);
  this.$forceground = SpiderChart_$('.vchart-spider-chart-forceground', this);
  this.$title = SpiderChart_$('.base-chart-title', this.$forceground);
  this.$noteCtn = SpiderChart_$('.vchart-spider-chart-note-ctn', this);
  this._canvasWidth = 'auto';
  this._canvasHeight = 'auto';
  this._viewCanvasHeight = 0;
  this._viewCanvasWidth = 0;
  this._resizeCallback = [];
  this._drew = false;
  this.ctitle = {
    text: 'This is title',
    $elt: this.$title
  };
  this._viewExpected = {};
  this._viewOption = {// noteLineLength: 15,
    // noteBoxHight: 14
  };
  this.$noteGrid = SpiderChart_$('notegrid', this);
}

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

SpiderChart.render = function () {
  return SpiderChart_({
    tag: 'svg',
    "class": 'vchart-base',
    child: [{
      "class": 'vchart-spider-chart-background',
      child: ['.vchart-spider-chart-axis-ctn']
    }, {
      "class": 'vchart-spider-chart-content'
    }, {
      "class": 'vchart-spider-chart-forceground',
      child: ['text.base-chart-title', '.vchart-spider-chart-note-ctn']
    }, {
      tag: 'notegrid',
      attr: {
        itemMargin: 20,
        padding: 5
      },
      child: [{
        tag: src_KeyNote,
        attr: {
          transform: translate(10, 20)
        },
        props: {
          type: 'line',
          text: 'Long long text',
          color: 'red'
        }
      }, {
        tag: src_KeyNote,
        attr: {
          transform: translate(10, 40)
        },
        props: {
          type: 'rect',
          text: 'Long long text',
          color: 'red'
        }
      }]
    }]
  });
};
/**
 * @param {Array<Rectangle>} rects
 * @returns {Rectangle}
 */


SpiderChart.prototype._expectSize = function (rects, r) {
  var cr = new Rectangle(0, 0, 0, 0);
  var rect;

  for (var i = 0; i < rects.length; ++i) {
    var angle = Math.PI * 2 * i / rects.length - Math.PI / 2;
    rect = rects[i];

    if (i == 0) {
      rect.x = rect.width / 2;
      rect.y = -rect.height - r;
    } else if (rects.length % 4 == 0 && i == rects.length >> 2) {
      rect.x = r;
      rect.y = rect.height / 2;
    } else if (rects.length % 4 == 0 && i == (rects.length >> 2) * 3) {
      rect.x = -r - rect.width;
      rect.y = rect.height / 2;
    } else if (rects.length % 2 == 0 && i == rects.length >> 1) {
      rect.x = rect.width / 2;
      rect.y = r;
    } else if (i < rects.length / 4) {
      rect.x = r * Math.cos(angle);
      rect.y = r * Math.sin(angle) - rect.height;
    } else if (i < rects.length / 2) {
      rect.x = r * Math.cos(angle);
      rect.y = r * Math.sin(angle);
    } else if (i < rects.length / 4 * 3) {
      rect.x = r * Math.cos(angle) - rect.width;
      rect.y = r * Math.sin(angle);
    } else {
      rect.x = r * Math.cos(angle) - rect.width;
      rect.y = r * Math.sin(angle) - rect.height;
    }

    cr = cr.merge(rect);
  }

  return cr;
};

SpiderChart.prototype.estimateSize = function () {
  var axisNameBBoxs = this.$axisNames.map(function (elt) {
    return elt.getBBox();
  });
  var rects = axisNameBBoxs.map(function (box) {
    return new Rectangle(box.x, box.y, box.width, box.height);
  });
  var titleBox = this.$title.getBBox();
  var noteGroupBox = this.$noteGroup.getBBox();
  var maxR = Math.min(this.canvasWidth, this.canvasHeight) / 2;
  var minR = 20; //

  var aWidth = this.canvasWidth - this.paddingContent * 2;
  var aHeight = this.canvasHeight - this.paddingContent * 2 - titleBox.height * 3 + noteGroupBox.height * 1.5;

  while (maxR - minR > 3) {
    var midR = (minR + maxR) / 2;

    var size = this._expectSize(rects, midR);

    if (size.width < aWidth && size.height < aHeight) {
      minR = midR;
    } else {
      maxR = midR;
    }
  }

  return {
    expectedSize: this._expectSize(rects, minR, true),
    expectedRadius: minR,
    axisLenth: minR - 30
  };
};

SpiderChart.prototype.updateCanvasSize = function () {
  var bound = this.getBoundingClientRect();
  var newHeight = this._canvasHeight;
  var newWidth = this._canvasWidth;
  if (!(newHeight > 0)) newHeight = bound.height;
  if (!(newWidth > 0)) newWidth = bound.witdh;
  if (newHeight == this._viewCanvasHeight && newWidth == this._viewCanvasWidth) return false;
  this.attr({
    width: newWidth + '',
    height: newWidth + ''
  });
  return true;
};

SpiderChart.prototype.recreate = function () {
  this._resizeCallback = [];
  this.recreateTitle();
  this.recreateAxis();
  this.recreateNotes();

  this._resizeCallback.sort(function (a, b) {
    return a.order - b.order;
  });
};

SpiderChart.prototype.recreateAxis = function () {
  var thisChart = this;
  var oyAxisElts = this.axis.oyAxises.map(function (oyAxis, i, arr) {
    var lineArrowElt = SpiderChart_('hlinearrow');

    lineArrowElt.resize(200);
    lineArrowElt.attr('transform', rotate(-90 + i * 360 / arr.length));
    lineArrowElt.addTo(thisChart.$axisCtn);
    oyAxis.lineArrowElt = lineArrowElt;
    return lineArrowElt;
  });
  this.$oyAxises = oyAxisElts;
};

SpiderChart.prototype._createLineNote = function (obj) {
  var res = SpiderChart_('g.vchart-spinder-chart-note');

  res.$line = hline(0, 9, 15, 'vc-assessment-chart-area').addStyle('stroke', obj.stroke).addTo(res);
  res.$name = helper_text(obj.name, 15 + 5, 14).addTo(res);
  return res;
};

SpiderChart.prototype._createBoxNote = function (obj) {
  var res = SpiderChart_('g.vchart-spinder-chart-note');

  res.$line = hline(0, 9, 15, 'vc-assessment-chart-area').addStyle('stroke', obj.stroke).addTo(res);
  res.$name = helper_text(obj.name, 15 + 5, 14).addTo(res);
  return res;
}; //todo more


SpiderChart.prototype.recreateNotes = function () {
  var thisChart = this;
  this.$noteCtn.clearChild();
  this.$notes = this.objects.map(function (obj) {
    var noteElt = thisChart._createLineNote(obj);

    noteElt.addTo(thisChart.$noteCtn);
  });
};

SpiderChart.prototype.recreateTitle = function () {
  this.ctitle.elt = this.$title;
  this.$title.clearChild().addChild(SpiderChart_({
    text: this.ctitle.text || ''
  }));
};

SpiderChart.prototype.updateSize = function (force) {
  if (!force && !this.updateCanvasSize()) return; // nothing change

  this.$noteGrid.updateSize();
};

SpiderChart.prototype.redraw = function () {
  this.recreate();
  this.updateSize(true);
};
/**
 * @type {SpiderChart}
 */


SpiderChart.eventHandler = {};

SpiderChart.eventHandler.attached = function () {
  if (!this._drew) {
    this._drew = true;
    this.redraw();
  } else {
    this.updateSize();
  }
};

SpiderChart.property = {};
src_VCore.install('spiderchart', SpiderChart);
/* harmony default export */ const src_SpiderChart = ((/* unused pure expression or super */ null && (SpiderChart)));
// EXTERNAL MODULE: ./src/style/funnelchart.css
var funnelchart = __webpack_require__(8901);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/AElement.js
var AElement = __webpack_require__(7951);
;// CONCATENATED MODULE: ./src/FunnelChart.js










var FunnelChart_ = src_VCore._;
var FunnelChart_$ = src_VCore.$;
/***
 * @extends AElement
 * @constructor
 */

function FunnelChart() {
  this.resizeCtrl = new ChartResizeController(this);
  this.$attachhook = FunnelChart_$('sattachhook.av-hook', this);
  this.$attachhook.on('attached', this.eventHandler.attached);
  this.$attachhook.requestUpdateSize = this.updateSize.bind(this);
  this.domSignal = new DomSignal/* default */.ZP(FunnelChart_$('sattachhook.av-signal', this)).on('_createContent', this.createContent.bind(this)).on('_alignContent', this._alignContent.bind(this)).on('_updateContent', this._updateContent.bind(this));
  this.$content = FunnelChart_$('.av-funnel-content', this);
  this.$funnelCtn = FunnelChart_$('.av-funnel-ctn', this);
  this.$noteCtn = FunnelChart_$('.av-funnel-note-ctn', this);
  this.$notes = [];
  this._contentMargin = 5;
  this._contentWidth = 0;
  this._contentHeight = 0;
  this.$title = FunnelChart_$('.vc-title', this);
  this.$blocks = [];
  this.blocks = [];
  this._cavasWidth = 0;
  this._canvasHeight = 0;
  this.domSignal.emit('_updateContent');
}

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

FunnelChart.render = function () {
  return FunnelChart_({
    tag: 'svg',
    "class": ['vc-chart', 'av-funnel-chart'],
    child: [{
      tag: 'text',
      "class": 'vc-title',
      child: {
        text: ''
      }
    }, {
      "class": 'av-funnel-content',
      child: [{
        "class": 'av-funnel-ctn',
        child: {
          "class": 'av-funnel'
        }
      }, {
        "class": 'av-funnel-note-ctn',
        child: []
      }]
    }, 'sattachhook.av-hook', 'sattachhook.av-signal']
  });
};

FunnelChart.prototype._updateCanvasSize = function () {
  var bound = this.getBoundingClientRect();
  var width = bound.width;
  var height = bound.height;
  this._canvasHeight = height;
  this._cavasWidth = width;
  this.attr('width', width + '');
  this.attr('height', height + '');
  this.attr('viewBox', [0.5, 0.5, width, height].join(' '));
};

FunnelChart.prototype.updateSize = function () {
  this._updateCanvasSize();

  this._alignContent();
};

FunnelChart.prototype.normalizeData = function () {
  var blockColor = generateBackgroundColors(this.blocks.length);
  var sum = this.blocks.reduce(function (ac, cr) {
    return ac + cr.value;
  }, 0);
  this.blocks.forEach(function (block, i) {
    block.color = block.color || blockColor[i];
    block.percent = block.value * 100 / sum;
  });
};

FunnelChart.prototype.createContent = function () {
  this.normalizeData();
  this.$title.firstChild.data = this.title + '';
  this.$funnelCtn.clearChild();

  this._createNote();

  this._createFunnel();
};

FunnelChart.prototype._createNote = function () {
  var thisC = this;
  this.$noteCtn.clearChild();
  this.$notes = this.blocks.map(function (block) {
    var noteElt = thisC._makeNote(block);

    thisC.$noteCtn.addChild(noteElt);
    return noteElt;
  });
};

FunnelChart.prototype._createFunnel = function () {
  var thisC = this;
  this.$blocks = this.blocks.map(function (block) {
    var blockElt = thisC._makeBlock(block);

    thisC.$funnelCtn.addChild(blockElt);
    return blockElt;
  });
};

FunnelChart.prototype._makeNote = function (block) {
  var $note = FunnelChart_({
    "class": 'av-funnel-note',
    child: [{
      tag: 'text',
      style: {
        fill: block.color
      },
      attr: {
        y: 30
      },
      "class": 'av-funnel-note-name',
      child: {
        text: block.name
      }
    }, {
      "class": 'av-funnel-note-desc'
    }]
  });

  $note.$name = FunnelChart_$('av-funnel-note-name', $note);
  return $note;
};

FunnelChart.prototype._makeBlock = function (block) {
  var valueColor = Color/* default.parse */.Z.parse(block.color + '').getContrastYIQ();
  var percenColor = valueColor.clone();
  percenColor.rgba[0] = (percenColor.rgba[0] + Math.sqrt(0.5)) / 2;
  percenColor.rgba[1] = (percenColor.rgba[1] + Math.sqrt(0.5)) / 2;
  percenColor.rgba[2] = (percenColor.rgba[2] + Math.sqrt(0.5)) / 2;

  var $block = FunnelChart_({
    "class": 'av-funnel-block',
    child: [{
      tag: 'shape',
      "class": 'av-funnel-block-shape',
      style: {
        fill: block.color + ''
      }
    }, {
      tag: 'text',
      "class": 'av-funnel-block-value',
      attr: {
        y: 25
      },
      style: {
        fill: valueColor + ''
      },
      child: {
        text: block.value
      }
    }, {
      tag: 'text',
      "class": 'av-funnel-block-percent',
      attr: {
        y: 55
      },
      style: {
        fill: percenColor + ''
      },
      child: {
        text: block.percent.toFixed(1) + '%'
      }
    }]
  });

  $block.$shape = FunnelChart_$('shape', $block);
  $block.$value = FunnelChart_$('.av-funnel-block-value', $block);
  return $block;
};

FunnelChart.prototype._alignNote = function () {
  var dy = this._contentHeight / this.blocks.length;
  this._stackHeight = dy;
  this.$notes.forEach(function (noteElt, i) {
    noteElt.attr({
      transform: translate(0, dy * i)
    });
  });
  var noteWidth = this.$noteCtn.getBBox().width;
  this._noteCtnX = this._contentWidth - noteWidth;
  this.$noteCtn.attr({
    transform: translate(this._noteCtnX, 0)
  });
};

FunnelChart.prototype._alignFunnel = function () {
  var thisC = this;
  this._funnelWidth = this._noteCtnX - 20;
  var maxValue = this.blocks.reduce(function (ac, block) {
    return Math.max(ac, block.value);
  }, 0);
  this.$funnelCtn.attr('transform', translate(this._funnelWidth / 2, 0));
  this.$blocks.forEach(function (blockElt, i) {
    var block = thisC.blocks[i];
    var nextBlock = thisC.blocks[i + 1] || block;
    var y = i * thisC._stackHeight;
    blockElt.$shape.begin().moveTo(-thisC._funnelWidth / 2 * block.value / maxValue, 0).lineTo(thisC._funnelWidth / 2 * block.value / maxValue, 0).lineTo(thisC._funnelWidth / 2 * nextBlock.value / maxValue, thisC._stackHeight).lineTo(-thisC._funnelWidth / 2 * nextBlock.value / maxValue, thisC._stackHeight).closePath().end();
    blockElt.attr('transform', translate(0, y));
  });
};

FunnelChart.prototype._alignContent = function () {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('_alignContent');
    return;
  }

  this.$title.attr({
    x: this._cavasWidth / 2,
    y: 14 + this._contentMargin
  });
  this.$content.attr('transform', translate(this._contentMargin, this._contentMargin + 50));
  this._contentWidth = this._cavasWidth - this._contentMargin * 2;
  this._contentHeight = this._canvasHeight - this._contentMargin * 2 - 50;

  this._alignNote();

  this._alignFunnel();
};

FunnelChart.prototype._updateContent = function () {
  this.createContent();

  this._alignContent();
};
/***
 *
 * @type {FunnelChart}
 */


FunnelChart.eventHandler = {};

FunnelChart.eventHandler.attached = function () {
  ResizeSystem/* default.add */.Z.add(this.$attachhook);
  this.updateSize();
};

src_VCore.install(FunnelChart);
/* harmony default export */ const src_FunnelChart = ((/* unused pure expression or super */ null && (FunnelChart)));
// EXTERNAL MODULE: ./src/style/barstackchart.css
var barstackchart = __webpack_require__(5768);
;// CONCATENATED MODULE: ./src/BarStackChart.js











var BarStackChart_ = src_VCore._;
var BarStackChart_$ = src_VCore.$;
/***
 * @extends SvgCanvas
 * @constructor
 */

function BarStackChart() {
  var _this = this;

  this._contentMargin = 5;
  /***
   *
   * @type {GContainer}
   */

  this.$content = BarStackChart_$('.vc-bar-stack-content', this);
  this.$content.box.setPosition(40, 5);
  /***
   *
   * @type {GContainer}
   */

  this.$noteCtn = BarStackChart_$('.vc-bar-stack-note-ctn', this);
  /***
   *
   * @type {GContainer}
   */

  this.$stack = BarStackChart_$('.vc-bar-stack', this);
  this.domSignal = new DomSignal/* default */.ZP(BarStackChart_$('sattachhook.vc-dom-signal', this));
  this.domSignal.on('_updateContentPosition', this.updateContentPosition.bind(this)).on('updateContent', this.updateContent.bind(this));
  this.blocks = [];
  this.$blocks = [];
  this.$notes = [];
  this.domSignal.emit('updateContent');
  this.resizeCtrl = new ChartResizeController(this);
  (0,DataStructure_Object/* observePropertyChanges */.U)(this, ['blocks'], function () {
    _this.domSignal.emit('updateContent');
  });
}

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

BarStackChart.render = function () {
  return BarStackChart_({
    tag: 'svgcanvas',
    "class": ['vc-bar-stack-chart', 'base-chart'],
    child: [{
      tag: 'gcontainer',
      "class": 'vc-bar-stack-content',
      child: [{
        tag: 'gcontainer',
        "class": 'vc-bar-stack-note-ctn'
      }, {
        tag: 'gcontainer',
        "class": 'vc-bar-stack'
      }]
    }, 'sattachhook.vc-dom-signal']
  });
};

BarStackChart.prototype.revokeResource = function () {
  (0,DataStructure_Object/* unobservePropertyChanges */.i3)(this, ['blocks']);
  (0,utils.revokeResource)(this.resizeCtrl);
  this.revokeResource = noop/* default */.Z;

  while (this.lastChild) {
    (0,utils.revokeResource)(this.lastChild);
    this.lastChild.remove();
  }
};

BarStackChart.prototype.normalizeData = function () {
  var blockColor = generateBackgroundColors(this.blocks.length);
  var sum = this.blocks.reduce(function (ac, cr) {
    return ac + cr.value;
  }, 0);
  this.blocks.forEach(function (block, i) {
    block.color = block.color || blockColor[i];
    block.percent = block.percent || block.value * 100 / sum;
  });
};

BarStackChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  this.updateContentPosition();
};
/***
 *
 * @param block
 * @returns {GContainer}
 * @private
 */


BarStackChart.prototype._makeNote = function (block) {
  var noteElt = BarStackChart_({
    tag: 'gcontainer',
    "class": 'vc-bar-stack-note',
    child: [{
      tag: 'text',
      "class": 'vc-bar-stack-note-name',
      style: {
        fill: block.color + ''
      },
      attr: {
        y: 15,
        x: 0
      },
      child: {
        text: block.name
      }
    }, {
      tag: 'text',
      "class": 'vc-bar-stack-note-desc'
    }]
  });

  noteElt.$name = BarStackChart_$('.vc-bar-stack-note-name', this);
  noteElt.$desc = BarStackChart_$('.vc-bar-stack-note-desc', this);
  return noteElt;
};
/***
 *
 * @param block
 * @returns {GContainer}
 * @private
 */


BarStackChart.prototype._makeBlock = function (block) {
  var valueColor = Color/* default.parse */.Z.parse(block.color + '').getContrastYIQ();
  var percenColor = valueColor.clone();
  percenColor.rgba[0] = (percenColor.rgba[0] + Math.sqrt(0.5)) / 2;
  percenColor.rgba[1] = (percenColor.rgba[1] + Math.sqrt(0.5)) / 2;
  percenColor.rgba[2] = (percenColor.rgba[2] + Math.sqrt(0.5)) / 2;

  var blockElt = BarStackChart_({
    tag: 'gcontainer',
    "class": 'vc-bar-stack-block',
    child: [{
      tag: 'rect',
      "class": 'vc-bar-stack-block-rect',
      style: {
        fill: block.color
      },
      attr: {
        x: -250,
        y: 0,
        width: 500,
        height: 10
      }
    }, {
      tag: 'text',
      "class": 'vc-bar-stack-block-value',
      attr: {
        y: 25
      },
      style: {
        fill: valueColor + ''
      },
      child: {
        text: block.value
      }
    }, {
      tag: 'text',
      "class": 'vc-bar-stack-block-percent',
      attr: {
        y: 55
      },
      style: {
        fill: percenColor + ''
      },
      child: {
        text: block.percent.toFixed(1) + '%'
      }
    }]
  });

  blockElt.$rect = BarStackChart_$('.vc-bar-stack-block-rect', blockElt);
  return blockElt;
};

BarStackChart.prototype._createNote = function () {
  var thisC = this;
  this.$noteCtn.clearChild();
  this.$notes = this.blocks.map(function (block) {
    var noteElt = thisC._makeNote(block);

    thisC.$noteCtn.addChild(noteElt);
    return noteElt;
  });
};

BarStackChart.prototype._createStack = function () {
  var thisC = this;
  this.$stack.clearChild();
  this.$blocks = this.blocks.map(function (block) {
    var blockElt = thisC._makeBlock(block);

    thisC.$stack.addChild(blockElt);
    return blockElt;
  });
};

BarStackChart.prototype.createContent = function () {
  this.normalizeData();

  this._createNote();

  this._createStack();
};

BarStackChart.prototype.updateContentPosition = function () {
  if (!this.isDescendantOf(document.body)) {
    this.emit('_updateContentPosition');
    return;
  }

  this.$content.box.setPosition(this._contentMargin, 40);
  this.$content.box.setSize(this.box.width - 2 * this._contentMargin, this.box.height - this._contentMargin - 40);

  this._updateNotePosition();

  this._updateStackPosition();
};

BarStackChart.prototype._updateNotePosition = function () {
  var thisC = this;
  var noteCtnBox = this.$noteCtn.getBBox();
  this.$noteCtn.box.setSize(noteCtnBox.width, this.$content.box.height);
  this.$noteCtn.box.setPosition(this.$content.box.width - noteCtnBox.width, 0);
  var dy = this.$noteCtn.box.height / this.blocks.length;
  this.$notes.forEach(function (noteElt, i) {
    noteElt.box.y = dy * i + dy / 2 - 7;
  });
};

BarStackChart.prototype._updateStackPosition = function () {
  var thisC = this;
  this.$stack.box.setSize(this.$content.box.width - this.$noteCtn.box.width - 20, this.$content.box.height);
  this.$stack.box.x = this.$stack.box.width / 2; //to center

  var dy = this.$noteCtn.box.height / this.blocks.length;
  var width = this.$stack.box.width;
  var maxValue = this.blocks.reduce(function (ac, cr) {
    return Math.max(ac, cr.value);
  }, 0);
  this.$blocks.forEach(function (blockElt, i) {
    var block = thisC.blocks[i];
    blockElt.box.y = dy * i;
    blockElt.$rect.attr({
      height: dy,
      width: block.value / maxValue * width,
      x: -block.value / maxValue * width / 2
    });
  });
};

BarStackChart.prototype.updateContent = function () {
  this.createContent();
  this.updateContentPosition();
};

src_VCore.install(BarStackChart);
/* harmony default export */ const src_BarStackChart = ((/* unused pure expression or super */ null && (BarStackChart)));
// EXTERNAL MODULE: ./src/style/piechart.css
var piechart = __webpack_require__(3468);
// EXTERNAL MODULE: ./node_modules/absol/src/Math/Polygon.js
var Polygon = __webpack_require__(9894);
;// CONCATENATED MODULE: ./src/PieChart.js












var PieChart_ = src_VCore._;
var PieChart_$ = src_VCore.$;
/***
 * @typedef VCPiece
 * @property {string} name
 * @property {number} value
 * @property {string} valueText
 * @property {string} fillColor
 * @property {boolean} separated
 */

/***
 * @extends BChart
 * @constructor
 */

function PieChart() {
  src_BChart.call(this);
  this.titleCtrl.revokeResource();
  delete this.titleCtrl;
  this.$pieCtn = this.$body;
  this.$pie = PieChart_('gcontainer');
  this.$pieCtn.addChild(this.$pie);
  /***
   *
   * @type {VCPiece[]}
   */

  this.pieces = [];
}

OOP/* default.mixClass */.ZP.mixClass(PieChart, src_BChart);
PieChart.property = Object.assign({}, src_BChart.property);
PieChart.eventHandler = Object.assign({}, src_BChart.eventHandler);
PieChart.tag = 'PieChart'.toLowerCase();

PieChart.render = function (data, o, dom) {
  return src_BChart.render(data, o, dom).addClass('vc-piece-chart');
};

PieChart.eventHandler.mouseEnterNote = function (idx, event) {
  var pieceElt = this.$pieces[idx];
  var textValueElt = this.$pieceValues[idx];
  var title = pieceElt.attr('title');

  if (!title) {
    if (this.tooltipToken) closeTooltip(this.tooltipToken);
    return;
  }

  var bound = textValueElt.getBoundingClientRect();
  this.tooltipToken = showTooltip(title, bound.left - 3, bound.top + bound.height + 3);
};

PieChart.eventHandler.mouseLeaveNote = function (idx) {
  var token = this.tooltipToken;
  if (!token) return;
  setTimeout(function () {
    closeTooltip(token);
  }, 1000);
};

PieChart.prototype._createPie = function () {
  var _this = this;

  this.$pie.clearChild();
  var thisC = this;
  this.$pieces = this.pieces.map(function (piece, idx) {
    var pieceElt = PieChart_({
      tag: 'shape',
      "class": 'vc-piece',
      style: {
        fill: piece.fillColor + ''
      },
      attr: {
        title: piece.name + ': ' + (piece.valueText || piece.value)
      },
      on: {
        mouseenter: function mouseenter(event) {
          _this.eventHandler.mouseEnterNote(idx, event);
        },
        mouseleave: function mouseleave(event) {
          _this.eventHandler.mouseLeaveNote(idx, event);
        }
      }
    });

    thisC.$pie.addChild(pieceElt);
    return pieceElt;
  });
  this.$pieceValues = this.pieces.map(function (piece) {
    var valueElt = PieChart_({
      tag: 'text',
      "class": 'vc-piece-value',
      style: {
        fill: Color/* default.parse */.Z.parse(piece.fillColor + '').getContrastYIQ()
      },
      child: {
        text: piece.valueText || piece.value || ''
      }
    });

    thisC.$pie.addChild(valueElt);
    return valueElt;
  });
};

PieChart.prototype.computeNotes = function () {
  return this.pieces.map(function (piece, i) {
    return {
      color: piece.fillColor,
      text: piece.name,
      type: 'rect',
      idx: i
    };
  });
};

PieChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createPie();
};

PieChart.prototype._updatePiePosition = function () {
  var piece, pieceElt;
  var sum = this.pieces.reduce(function (ac, cr) {
    return ac + cr.value;
  }, 0);
  this.$pieCenter = PieChart_({
    tag: 'circle',
    attr: {
      cx: 0,
      cy: 0,
      r: 1
    },
    style: {
      fill: 'transparent'
    }
  });
  this.$pie.addChild(this.$pieCenter);
  var pieCenterBound = this.$pieCenter.getBBox();
  var piePoly, jj, textRect, canContain;

  for (var k = 0; k < 50; ++k) {
    var startAngle = -Math.PI / 2;
    var endAngle = 0;
    var valueElt;
    var valueBound, pieceBound;
    var x0, y0;
    var r = Math.min(this.$pieCtn.box.width - 5, this.$pieCtn.box.height - 5) / 2 * (1 - k / 150);
    var sr = Math.max(3, r / 15);

    for (var i = 0; i < this.pieces.length; ++i) {
      piece = this.pieces[i];
      pieceElt = this.$pieces[i];
      valueElt = this.$pieceValues[i];

      if (piece.value === 0) {
        pieceElt.addStyle('display', 'none');
        valueElt.addStyle('display', 'none');
      } else {
        pieceElt.removeStyle('display');
        valueElt.removeStyle('display');
      }

      endAngle = startAngle + Math.PI * 2 * piece.value / sum;
      x0 = 0;
      y0 = 0;

      if (piece.separated) {
        x0 += sr * Math.cos((startAngle + endAngle) / 2);
        y0 += sr * Math.sin((startAngle + endAngle) / 2);
      }

      pieceElt.begin();
      piePoly = [];

      if (piece.value < sum) {
        pieceElt.moveTo(x0, y0);
        pieceElt.lineTo(x0 + r * Math.cos(startAngle), y0 + r * Math.sin(startAngle));
        piePoly.push(new Vec2/* default */.Z(x0, y0));
        piePoly.push(new Vec2/* default */.Z(x0 + r * Math.cos(startAngle), y0 + r * Math.sin(startAngle)));
      } else {
        pieceElt.moveTo(x0 + r * Math.cos(startAngle), y0 + r * Math.sin(startAngle));
        piePoly.push(new Vec2/* default */.Z(x0 + r * Math.cos(startAngle), y0 + r * Math.sin(startAngle)));
      }

      pieceElt.arcTo(x0 + r * Math.cos((startAngle + endAngle) / 2), y0 + r * Math.sin((startAngle + endAngle) / 2), r, r, 0, 1, 0).arcTo(x0 + r * Math.cos(endAngle), y0 + r * Math.sin(endAngle), r, r, 0, 1, 0).closePath().end();

      for (jj = 8; jj >= 0; --jj) {
        piePoly.push(new Vec2/* default */.Z(x0 + r * Math.cos(startAngle * jj / 8 + endAngle * (8 - jj) / 8), y0 + r * Math.sin(startAngle * jj / 8 + endAngle * (8 - jj) / 8)));
      }

      valueBound = valueElt.getBBox();
      pieceBound = pieceElt.getBBox();

      if (piece.value === sum) {
        valueElt.attr({
          x: 0,
          y: 7
        });
        valueElt.removeStyle('visibility');
      } else {
        valueElt.attr({
          x: x0 + (r - 20 - valueBound.width / 2) * Math.cos((startAngle + endAngle) / 2),
          y: y0 + (r - 20 - valueBound.height / 2) * Math.sin((startAngle + endAngle) / 2) + 7
        });
        textRect = new Math_Rectangle/* default */.Z(x0 + (r - 20 - valueBound.width / 2) * Math.cos((startAngle + endAngle) / 2) - valueBound.width / 2, y0 + (r - 20 - valueBound.height / 2) * Math.sin((startAngle + endAngle) / 2) + 7 - valueBound.height, valueBound.width, valueBound.height);
        piePoly = new Polygon/* default */.Z(piePoly);
        canContain = [textRect.A(), textRect.B(), textRect.C(), textRect.D()].every(function (v) {
          return piePoly.pointLocalIn(v) > 0;
        });

        if (canContain) {
          valueElt.removeStyle('visibility');
        } else {
          valueElt.addStyle('visibility', 'hidden');
        }
      }

      startAngle = endAngle;
    }

    var piePound = this.$pie.getBBox();

    if (piePound.width < this.$pieCtn.box.width && piePound.height < this.$pieCtn.box.height) {
      this.$pie.box.setPosition(this.$pieCtn.box.width / 2 - (piePound.width / 2 - (pieCenterBound.x + 1 - piePound.x)), this.$pieCtn.box.height / 2 - (piePound.height / 2 - (pieCenterBound.y + 1 - piePound.y)));
      break;
    }
  }
};

PieChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._updatePiePosition();
};

PieChart.prototype.normalizeData = function () {
  var colorScheme = this.colorScheme;
  var blockColors = (0,utils.isNaturalNumber)(colorScheme) ? (0,SelectColorSchemeMenu/* generatorColorScheme */.TD)(colorScheme, this.pieces.length) : generateBackgroundColors(this.pieces.length);
  this.pieces.forEach(function (piece, i) {
    piece.fillColor = piece.fillColor || blockColors[i];
  });
};

src_VCore.install(PieChart);
/* harmony default export */ const src_PieChart = (PieChart);
;// CONCATENATED MODULE: ./src/HCollumnChart.js



var HCollumnChart_ = src_VCore._;
var HCollumnChart_$ = src_VCore.$;
/***
 * @extends SvgCanvas
 * @constructor
 */

function HColumnChart() {
  this.$title = HCollumnChart_$('.vc-title', this);
  console.log(HCollumnChart_$('sattachhook.vc-dom-signal', this));
  this.domSignal = new DomSignal/* default */.ZP(HCollumnChart_$('sattachhook.vc-dom-signal', this)); // this.domSignal.on({
  //     updateContent: this.updateContent.bind(this)
  // });
  // this.emit('updateContent');
}

HColumnChart.tag = "HColumnChart".toLowerCase();

HColumnChart.render = function () {
  return HCollumnChart_({
    tag: svg_SvgCanvas.tag,
    "class": 'vc-h-column-chart',
    child: [{
      tag: 'text',
      "class": 'vc-title',
      child: {
        text: ''
      },
      attr: {
        y: 20
      }
    }, {
      "class": 'vc-h-column-root',
      child: [{
        "class": 'vc-h-column-ox-key-ctn'
      }, {
        "class": 'vc-h-column-oy-key-ctn'
      }, {
        tag: 'hlinearrow'
      }]
    }, 'sattachhook.vc-dom-signal']
  });
};

HColumnChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  this.updateContentPosition();
};

HColumnChart.prototype.updateContent = function () {
  if (!this.isDescendantOf(document.body)) {
    this.domSignal.emit('updateContent');
    return;
  }

  this.normalizeData();
  this.createContent();
  this.updateContentPosition();
};

HColumnChart.prototype.normalizeData = function () {};

HColumnChart.prototype._createTitle = function () {
  this.$title.firstChild.data = this.title;
};

HColumnChart.prototype.createContent = function () {
  this._createTitle();
};

HColumnChart.prototype._alignTitle = function () {
  this.$title.attr('x', this.box.width / 2);
};

HColumnChart.prototype.updateContentPosition = function () {
  this._alignTitle();
};

src_VCore.install(HColumnChart);
/* harmony default export */ const HCollumnChart = ((/* unused pure expression or super */ null && (HColumnChart)));
// EXTERNAL MODULE: ./src/style/tinycirclechart.css
var tinycirclechart = __webpack_require__(7381);
;// CONCATENATED MODULE: ./src/TinyCircleChart.js








/***
 * @extends SvgCanvas
 * @constructor
 */

function TinyCircleChart() {
  this.resizeCtrl = new ChartResizeController(this);
  this.contentPadding = 5;
  this._arcs = [];
  this.computedData = {
    notes: []
  };
  this.total = NaN;
  this.$notes = [];
  this.$noteCtn = VCore_$('.vc-note-ctn', this);
  this.$arcs = [];
  this.$content = VCore_$('.vc-content', this);
  this.$circleBlank = VCore_$('.vc-tiny-circle-blank', this);
  this.$title = VCore_$('.vc-title', this);
}

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

TinyCircleChart.render = function () {
  return VCore_({
    tag: svg_SvgCanvas.tag,
    "class": ['vc-chart', 'vc-tiny-circle-chart'],
    child: [{
      tag: 'gcontainer',
      "class": 'vc-content',
      child: [{
        tag: 'path',
        "class": 'vc-tiny-circle-blank'
      }, {
        tag: 'text',
        "class": 'vc-title',
        attr: {
          y: '7'
        },
        child: {
          text: ''
        }
      }]
    }, {
      tag: 'gcontainer',
      "class": 'vc-note-ctn'
    }]
  });
};

TinyCircleChart.prototype._computeNote = function () {
  this.computedData.notes = (this._arcs || []).map(function (arc, i, array) {
    var note = {};
    note.color = arc.color || Color/* default.fromHSL */.Z.fromHSL(1 / array.length * i, 0.5, 0.5);
    note.text = arc.name.replace(/[^\s]+/g, function (all) {
      if (all === '$value') {
        return arc.value + '';
      }

      return all;
    });
    note.type = 'rect';
    return note;
  });
  this.computedData.estimateNoteWidth = this.computedData.notes.reduce(function (ac, node) {
    return Math.max((0,utils.measureText)(node.text, '14px arial').width, ac);
  }, 0) + 28;
  this.computedData.estimateNoteHeight = this.computedData.notes.length * 20;
  var screenSize = (0,Dom/* getScreenSize */.tE)();
  var fontSize = VCore_$(document.body).getFontSize();
  this.computedData.estimateWidth = Math.max(this.computedData.estimateNoteWidth + this.computedData.estimateNoteHeight, 250);

  if (this.computedData.estimateWidth * fontSize / 14 > screenSize.width - 20) {
    this.computedData.estimateWidth = this.computedData.estimateNoteWidth;
    this.computedData.estimateHeight = Math.max(this.computedData.estimateNoteHeight + this.computedData.estimateNoteWidth, 100);
  } else {
    this.computedData.estimateHeight = Math.max(this.computedData.estimateNoteHeight + 10, 100);
  }

  this.addStyle({
    'min-width': this.computedData.estimateWidth / 14 + 'rem',
    'min-height': this.computedData.estimateHeight / 14 + 'rem'
  });
};

TinyCircleChart.prototype._createNote = src_BChart.prototype._createNote;

TinyCircleChart.prototype._updateNotesPosition = function () {
  var t = VCore_$(document.body).getFontSize();
  this.$notes.forEach(function (noteElt, i) {
    noteElt.box.y = Math.ceil(t * 1.428) * i;
  });
};

TinyCircleChart.prototype._createArcs = function () {
  this.$arcs.forEach(function (arc) {
    arc.remove();
  });
  this.$arcs = (this._arcs || []).map(function (arc, i, array) {
    var arcElt = VCore_('path.vc-arc');

    arcElt.addStyle('fill', this.computedData.notes[i].color);
    this.$content.addChild(arcElt);
    return arcElt;
  }.bind(this));
};

TinyCircleChart.prototype._updateArcsPosition = function () {
  var noteBBox = this.$noteCtn.getBBox();
  var R = 0;

  if (this.box.width - noteBBox.width >= this.box.height - noteBBox.height) {
    R = Math.min(this.box.width - noteBBox.width - 2 * this.contentPadding - 10, this.box.height - this.contentPadding) / 2;
    this.$noteCtn.box.position = {
      x: 2 * R + 10 + this.contentPadding,
      y: this.box.height / 2 - noteBBox.height / 2
    };
    this.$content.box.position = {
      x: R + this.contentPadding,
      y: this.box.height / 2
    };
  } else {
    R = Math.min(this.box.height - noteBBox.height - 2 * this.contentPadding - 10, this.box.width - this.contentPadding) / 2;
    this.$noteCtn.box.position = {
      y: 2 * R + 10 + this.contentPadding,
      x: this.box.width / 2 - noteBBox.width / 2
    };
    this.$content.box.position = {
      y: R + this.contentPadding,
      x: this.box.width / 2
    };
  }

  var r = Math.min(R - 12, R - R / 10);
  this.$circleBlank.attr('d', new controller_Turtle().moveTo(0, -R).arcBy(R, R, 0, 0, 1, R, R).arcBy(R, R, 0, 0, 1, -R, R).arcBy(R, R, 0, 0, 1, -R, -R).arcBy(R, R, 0, 0, 1, R, -R).moveTo(0, -r).arcBy(r, r, 0, 0, 1, r, r).arcBy(r, r, 0, 0, 1, -r, r).arcBy(r, r, 0, 0, 1, -r, -r).arcBy(r, r, 0, 0, 1, r, -r).closePath().getPath());
  var total = this.total;

  if (!(total > 0 && total < Infinity && typeof total === "number")) {
    total = (this._arcs || []).reduce(function (ac, cr) {
      return ac + cr.value;
    }, 0);
  }

  var angle0,
      angle1 = -Math.PI / 2;
  var total2 = Math.max(total, 1);
  var angleCenter;

  for (var i = 0; i < this.$arcs.length; ++i) {
    angle0 = angle1;
    angle1 = angle1 + Math.PI * 2 * this._arcs[i].value / total2;
    angleCenter = (angle0 + angle1) / 2;
    this.$arcs[i].attr('d', new controller_Turtle().moveTo(R * Math.cos(angle0), R * Math.sin(angle0)).arcTo(R, R, 0, this._arcs[i].value > total2 ? 1 : 0, 1, R * Math.cos(angleCenter), R * Math.sin(angleCenter)).arcTo(R, R, 0, this._arcs[i].value > total2 ? 1 : 0, 1, R * Math.cos(angle1), R * Math.sin(angle1)).lineTo(r * Math.cos(angle1), r * Math.sin(angle1)).arcTo(r, r, 0, this._arcs[i].value > total2 ? 1 : 0, 0, r * Math.cos(angleCenter), r * Math.sin(angleCenter)).arcTo(r, r, 0, this._arcs[i].value > total2 ? 1 : 0, 0, r * Math.cos(angle0), r * Math.sin(angle0)).closePath().getPath());
  }

  this.$title.firstChild.data = total + '';
};

TinyCircleChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);

  this._updateArcsPosition();
};

TinyCircleChart.property = {};
TinyCircleChart.property.arcs = {
  set: function set(value) {
    this._arcs = value;

    this._computeNote();

    this._createNote();

    this._updateNotesPosition();

    this._createArcs();
  },
  get: function get() {
    return this._arcs;
  }
};
src_VCore.install(TinyCircleChart);
/* harmony default export */ const src_TinyCircleChart = (TinyCircleChart);
;// CONCATENATED MODULE: ./src/DoughnutChart.js












var DoughnutChart_ = src_VCore._;
var DoughnutChart_$ = src_VCore.$;
/***
 * @typedef VCPiece
 * @property {string} name
 * @property {number} value
 * @property {string} valueText
 * @property {string} fillColor
 * @property {boolean} separated
 */

/***
 * @extends BChart
 * @constructor
 */

function DoughnutChart() {
  src_BChart.call(this);
  this.titleCtrl.revokeResource();
  delete this.titleCtrl;
  this.$pieCtn = this.$body;
  this.$pie = DoughnutChart_('gcontainer');
  this.$pieCtn.addChild(this.$pie);
  /***
   *
   * @type {VCPiece[]}
   */

  this.pieces = [];
}

OOP/* default.mixClass */.ZP.mixClass(DoughnutChart, src_BChart);
DoughnutChart.property = Object.assign({}, src_BChart.property);
DoughnutChart.eventHandler = Object.assign({}, src_BChart.eventHandler);
DoughnutChart.prototype.dataKeys = src_BChart.prototype.dataKeys.concat(['pieces']);
DoughnutChart.tag = 'DoughnutChart'.toLowerCase();

DoughnutChart.render = function (data, o, dom) {
  return src_BChart.render(data, o, dom).addClass('vc-piece-chart');
};

DoughnutChart.eventHandler.mouseEnterNote = function (idx, event) {
  var pieceElt = this.$pieces[idx];
  var textValueElt = this.$pieceValues[idx];
  var title = pieceElt.attr('title');

  if (!title) {
    if (this.tooltipToken) closeTooltip(this.tooltipToken);
    return;
  }

  var bound = textValueElt.getBoundingClientRect();
  this.tooltipToken = showTooltip(title, bound.left - 3, bound.top + bound.height + 3);
};

DoughnutChart.eventHandler.mouseLeaveNote = function (idx) {
  var token = this.tooltipToken;
  if (!token) return;
  setTimeout(function () {
    if (token) closeTooltip(token);
  }, 1000);
};

DoughnutChart.prototype._createPie = function () {
  var _this = this;

  this.$pie.clearChild();
  var thisC = this;
  this.$pieces = this.pieces.map(function (piece, idx) {
    var pieceElt = DoughnutChart_({
      tag: 'shape',
      "class": 'vc-piece',
      style: {
        fill: (piece.fillColor || _this.blockColors[idx]) + ''
      },
      attr: {
        title: piece.name + ': ' + (piece.valueText || piece.value)
      },
      on: {
        mouseenter: function mouseenter(event) {
          _this.eventHandler.mouseEnterNote(idx, event);
        },
        mouseleave: function mouseleave(event) {
          _this.eventHandler.mouseLeaveNote(idx, event);
        }
      }
    });

    thisC.$pie.addChild(pieceElt);
    return pieceElt;
  });
  this.$pieceValues = this.pieces.map(function (piece, idx) {
    var valueElt = DoughnutChart_({
      tag: 'text',
      "class": 'vc-piece-value',
      style: {
        fill: Color/* default.parse */.Z.parse((piece.fillColor || _this.blockColors[idx]) + '').getContrastYIQ()
      },
      child: {
        text: piece.valueText || piece.value || ''
      }
    });

    thisC.$pie.addChild(valueElt);
    return valueElt;
  });
};

DoughnutChart.prototype.computeNotes = function () {
  var _this2 = this;

  return this.pieces.map(function (piece, i) {
    return {
      color: piece.fillColor || _this2.blockColors[i],
      text: piece.name,
      type: 'rect',
      idx: i
    };
  });
};

DoughnutChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createPie();
};

DoughnutChart.prototype._updatePiePosition = function () {
  var piece, pieceElt;
  var sum = this.pieces.reduce(function (ac, cr) {
    return ac + cr.value;
  }, 0);
  this.$pieCenter = DoughnutChart_({
    tag: 'circle',
    attr: {
      cx: 0,
      cy: 0,
      r: 1
    },
    style: {
      fill: 'transparent'
    }
  });
  this.$pie.addChild(this.$pieCenter);
  var pieCenterBound = this.$pieCenter.getBBox();
  var piePoly, jj, textRect, canContain;

  for (var k = 0; k < 50; ++k) {
    var startAngle = -Math.PI / 2;
    var endAngle = 0;
    var valueElt;
    var valueBound, pieceBound;
    var x0, y0;
    var cp, p0;
    var r = Math.min(this.$pieCtn.box.width - 5, this.$pieCtn.box.height - 5) / 2 * (1 - k / 150);
    var ri = r * 4 / 9;
    var sr = Math.max(3, r / 15);

    var makeVec = function makeVec(r, angle) {
      return new Vec2/* default */.Z(r * Math.cos(angle), r * Math.sin(angle));
    };

    for (var i = 0; i < this.pieces.length; ++i) {
      piece = this.pieces[i];
      pieceElt = this.$pieces[i];
      valueElt = this.$pieceValues[i];

      if (piece.value === 0) {
        pieceElt.addStyle('display', 'none');
        valueElt.addStyle('display', 'none');
      } else {
        pieceElt.removeStyle('display');
        valueElt.removeStyle('display');
      }

      endAngle = startAngle + Math.PI * 2 * piece.value / sum;
      x0 = 0;
      y0 = 0;
      p0 = new Vec2/* default */.Z(x0, y0);

      if (piece.separated) {
        p0 = p0.add(makeVec(sr, (startAngle + endAngle) / 2));
        x0 = p0.x;
        y0 = p0.y;
      }

      pieceElt.begin();
      piePoly = [];
      cp = p0.add(makeVec(r, startAngle));
      pieceElt.moveTo(cp.x, cp.y);
      piePoly.push(cp);
      cp = p0.add(makeVec(r, (startAngle + endAngle) / 2));
      pieceElt.arcTo(cp.x, cp.y, r, r, 0, 1, 0);
      cp = p0.add(makeVec(r, endAngle));
      pieceElt.arcTo(cp.x, cp.y, r, r, 0, 1, 0);

      for (jj = 8; jj >= 0; --jj) {
        piePoly.push(p0.add(makeVec(r, startAngle * jj / 8 + endAngle * (8 - jj) / 8)));
      }

      cp = p0.add(makeVec(ri, endAngle));

      if (piece.value < sum) {
        pieceElt.lineTo(cp.x, cp.y);
      } else {
        pieceElt.closePath();
        pieceElt.moveTo(cp.x, cp.y);
      }

      cp = p0.add(makeVec(ri, (startAngle + endAngle) / 2));
      pieceElt.arcTo(cp.x, cp.y, ri, ri, 0, 0, 1);
      cp = p0.add(makeVec(ri, startAngle));
      pieceElt.arcTo(cp.x, cp.y, ri, ri, 0, 0, 1);

      for (jj = 0; jj <= 8; ++jj) {
        piePoly.push(p0.add(makeVec(ri, startAngle * jj / 8 + endAngle * (8 - jj) / 8)));
      }

      pieceElt.closePath().end();
      valueBound = valueElt.getBBox();
      pieceBound = pieceElt.getBBox();

      if (piece.value === sum) {
        valueElt.attr({
          x: x0 + (r - 20 - valueBound.width / 2) * Math.cos(-Math.PI / 2),
          y: y0 + (r - 20 - valueBound.height / 2) * Math.sin(-Math.PI / 2) + 7
        });
        valueElt.removeStyle('visibility');
      } else {
        valueElt.attr({
          x: x0 + (r - 20 - valueBound.width / 2) * Math.cos((startAngle + endAngle) / 2),
          y: y0 + (r - 20 - valueBound.height / 2) * Math.sin((startAngle + endAngle) / 2) + 7
        });
        textRect = new Math_Rectangle/* default */.Z(x0 + (r - 20 - valueBound.width / 2) * Math.cos((startAngle + endAngle) / 2) - valueBound.width / 2, y0 + (r - 20 - valueBound.height / 2) * Math.sin((startAngle + endAngle) / 2) + 7 - valueBound.height, valueBound.width, valueBound.height);
        piePoly = new Polygon/* default */.Z(piePoly);
        canContain = [textRect.A(), textRect.B(), textRect.C(), textRect.D()].every(function (v) {
          return piePoly.pointLocalIn(v) > 0;
        });

        if (canContain) {
          valueElt.removeStyle('visibility');
        } else {
          valueElt.addStyle('visibility', 'hidden');
        }
      }

      startAngle = endAngle;
    }

    var piePound = this.$pie.getBBox();

    if (piePound.width < this.$pieCtn.box.width && piePound.height < this.$pieCtn.box.height) {
      this.$pie.box.setPosition(this.$pieCtn.box.width / 2 - (piePound.width / 2 - (pieCenterBound.x + 1 - piePound.x)), this.$pieCtn.box.height / 2 - (piePound.height / 2 - (pieCenterBound.y + 1 - piePound.y)));
      break;
    }
  }
};

DoughnutChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._updatePiePosition();
};

DoughnutChart.prototype.normalizeData = function () {
  var colorScheme = this.colorScheme;
  this.blockColors = (0,utils.isNaturalNumber)(colorScheme) ? (0,SelectColorSchemeMenu/* generatorColorScheme */.TD)(colorScheme, this.pieces.length) : generateBackgroundColors(this.pieces.length);
};

src_VCore.install(DoughnutChart);
/* harmony default export */ const src_DoughnutChart = (DoughnutChart);
;// CONCATENATED MODULE: ./src/SimpleColumnChart.js
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }

function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }








/**
 * @extends BChart
 * @constructor
 */

function SimpleColumnChart() {
  src_BChart.apply(this, arguments);
  this.keys = [];
  this.values = [];
  this.texts = [];
  this.fillColors = [];
  this.$columns = [];
  this.$texts = [];
}

OOP/* default.mixClass */.ZP.mixClass(SimpleColumnChart, src_BChart);
SimpleColumnChart.tag = 'SimpleColumnChart'.toLowerCase();

SimpleColumnChart.render = function () {
  return src_BChart.render.apply(this, arguments).addClass('vc-simple-column-chart');
};

SimpleColumnChart.prototype.computeNotes = function () {
  var _this = this;

  return this.keys.map(function (key, i) {
    return {
      color: _this.fillColors[i],
      text: key,
      type: 'rect',
      idx: i
    };
  });
};

SimpleColumnChart.prototype.normalizeData = function () {
  var colorScheme = this.colorScheme;
  var blockColors = (0,utils.isNaturalNumber)(colorScheme) ? (0,SelectColorSchemeMenu/* generatorColorScheme */.TD)(colorScheme, this.values.length) : generateBackgroundColors(this.values.length);
  this.fillColors = this.fillColors || [];

  while (this.fillColors.length < this.values.length) {
    this.fillColors.push(blockColors[this.fillColors.length]);
  }

  this._maxValue = Math.max.apply(Math, _toConsumableArray(this.values));

  if (!this.texts || this.values.length !== this.texts.length) {// this.texts = this.values.map(value=> this.nu);
  }
};

SimpleColumnChart.prototype._createColumns = function () {
  var _this2 = this;

  this.$columns.forEach(function (e) {
    return e.remove();
  });
  this.$texts.forEach(function (e) {
    return e.remove();
  });
  this.$columns = this.values.map(function (value, i) {
    return VCore_({
      tag: 'rect',
      attr: {
        x: 0,
        y: 0
      },
      style: {
        fill: _this2.fillColors[i]
      }
    });
  });
  this.$body.addChild(this.$columns);
  this.$texts = this.texts.map(function (key, i) {
    var color = _this2.fillColors[i];
    color = typeof color === "string" ? Color/* default.parse */.Z.parse(color) : color;
    color = color.getContrastYIQ();
    return VCore_({
      tag: 'text',
      "class": 'vc-value-text',
      attr: {
        x: 10,
        y: 10
      },
      style: {
        color: color + ''
      },
      child: {
        text: key
      }
    });
  });
  this.$body.addChild(this.$texts);
};

SimpleColumnChart.prototype._updateRowPosition = function () {
  var _this3 = this;

  var width = this.$body.box.width;
  var height = this.$body.box.height;
  if (height === 0) return;
  var colWidth = Math.min(150, width / this.$columns.length);
  var x0 = (width - colWidth * this.$columns.length) / 2;
  var maxValue = this._maxValue ? this._maxValue : 1;
  this.$columns.forEach(function (colElt, i) {
    var colHeight = map(_this3.values[i], 0, maxValue, 0, height);
    colElt.attr({
      width: colWidth,
      y: height - colHeight,
      height: colHeight,
      x: x0 + i * colWidth
    });
  });
  this.$texts.forEach(function (textElt, i) {
    var colHeight = map(_this3.values[i], 0, maxValue, 0, height);
    var y = height - colHeight;

    if (colHeight > 20) {
      y += 14;
      textElt.removeStyle('fill');
    } else {
      y -= 5;
      textElt.addStyle('fill', 'black');
    }

    textElt.attr({
      y: y,
      x: x0 + (i + 0.5) * colWidth
    });
  });
};

SimpleColumnChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createColumns();
};

SimpleColumnChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._updateRowPosition();
};

src_VCore.install(SimpleColumnChart);
/* harmony default export */ const src_SimpleColumnChart = (SimpleColumnChart);
;// CONCATENATED MODULE: ./src/SimplerBarChart.js








/**
 * @extends BChart
 * @constructor
 */

function SimpleBarChart() {
  src_BChart.apply(this, arguments);
  this.keys = [];
  this.values = [];
  this.texts = [];
  this.fillColors = [];
  this.$rows = [];
  this.$texts = [];
}

OOP/* default.mixClass */.ZP.mixClass(SimpleBarChart, src_BChart);
SimpleBarChart.tag = 'SimpleBarChart'.toLowerCase();

SimpleBarChart.render = function () {
  return src_BChart.render.apply(this, arguments).addClass('vc-simple-bar-chart');
};

SimpleBarChart.prototype.computeNotes = src_SimpleColumnChart.prototype.computeNotes;
SimpleBarChart.prototype.normalizeData = src_SimpleColumnChart.prototype.normalizeData;

SimpleBarChart.prototype._createRows = function () {
  var _this = this;

  this.$rows.forEach(function (e) {
    return e.remove();
  });
  this.$texts.forEach(function (e) {
    return e.remove();
  });
  this.$rows = this.values.map(function (value, i) {
    return VCore_({
      tag: 'rect',
      attr: {
        x: 0,
        y: 0
      },
      style: {
        fill: _this.fillColors[i]
      }
    });
  });
  this.$body.addChild(this.$rows);
  this.$texts = this.texts.map(function (key, i) {
    var color = _this.fillColors[i];
    color = typeof color === "string" ? Color/* default.parse */.Z.parse(color) : color;
    color = color.getContrastYIQ().toString('hex6');

    var res = VCore_({
      tag: 'text',
      "class": 'vc-value-text',
      attr: {
        x: 10,
        y: 10
      },
      style: {
        color: color
      },
      child: {
        text: key
      }
    });

    return res;
  });
  this.$body.addChild(this.$texts);
};

SimpleBarChart.prototype._updateRowPosition = function () {
  var _this2 = this;

  var width = this.$body.box.width;
  var height = this.$body.box.height;
  if (width === 0) return;
  var rowHeight = Math.min(150, height / this.$rows.length);
  var y0 = (height - rowHeight * this.$rows.length) / 2;
  var maxValue = this._maxValue ? this._maxValue : 1;
  this.$rows.forEach(function (colElt, i) {
    var rowWidth = map(_this2.values[i], 0, maxValue, 0, width);
    colElt.attr({
      width: rowWidth,
      x: 0,
      height: rowHeight,
      y: y0 + i * rowHeight
    });
  });
  this.$texts.forEach(function (textElt, i) {
    var rowWidth = map(_this2.values[i], 0, maxValue, 0, width);
    var box = textElt.getBBox();
    var y = y0 + (i + 0.5) * rowHeight + box.height / 2;
    var x = rowWidth;

    if (rowWidth > box.width + 10) {
      textElt.removeStyle('fill');
      x -= 5;
      textElt.addStyle('text-anchor', 'end');
    } else {
      x += 5;
      textElt.addStyle('text-anchor', 'start');
      textElt.addStyle('fill', 'black');
    }

    textElt.attr({
      x: x,
      y: y
    });
  });
};

SimpleBarChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createRows();
};

SimpleBarChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._updateRowPosition();
};

src_VCore.install(SimpleBarChart);
/* harmony default export */ const SimplerBarChart = (SimpleBarChart);
;// CONCATENATED MODULE: ./src/SimpleLineChart.js
function SimpleLineChart_toConsumableArray(arr) { return SimpleLineChart_arrayWithoutHoles(arr) || SimpleLineChart_iterableToArray(arr) || SimpleLineChart_unsupportedIterableToArray(arr) || SimpleLineChart_nonIterableSpread(); }

function SimpleLineChart_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

function SimpleLineChart_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return SimpleLineChart_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return SimpleLineChart_arrayLikeToArray(o, minLen); }

function SimpleLineChart_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }

function SimpleLineChart_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return SimpleLineChart_arrayLikeToArray(arr); }

function SimpleLineChart_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }










/**
 * @extends BChart
 * @constructor
 */

function SimpleLineChart() {
  src_BChart.apply(this, arguments);
  this.keys = [];
  this.values = [];
  this.texts = [];
  this.fillColors = [];
  this.$points = [];
  this.$texts = [];
  this.$bgRects = [];
}

OOP/* default.mixClass */.ZP.mixClass(SimpleLineChart, src_BChart);
SimpleLineChart.tag = 'SimpleLineChart'.toLowerCase();

SimpleLineChart.render = function () {
  return src_BChart.render.apply(this, arguments).addClass('vc-simple-column-chart');
};

SimpleLineChart.prototype.computeNotes = function () {
  var _this = this;

  return this.keys.map(function (key, i) {
    return {
      color: _this.fillColors[i] || 'black',
      text: key,
      type: 'point',
      idx: i
    };
  });
};

SimpleLineChart.prototype.normalizeData = function () {
  var colorScheme = this.colorScheme;
  var blockColors = (0,utils.isNaturalNumber)(colorScheme) ? (0,SelectColorSchemeMenu/* generatorColorScheme */.TD)(colorScheme, this.values.length) : generateBackgroundColors(this.values.length);
  this.fillColors = this.fillColors || [];

  while (this.fillColors.length < this.values.length) {
    this.fillColors.push(blockColors[this.fillColors.length]);
  }

  this._maxValue = Math.max.apply(Math, SimpleLineChart_toConsumableArray(this.values));

  if (!this.texts || this.values.length !== this.texts.length) {// this.texts = this.values.map(value=> this.nu);
  }
};

SimpleLineChart.prototype._createPoints = function () {
  var _this2 = this;

  this.$bgRects.forEach(function (elt) {
    return elt.remove();
  });
  this.$bgRects = this.values.map(function (u, i) {
    return VCore_({
      tag: 'rect',
      "class": ['vc-simple-background'],
      style: {
        fill: i % 2 ? 'rgba(132, 132, 132, 0.07)' : 'rgba(132, 132, 132, 0.2)'
      },
      on: {
        mouseenter: function mouseenter(event) {
          _this2.eventHandler.mouseEnterNote(i, event);
        },
        mouseleave: function mouseleave(event) {
          _this2.eventHandler.mouseLeaveNote(i, event);
        }
      }
    });
  });
  this.$body.addChild(this.$bgRects);
  this.$ox = this.$ox || VCore_({
    tag: 'path',
    "class": ['vc-simple-ox', 'vchart-axis']
  });
  this.$oxArrow = this.$oxArrow || VCore_({
    tag: 'path',
    "class": ['vchart-axis'],
    attr: {
      d: 'm0 -5v10l6.8 -5z'
    }
  });
  this.$body.addChild(this.$ox);
  this.$body.addChild(this.$oxArrow);
  this.$points.forEach(function (e) {
    return e.remove();
  });
  this.$texts.forEach(function (e) {
    return e.remove();
  });
  this.$points = this.values.map(function (value, i) {
    return VCore_({
      tag: 'circle',
      attr: {
        cx: 0,
        cy: 0,
        r: 8
      },
      style: {
        stroke: 'white',
        strokeWidth: 2,
        fill: _this2.fillColors[i],
        pointerEvents: 'none'
      }
    });
  });
  this.$line = VCore_({
    tag: 'path',
    style: {
      strokeWidth: 2,
      stroke: 'rgb(100, 100, 150)',
      fill: 'none',
      pointerEvents: 'none'
    }
  });
  this.$body.addChild(this.$line);
  this.$body.addChild(this.$points);
};

SimpleLineChart.prototype._updatePointPosition = function () {
  var _this3 = this;

  var width = this.$body.box.width;
  var height = this.$body.box.height;
  if (height === 0) return;
  var aHeight = height - 10;
  var aWidth = width - 25;
  var colWidth = aWidth / this.$points.length;
  var x0 = 10;
  var maxValue = this._maxValue ? this._maxValue : 1;
  this.$ox.attr('d', new controller_Turtle().moveTo(0, height).hLineBy(width).getPath());
  this.$oxArrow.attr('transform', translate(width - 3, height));
  this.$bgRects.forEach(function (elt, i) {
    elt.attr({
      width: colWidth,
      height: height,
      x: x0 + i * colWidth,
      y: 0
    });
  });
  var linePath = this.values.reduce(function (ac, value, i) {
    var colHeight = map(_this3.values[i], 0, maxValue, 0, aHeight);

    if (i) {
      ac.lineTo(x0 + (i + 0.5) * colWidth, height - colHeight);
    } else {
      ac.moveTo(x0 + (i + 0.5) * colWidth, height - colHeight);
    }

    return ac;
  }, new controller_Turtle()).getPath();
  this.$line.attr('d', linePath);
  this.$points.forEach(function (colElt, i) {
    var colHeight = map(_this3.values[i], 0, maxValue, 0, aHeight);
    colElt.attr({
      cy: height - colHeight,
      cx: x0 + (i + 0.5) * colWidth
    });
  }); // this.$texts.forEach((textElt, i) => {
  //     var colHeight = map(this.values[i], 0, maxValue, 0, height);
  //     var y = height - colHeight;
  //     if (colHeight > 20) {
  //         y += 14;
  //         textElt.removeStyle('fill');
  //     } else {
  //         y -= 5;
  //         textElt.addStyle('fill', 'black');
  //     }
  //     textElt.attr({
  //         y: y,
  //         x: x0 + (i + 0.5) * colWidth
  //     });
  // });
};

SimpleLineChart.prototype.createContent = function () {
  src_BChart.prototype.createContent.call(this);

  this._createPoints();
};

SimpleLineChart.prototype.updateBodyPosition = function () {
  src_BChart.prototype.updateBodyPosition.call(this);

  this._updatePointPosition();
};

SimpleLineChart.eventHandler = {};

SimpleLineChart.eventHandler.mouseEnterNote = function (idx, event) {
  var bound = this.$points[idx].getBoundingClientRect();
  this.tooltipToken = showTooltip(this.keys[idx] + ': ' + this.texts[idx], bound.right, bound.top);
};

SimpleLineChart.eventHandler.mouseLeaveNote = function (idx, event) {
  var token = this.tooltipToken;
  if (!token) return;
  setTimeout(function () {
    closeTooltip(token);
  }, 1000);
};

src_VCore.install(SimpleLineChart);
/* harmony default export */ const src_SimpleLineChart = (SimpleLineChart);
;// CONCATENATED MODULE: ./node_modules/absol/src/Math/Turtle.js


/**
 * @typedef TurtleCommand
 * @property {String} cmd
 * @property {String} action
 * @property {Number[]} args
 * @property {Vec2} dest
 * @property {Vec2} tangent
 */


/***
 *
 * @constructor
 */
function Turtle_Turtle() {
    /**
     * @type {Array<TurtleCommand>}
     */
    this._commands = [];
    /**
     * @type {Vec2}
     */
    this._pos = new Vec2/* default */.Z(0, 0);
    /**
     * @type {Vec2}
     */
    this._startPos = this._pos;
    /**
     * @type {Vec2}
     */
    this._tangent = new Vec2/* default */.Z(0, 0);
}


/**
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.moveBy = function (dx, dy) {
    this._tangent = new Vec2/* default */.Z(dx, dy);
    this._pos = this._pos.add(this._tangent);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'm',
        action: 'moveBy',
        args: [dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} x
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.moveTo = function (x, y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'M',
        action: 'moveTo',
        args: [x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 *
 * @param {number} length
 * @returns {this}
 */
Turtle_Turtle.prototype.moveForward = function (length) {
    var dV = this._tangent.normalized().mult(length);
    this._pos = this._pos.add(dV);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'm',
        action: 'moveTo',
        args: [dV.x, dV.y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 *
 * @param {number} length
 * @returns {this}
 */
Turtle_Turtle.prototype.lineForward = function (length) {
    var dV = this._tangent.normalized().mult(length);
    this._pos = this._pos.add(dV);
    this._startPos = this._pos;
    this._commands.push({
        cmd: 'l',
        action: 'moveTo',
        args: [dV.x, dV.y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/***
 *
 * @param {Number} angle - degree
 *  @returns {this}
 */
Turtle_Turtle.prototype.rotateDirTo = function (angle) {
    this._tangent = Vec2/* default.fromDirection */.Z.fromDirection(angle * Math.PI / 180);
    return this;
};

/***
 *
 * @param {Number} dAngle
 * @returns {this}
 */
Turtle_Turtle.prototype.rotateDirBy = function (dAngle) {
    this._tangent = this._tangent.rotate(dAngle * Math.PI / 180);
    return this;
};


/**
 * @param {Number} x
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.lineTo = function (x, y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'L',
        action: 'lineTo',
        args: [x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.lineBy = function (dx, dy) {
    this._tangent = new Vec2/* default */.Z(dx, dy);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'l',
        action: 'lineBy',
        args: [dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} x
 * @returns {this}
 */
Turtle_Turtle.prototype.hLineTo = function (x) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, this._pos.y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'H',
        action: 'hLineTo',
        args: [x],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 * @param {Number} x
 * @returns {this}
 */
Turtle_Turtle.prototype.hLineBy = function (x) {
    this._tangent = new Vec2/* default */.Z(x, 0);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'h',
        action: 'hLineBy',
        args: [x],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.vLineTo = function (y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(this._pos.x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'V',
        action: 'vLineTo',
        args: [y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.vLineBy = function (y) {
    this._tangent = new Vec2/* default */.Z(0, y);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'v',
        action: 'vLineBy',
        args: [y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};

/**
 * @param {Number} c1x
 * @param {Number} c1y
 * @param {Number} c2x
 * @param {Number} c2y
 * @param {Number} x
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.cubicBezierTo = function (c1x, c1y, c2x, c2y, x, y) {
    this._tangent = new Vec2/* default */.Z(c2x, c2y);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'C',
        action: 'cubicBezierTo',
        args: [c1x, c1y, c2x, c2y, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} c1dx
 * @param {Number} c1dy
 * @param {Number} c2dx
 * @param {Number} c2dy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.cubicBezierBy = function (c1dx, c1dy, c2dx, c2dy, dx, dy) {
    this._tangent = this._pos.add(new Vec2/* default */.Z(c2dx, c2dy));
    this._pos = this._pos.add(new Vec2/* default */.Z(dx, dy));
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'c',
        action: 'cubicBezierBy',
        args: [c1dx, c1dy, c2dx, c2dy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} c2x
 * @param {Number} c2y
 * @param {Number} x
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.smoothCubicBezierTo = function (c2x, c2y, x, y) {
    this._tangent = new Vec2/* default */.Z(c2x, c2y);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'S',
        action: 'smoothCubicBezierTo',
        args: [c2x, c2y, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} c2dx
 * @param {Number} c2dy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.smoothCubicBezierBy = function (c2dx, c2dy, dx, dy) {
    this._tangent = this._pos.add(new Vec2/* default */.Z(c2dx, c2dy));
    this._pos = this._pos.add(new Vec2/* default */.Z(dx, dy));
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 's',
        action: 'smoothCubicBezierBy',
        args: [c2dx, c2dy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cx
 * @param {Number} cy
 * @param {Number} x
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.quadraticBezierTo = function (cx, cy, x, y) {
    this._tangent = new Vec2/* default */.Z(cx, cy);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'Q',
        action: 'quadraticBezierTo',
        args: [cx, cy, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.quadraticBezierBy = function (cdx, cdy, dx, dy) {
    this._tangent = this._pos.add(new Vec2/* default */.Z(cdx, cdy));
    this._pos = this._pos.add(new Vec2/* default */.Z(dx, dy));
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'q',
        action: 'quadraticBezierBy',
        args: [cdx, cdy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cx
 * @param {Number} cy
 * @param {Number} x
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.smoothQuadraticBezierTo = function (cx, cy, x, y) {
    this._tangent = new Vec2/* default */.Z(cx, cy);
    this._pos = new Vec2/* default */.Z(x, y);
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'T',
        action: 'smoothQuadraticBezierTo',
        args: [cx, cy, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @param {Number} cdx
 * @param {Number} cdy
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.smoothQuadraticBezierBy = function (cdx, cdy, dx, dy) {
    this._tangent = this._pos.add(new Vec2/* default */.Z(cdx, cdy));
    this._pos = this._pos.add(new Vec2/* default */.Z(dx, dy));
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 't',
        action: 'smoothQuadraticBezierBy',
        args: [cdx, cdy, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/***
 *
 * @param {Number} rx
 * @param {Number} ry
 * @param {Number} angle
 * @param {Number} large
 * @param {Number} sweep
 * @param {Number} x
 * @param {Number} y
 * @returns {this}
 */
Turtle_Turtle.prototype.arcTo = function (rx, ry, angle, large, sweep, x, y) {
    this._tangent = this._pos;
    this._pos = new Vec2/* default */.Z(x, y);


    var AB = this._pos.sub(this._tangent);


    //in ellipse
    var AB_inE = AB.rotate(-angle / 180 * Math.PI);
    //in circle
    var AB_inC = new Vec2/* default */.Z(AB_inE.x / rx, AB_inE.y / ry);

    var AH_inC;
    var HO_length_inC;
    var AH_length_inC;
    var HO_inC;
    var BO_inC;
    var tangent_inC;
    var tangent_inE;

    AH_inC = AB_inC.div(2);
    AH_length_inC = AH_inC.abs();
    HO_length_inC = Math.sqrt(1 - AH_length_inC * AH_length_inC);
    if (!sweep !== !large) {
        HO_inC = AB_inC.rotate90().normalized().mult(HO_length_inC);
        BO_inC = AH_inC.inv().add(HO_inC);
        tangent_inC = BO_inC.rotate90().inv();
    }
    else {
        HO_inC = AB_inC.rotate90().inv().normalized().mult(HO_length_inC);//ok
        BO_inC = AH_inC.inv().add(HO_inC);
        tangent_inC = BO_inC.rotate90();
    }
    if (large) tangent_inC = tangent_inC.inv();

    tangent_inE = new Vec2/* default */.Z(tangent_inC.x * rx, tangent_inC.y * ry);
    this._tangent = tangent_inE.rotate(angle / 180 * Math.PI);

    this._commands.push({
        cmd: 'A',
        action: 'lineTo',
        args: [rx, ry, angle, large, sweep, x, y],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/***
 *
 * @param {Number} rx
 * @param {Number} ry
 * @param {Number} angle
 * @param {Number} large
 * @param {Number} sweep
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.arcBy = function (rx, ry, angle, large, sweep, dx, dy) {
    //todo: wrong_tangent
    this._tangent = new Vec2/* default */.Z(dx, dy);
    this._pos = this._pos.add(this._tangent);
    this._commands.push({
        cmd: 'a',
        action: 'arcBy',
        args: [rx, ry, angle, large, sweep, dx, dy],
        dest: this._pos,
        tangent: this._tangent
    });
    return this;
};


/**
 * @returns {this}
 */
Turtle_Turtle.prototype.closePath = function () {
    this._tangent = this._pos;
    this._pos = this._startPos;
    this._tangent = this._pos.sub(this._tangent);
    this._commands.push({
        cmd: 'z',
        action: 'closePath',
        args: [],
        dest: this._pos
    });
    return this;
};


/**
 * @param {Number} dx
 * @param {Number} dy
 * @returns {this}
 */
Turtle_Turtle.prototype.translate = function (dx, dy) {
    var command;
    var deltaVec = new Vec2/* default */.Z(dx, dy);
    for (var i = 0; i < this._commands.length; ++i) {
        command = this._commands[i];
        command.dest = command.dest.add(deltaVec);
        switch (command.cmd) {
            case 'M':
            case 'L':
                command.args[0] = command.dest.x;
                command.args[1] = command.dest.y;
                break;
            case 'H':
                command.args[0] = command.dest.x;
                break;
            case 'V':
                command.args[0] = command.dest.y;
                break;
            case 'C':
                command.args[0] += dx;
                command.args[1] += dy;
                command.args[2] += dx;
                command.args[3] += dy;
                command.args[4] = command.dest.x;
                command.args[5] = command.dest.y;
                break;
            case 'Q':
                command.args[0] += dx;
                command.args[1] += dy;
                command.args[3] = command.dest.x;
                command.args[4] = command.dest.y;
                break;

            case 'A':
                command.args[5] = command.dest.x;
                command.args[6] = command.dest.y;
                break;
        }

    }
    return this;
};


/**
 * @returns {String}
 */
Turtle_Turtle.prototype.getPath = function () {

    return this._commands.map(function (command) {
        return command.cmd + ' ' + command.args.join(',');
    }).join(' ');
};


/***
 *
 * @returns {this}
 */
Turtle_Turtle.prototype.reset = function () {
    this._commands = [];
    this._pos = new Vec2/* default */.Z(0, 0);
    this._startPos = this._pos;
    this._tangent = new Vec2/* default */.Z(0, 0);
    return this;
};

/**
 *
 * @returns {Turtle|this}
 */
Turtle_Turtle.prototype.clone = function () {
    var Constructor = this.constructor;
    var res = new Constructor();
    res._commands.push.apply(res._commands, this._commands);
    res._pos = this._pos.copy();
    res._startPos = this._startPos.copy();
    res._tangent = this._tangent.copy()
    return res;
};

/* harmony default export */ const Math_Turtle = (Turtle_Turtle);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/DelaySignal.js
var DelaySignal = __webpack_require__(8098);
;// CONCATENATED MODULE: ./src/HorizontalRangeChart.js
















/**
 * @extends SvgCanvas
 * @constructor
 */

function HorizontalRangeChart() {
  var _this = this;

  this.resizeCtrl = new ChartResizeController(this);
  this.titleCtrl = new ChartTitleController(this);
  this.fixedAxisCtrl = new HRCFixedAxisController(this);
  this.$attachhook.once('attached', function () {
    _this.fixedAxisCtrl.start();

    _this.updateContent();
  });
  /**
   *
   * @type {KeyNoteGroup}
   */

  this.$keyNoteGroup = VCore_$(KeyNoteGroup.tag, this);
  this.$title = VCore_$('.vc-title', this);
  this.$body = VCore_$('.vc-body', this);
  this.$axis = VCore_$('.vchart-axis', this);
  this.$oxy = VCore_$('#oxy', this);
  this.$oxArrow = VCore_$('#ox-arrow', this);
  this.$oyLabelCtn = VCore_$('.vc-oy-label-ctn', this);
  this.$oxLabelCtn = VCore_$('.vc-ox-label-ctn', this);
  this.$rangeCtn = VCore_$('.vc-range-ctn', this);
  this.$grid = VCore_$('.vc-grid', this);
  this.$valueName = VCore_$('.vc-value-name', this);
  this.domSignal = new DelaySignal/* default */.Z();
  this.$fixedContentRef = VCore_$('.vc-fixed-content-ref', this);
  this.domSignal.on({
    updateContent: function updateContent() {
      if (_this.isDescendantOf(document.body)) {
        _this.fixedAxisCtrl.start();

        _this.updateContent();
      }
    }
  });
  (0,DataStructure_Object/* observePropertyChanges */.U)(this, this.dataKeys, function () {
    if (_this.domSignal) _this.domSignal.emit('updateContent');
  });
  /**
   * @name ranges
   * @type {[]}
   * @memberof HorizontalRangeChart#
   */

  /**
   * @name maxText
   * @type {string}
   * @memberof HorizontalRangeChart#
   */

  /**
   * @name valueName
   * @type {string}
   * @memberof HorizontalRangeChart#
   */

  /**
   * @name minText
   * @type {string}
   * @memberof HorizontalRangeChart#
   */

  /**
   * @name midText
   * @type {string}
   * @memberof HorizontalRangeChart#
   */

  /**
   * @name normalText
   * @type {string}
   * @memberof HorizontalRangeChart#
   */

  /**
   * @name zeroOY
   * @type {boolean}
   * @memberof HorizontalRangeChart
   */
}

(0,OOP/* mixClass */.Jx)(HorizontalRangeChart, src_BChart);
HorizontalRangeChart.tag = 'HorizontalRangeChart'.toLowerCase();

HorizontalRangeChart.render = function (data, o, dom) {
  var res = VCore_({
    tag: svg_SvgCanvas,
    "class": ['vc-chart', 'vc-horizontal-range-chart', 'as-height-auto'],
    style: {},
    child: [{
      tag: 'text',
      "class": 'vc-title',
      attr: {
        'alignment-baseline': "hanging"
      },
      child: {
        text: ''
      }
    }, {
      tag: 'rect',
      "class": 'vc-fixed-content-ref',
      attr: {
        width: '10',
        height: '33'
      },
      style: {
        fill: 'transparent',
        stroke: 'none'
      }
    }, {
      tag: KeyNoteGroup
    }, {
      tag: 'gcontainer',
      "class": 'vc-body',
      child: [{
        tag: 'path',
        "class": 'vc-grid'
      }, {
        tag: 'gcontainer',
        "class": 'vchart-axis',
        child: [{
          tag: 'path',
          id: 'oxy',
          attr: {
            d: 'm0 -1v1 h1',
            fill: 'none'
          }
        }, {
          tag: 'path',
          id: "ox-arrow",
          attr: {
            d: 'm0 -5v10l6.8 -5z'
          }
        }]
      }, {
        tag: 'gcontainer',
        "class": 'vc-oy-label-ctn'
      }, {
        tag: 'text',
        "class": 'vc-value-name',
        child: {
          text: ''
        }
      }, {
        tag: 'gcontainer',
        "class": 'vc-ox-label-ctn'
      }, {
        tag: 'gcontainer',
        "class": 'vc-range-ctn'
      }]
    }]
  });

  var colorScheme = o && o.props && o.props.colorScheme;

  if ((0,utils.isNaturalNumber)(colorScheme)) {
    colorScheme = Math.max(0, Math.min(SelectColorSchemeMenu/* DEFAULT_CHART_COLOR_SCHEMES.length */.cF.length, colorScheme));
    res.attr('data-color-scheme', colorScheme + '');
  }

  return res;
};

HorizontalRangeChart.prototype.rowSpacing = 40;
HorizontalRangeChart.prototype.plotRadius = 8;
HorizontalRangeChart.prototype.rangeHeight = 20;
HorizontalRangeChart.prototype.rangeWidth = 3;
HorizontalRangeChart.prototype.rangeMaxColor = '#86aeea';
HorizontalRangeChart.prototype.rangeMinColor = '#7ebd3b';
HorizontalRangeChart.prototype.rangeMidColor = 'red';
HorizontalRangeChart.prototype.rangeMidHeight = 26;
HorizontalRangeChart.prototype.rangeMidWidth = 5;
HorizontalRangeChart.prototype.normalColor = 'rgb(247, 148, 29)';
HorizontalRangeChart.prototype.dataKeys = src_BChart.prototype.dataKeys.concat(['rowSpacing', 'plotRadius', 'rangeHeight', 'ranges', 'rangeWidth', 'rangeMaxColor', 'rangeMinColor', 'rangeMidHeight', 'rangeMidWidth']);

HorizontalRangeChart.prototype.numberToString = function () {
  return Math_int.numberToString.apply(this, arguments);
};

HorizontalRangeChart.prototype.addStyle = function (arg0, arg1) {
  if (arg0 === 'height') {
    if (arg1 === 'auto') {
      this.addClass('as-height-auto');
    }
  } else {
    this.removeClass('as-height-auto');
    AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
  }

  return this;
};

HorizontalRangeChart.prototype.revokeResource = function () {
  src_BChart.prototype.revokeResource.call(this);
  this.fixedAxisCtrl.revokeResource();
};

HorizontalRangeChart.prototype.createNote = function () {
  var items = [{
    noteType: 'line',
    text: this.midText || 'Medium',
    key: 'mid',
    color: this.rangeMidColor
  }, {
    noteType: 'line',
    text: this.maxText || 'Maximum',
    key: 'max',
    color: this.rangeMaxColor
  }, {
    noteType: 'point',
    text: this.normalText || 'Normal',
    key: 'normal',
    color: this.normalColor
  }];
  this.$keyNoteGroup.items = items;
};

HorizontalRangeChart.prototype.createOYLabel = function () {
  var ranges = this.ranges;
  if (!Array.isArray(ranges)) ranges = [];
  if (this.$oyLabels) this.$oyLabels.forEach(function (e) {
    return e.remove();
  });
  this.$oyLabels = ranges.map(function (it) {
    return VCore_({
      tag: 'text',
      attr: {
        'alignment-baseline': "middle"
      },
      child: {
        text: it.name
      }
    });
  });
  this.$oyLabelCtn.addChild(this.$oyLabels);
};

HorizontalRangeChart.prototype.createRanges = function () {
  var _this2 = this;

  var ranges = this.ranges;
  if (!Array.isArray(ranges)) ranges = [];
  this.$ranges = ranges.map(function (range) {
    var elt = VCore_({
      tag: 'gcontainer',
      child: []
    });

    elt.$line = VCore_({
      tag: 'path',
      style: {
        stroke: 'rgb(124,124,147)',
        strokeWidth: 3
      }
    });
    elt.addChild(elt.$line);

    if ((0,utils.isRealNumber)(range.normal)) {
      elt.$normal = VCore_({
        tag: 'circle',
        attr: {
          cx: 0,
          cy: 0,
          r: _this2.plotRadius,
          title: _this2.numberToString(range.normal)
        },
        style: {
          fill: _this2.normalColor,
          stroke: 'rgb(92, 92, 95)'
        }
      });
      elt.addChild(elt.$normal);
    }

    elt.$min = VCore_({
      tag: 'rect',
      attr: {
        x: -_this2.rangeWidth / 2,
        y: -_this2.rangeHeight / 2,
        width: _this2.rangeWidth,
        height: _this2.rangeHeight,
        title: _this2.numberToString(range.min)
      },
      style: {
        fill: _this2.rangeMinColor,
        // fill:'black',
        // fill: 'rgb(72, 72, 75)',
        stroke: 'none'
      }
    });
    elt.addChild(elt.$min);

    if ((0,utils.isRealNumber)(range.mid)) {
      elt.$mid = VCore_({
        tag: svg_GContainer,
        child: {
          tag: 'rect',
          style: {
            // fill: '#58EBF4',
            fill: 'red',
            stroke: 'none'
          },
          attr: {
            // x: -this.plotRadius / 1.4,
            // y: -this.plotRadius / 1.4,
            // width: this.plotRadius / 0.7, height: this.plotRadius / 0.7,
            width: _this2.rangeMidWidth,
            height: _this2.rangeMidHeight,
            x: -_this2.rangeMidWidth / 2,
            y: -_this2.rangeMidHeight / 2,
            title: _this2.numberToString(range.mid) // transform:'rotate(45)'

          }
        }
      });
      elt.addChild(elt.$mid);
    }

    elt.$max = VCore_({
      tag: 'rect',
      style: {
        fill: _this2.rangeMaxColor,
        // fill: 'rgb(72, 72, 75)',
        stroke: 'none'
      },
      attr: {
        x: -_this2.rangeWidth / 2,
        y: -_this2.rangeHeight / 2,
        width: _this2.rangeWidth,
        height: _this2.rangeHeight,
        title: _this2.numberToString(range.max)
      }
    });
    elt.addChild(elt.$max);
    return elt;
  });
  this.$rangeCtn.clearChild().addChild(this.$ranges);
};

HorizontalRangeChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  this.updateContentPosition();
};

HorizontalRangeChart.prototype.updateContentPosition = function () {
  var _this3 = this;

  if (!this.$oyLabels) return;
  var ranges = this.ranges;
  if (!Array.isArray(ranges)) ranges = [];
  var i, j;
  var width = this.box.width || 0;
  var y = 5;
  this.$title.attr('x', width / 2).attr('y', y);
  y += 30;
  this.$keyNoteGroup.box.width = width - 20;
  this.$keyNoteGroup.box.x = 10;
  this.$keyNoteGroup.box.y = y;
  this.$keyNoteGroup.updateSize();
  this.$keyNoteGroup.box.x = width / 2 - this.$keyNoteGroup.getBBox().width / 2;
  y += (this.$keyNoteGroup.box.height || 0) + 20;
  this.$body.box.y = y + 24;
  var oyLabelWidth = this.$oyLabels.reduce(function (ac, cr) {
    return Math.max(ac, cr.getBBox().width);
  }, 0);
  oyLabelWidth = Math.ceil(oyLabelWidth);
  var spacing = this.rowSpacing;
  this.$body.box.x = oyLabelWidth + 10;
  this.$body.box.width = width - this.$body.box.x - 10;
  this.$fixedContentRef.attr('y', this.$body.box.y - 24);
  this.$fixedContentRef.attr('width', this.$body.box.width + this.$body.box.x + 8);
  this.$oyLabelCtn.box.x = -this.$body.box.x;
  this.$axis.box.width = this.$body.box.width;
  this.$oxArrow.attr('d', 'M' + this.$axis.box.width + ' 0 m0 -5v10l6.8 -5z');
  this.$axis.box.height = spacing * this.$oyLabels.length;
  /**
   *
   * @type {Turtle}
   */

  var turtle = new Math_Turtle().moveTo(this.$axis.box.width, 0).hLineTo(0).vLineTo(this.$axis.box.height);
  var valueNameWidth = this.$valueName.getBBox().width;
  this.$valueName.attr('x', this.$axis.box.width).attr('y', -8);
  var dx = Math.max(100, Math.floor(20 + measureArial14TextWidth(this.numberToString(this.computedData.max))));
  var sm = calBeautySegment(Math.floor((this.$axis.box.width - valueNameWidth - 10 - dx / 2) / dx), this.computedData.min, this.computedData.max + 1);
  this.computedData.sm = sm;
  dx = Math.floor((this.$axis.box.width - valueNameWidth - 10 - dx / 2) / sm.segmentCount);
  var dv = (sm.maxValue - sm.minValue) / sm.segmentCount;
  this.computedData.dx = dx; //for fixed content

  this.computedData.dv = dv;
  turtle.moveTo(0, 2);

  for (i = 0; i < sm.segmentCount; ++i) {
    turtle.moveBy(dx, -4);
    turtle.vLineBy(4);
  }

  this.$oxy.attr('d', turtle.getPath());
  this.$oyLabels.forEach(function (elt, i) {
    elt.attr('y', i * spacing + spacing / 2);
  });

  while (this.$oxLabelCtn.childNodes.length > sm.segmentCount + 1 && this.$oxLabelCtn.lastChild) {
    this.$oxLabelCtn.lastChild.remove();
  }

  while (this.$oxLabelCtn.childNodes.length < sm.segmentCount + 1) {
    this.$oxLabelCtn.addChild(VCore_({
      tag: 'text',
      style: {
        textAnchor: 'middle'
      },
      attr: {
        y: -8
      },
      child: {
        text: ''
      }
    }));
  }

  Array.prototype.forEach.call(this.$oxLabelCtn.childNodes, function (elt, i) {
    elt.firstChild.data = _this3.numberToString(sm.minValue + i * dv);
    elt.attr('x', dx * i);
  });
  turtle = new Math_Turtle();
  var oxLength = this.$axis.box.width - 5;
  turtle.moveTo(oxLength, 0);

  for (i = 0; i < ranges.length; ++i) {
    turtle.moveBy(-oxLength, spacing).hLineBy(oxLength);
  }

  turtle.moveTo(0, spacing * ranges.length, 0);

  for (i = 0; i < sm.segmentCount; ++i) {
    turtle.moveBy(dx, -spacing * ranges.length).vLineBy(spacing * ranges.length);
  }

  this.$grid.attr('d', turtle.getPath());
  this.$ranges.forEach(function (elt, i) {
    elt.box.y = i * spacing + spacing / 2;
    var range = ranges[i];
    elt.$min.attr('x', map(range.min - sm.minValue, 0, dv, 0, dx) - _this3.rangeWidth / 2);
    if (elt.$mid) elt.$mid.box.x = map(range.mid - sm.minValue, 0, dv, 0, dx);
    elt.$max.attr('x', map(range.max - sm.minValue, 0, dv, 0, dx) - _this3.rangeWidth / 2);
    elt.$line.attr('d', "M".concat(map(range.min - sm.minValue, 0, dv, 0, dx), " 0 l").concat(map(range.max - range.min, 0, dv, 0, dx), " 0"));
    if (elt.$normal) elt.$normal.attr('cx', map(range.normal - sm.minValue, 0, dv, 0, dx));
  });
  this.$body.box.height = this.$axis.box.height + 10; //10px : padding bottom

  this.box.height = this.$body.box.y + this.$body.box.height;
  this.fixedAxisCtrl.updateContentPosition();
};

HorizontalRangeChart.prototype.computeData = function () {
  var ranges = Array.isArray(this.ranges) ? this.ranges : [];
  this.computedData = {};
  this.computedData.max = ranges.reduce(function (ac, cr) {
    return Math.max(ac, cr.min, cr.max, cr.mid);
  }, -Infinity);
  this.computedData.min = ranges.reduce(function (ac, cr) {
    return Math.min(ac, cr.min, cr.max, cr.mid);
  }, Infinity);
  if (this.zeroOY) this.computedData.min = Math.min(this.computedData.min, 0);
};

HorizontalRangeChart.prototype.updateContent = function () {
  this.computeData();
  this.$title.firstChild.data = this.title;
  this.$valueName.firstChild.data = this.valueName || '';
  this.createNote();
  this.createOYLabel();
  this.createRanges();
  this.fixedAxisCtrl.updateContent();
  this.updateContentPosition();
};

src_VCore.install(HorizontalRangeChart);
/* harmony default export */ const src_HorizontalRangeChart = (HorizontalRangeChart);
/**
 *
 * @param {HorizontalRangeChart|SvgCanvas}elt
 * @constructor
 */

function HRCFixedAxisController(elt) {
  this.elt = elt;
  this.state = 'PENDING';
  this.listenningElementList = [];
  this.ev_scroll = this.ev_scroll.bind(this);
  this.$canvas = null;
}

HRCFixedAxisController.prototype.start = function () {
  if (this.state !== 'PENDING') return;
  this.state = "RUNNING";
  var elt = this.elt.parentElement;

  while (elt) {
    elt.addEventListener('scroll', this.ev_scroll);
    this.listenningElementList.push(elt);
    elt = elt.parentElement;
  }

  elt = document;
  elt.addEventListener('scroll', this.ev_scroll);
  this.listenningElementList.push(elt);
  this.$canvas = VCore_({
    tag: svg_SvgCanvas.tag,
    "class": 'vc-chart',
    style: {
      pointerEvents: 'none',
      minHeight: 'unset',
      position: 'fixed',
      zIndex: (0,utils.findMaxZIndex)(this.elt) + 100,
      left: 0,
      top: 0,
      visibility: 'hidden',
      height: '33px',
      backgroundColor: 'transparent'
    },
    child: [{
      tag: 'path',
      "class": 'vc-fixed-axis-bg',
      style: {
        pointerEvents: 'all',
        fill: 'white',
        stroke: 'none'
      }
    }, {
      tag: 'gcontainer',
      "class": 'vc-body',
      child: [{
        tag: 'gcontainer',
        "class": 'vc-ox-label-ctn'
      }, {
        tag: 'text',
        "class": 'vc-value-name',
        child: {
          text: ''
        }
      }, {
        tag: 'gcontainer',
        "class": 'vchart-axis',
        child: [{
          tag: 'path',
          id: 'oxy',
          attr: {
            d: 'm0 -1v1 h1',
            fill: 'none'
          }
        }, {
          tag: 'path',
          id: "ox-arrow",
          attr: {
            d: 'm0 -5v10l6.8 -5z'
          }
        }]
      }]
    }]
  }).addTo(this.elt.parentElement);
  this.$bg = VCore_$('.vc-fixed-axis-bg', this.$canvas);
  this.$body = VCore_$('.vc-body', this.$canvas);
  this.$axis = VCore_$('.vchart-axis', this.$canvas);
  this.$oxy = VCore_$('#oxy', this.$canvas);
  this.$oxArrow = VCore_$('#ox-arrow', this.$canvas);
  this.$body.box.y = 25;
  this.$oxLabelCtn = VCore_$('.vc-ox-label-ctn', this.$canvas);
  this.$valueName = VCore_$('.vc-value-name', this.$canvas);
};

HRCFixedAxisController.prototype.stop = function () {
  if (this.state !== 'RUNNING') return;
  this.state = "STOPPED";
  var elt;

  while (this.listenningElementList.length > 0) {
    elt = this.listenningElementList.pop();
    elt.removeEventListener('scroll', this.ev_scroll);
  }

  this.$canvas.remove();
};

HRCFixedAxisController.prototype.revokeResource = function () {
  this.revokeResource = noop/* default */.Z;
  this.stop();
  this.elt = null;
  this.revokeResource = noop/* default */.Z;
};

HRCFixedAxisController.prototype.updateContent = function () {
  this.$valueName.firstChild.data = this.elt.valueName || '';
};

HRCFixedAxisController.prototype.updateContentPosition = function () {
  var _this4 = this;

  if (this.state !== "RUNNING") return;
  var i;
  if (!this.elt.computedData) return;
  var sm = this.elt.computedData.sm;
  var dx = this.elt.computedData.dx;
  var dv = this.elt.computedData.dv;
  var width = parseFloat(this.elt.$fixedContentRef.attr('width'));
  var height = parseFloat(this.elt.$fixedContentRef.attr('height'));
  this.$canvas.addStyle({
    width: width + 'px',
    height: height + 1 + 'px'
  });
  this.$canvas.box.setSize(width, height);
  this.$body.box.x = this.elt.$body.box.x;
  this.$axis.box.x = this.elt.$axis.box.x;
  this.$oxArrow.attr('d', 'M' + this.elt.$axis.box.width + ' 0 m0 -5v10l6.8 -5z');
  this.$valueName.attr('x', this.elt.$axis.box.width).attr('y', -8);
  var turtle = new Math_Turtle().moveTo(this.elt.$axis.box.width, 0).hLineTo(0).vLineTo(10);
  turtle.moveTo(0, 2);

  for (i = 0; i < sm.segmentCount; ++i) {
    turtle.moveBy(dx, -4);
    turtle.vLineBy(4);
  }

  this.$oxy.attr('d', turtle.getPath());

  while (this.$oxLabelCtn.childNodes.length > sm.segmentCount + 1 && this.$oxLabelCtn.lastChild) {
    this.$oxLabelCtn.lastChild.remove();
  }

  while (this.$oxLabelCtn.childNodes.length < sm.segmentCount + 1) {
    this.$oxLabelCtn.addChild(VCore_({
      tag: 'text',
      style: {
        textAnchor: 'middle'
      },
      attr: {
        y: -8
      },
      child: {
        text: ''
      }
    }));
  }

  Array.prototype.forEach.call(this.$oxLabelCtn.childNodes, function (elt, i) {
    elt.firstChild.data = _this4.elt.numberToString(sm.minValue + i * dv);
    elt.attr('x', dx * i);
  });
  turtle = new Math_Turtle();
  turtle.moveTo(width, 0).vLineTo(height).hLineBy(-8).vLineBy(-9).hLineTo(0).vLineTo(0).closePath();
  this.$bg.attr('d', turtle.getPath());
  this.updateDomPosition();
};

HRCFixedAxisController.prototype.updateDomPosition = function () {
  var outBound = (0,Dom/* traceOutBoundingClientRect */.DI)(this.elt);
  var refBound = this.elt.$fixedContentRef.getBoundingClientRect();
  var bound = this.elt.getBoundingClientRect();
  var hidden = false;
  hidden = hidden || bound.bottom < outBound.top + refBound.height + 5;
  hidden = hidden || refBound.top > outBound.top;

  if (hidden) {
    this.$canvas.addStyle('visibility', 'hidden');
  } else {
    this.$canvas.removeStyle('visibility');
    this.$canvas.addStyle({
      left: refBound.left - 0.5 + 'px',
      top: Math.max(refBound.top, outBound.top) - 1.5 + 'px'
    });
  }
};

HRCFixedAxisController.prototype.ev_scroll = function () {
  if (this.elt.isDescendantOf(document.body)) {
    this.updateDomPosition();
  } else {
    this.stop();
    this.revokeResource();
  }
};
;// CONCATENATED MODULE: ./src/HorizontalRankChart.js
function HorizontalRankChart_toConsumableArray(arr) { return HorizontalRankChart_arrayWithoutHoles(arr) || HorizontalRankChart_iterableToArray(arr) || HorizontalRankChart_unsupportedIterableToArray(arr) || HorizontalRankChart_nonIterableSpread(); }

function HorizontalRankChart_nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

function HorizontalRankChart_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return HorizontalRankChart_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return HorizontalRankChart_arrayLikeToArray(o, minLen); }

function HorizontalRankChart_iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }

function HorizontalRankChart_arrayWithoutHoles(arr) { if (Array.isArray(arr)) return HorizontalRankChart_arrayLikeToArray(arr); }

function HorizontalRankChart_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }















/**
 * @extends SvgCanvas
 * @constructor
 */

function HorizontalRankChart() {
  var _this = this;

  this.resizeCtrl = new ChartResizeController(this);
  this.titleCtrl = new ChartTitleController(this);
  this.fixedAxisCtrl = new HRCFixedAxisController(this);
  this.$attachhook.once('attached', function () {
    _this.fixedAxisCtrl.start();

    _this.updateContent();
  });
  this.$title = VCore_$('.vc-title', this);
  this.$body = VCore_$('.vc-body', this);
  this.$axis = VCore_$('.vchart-axis', this);
  this.$oxy = VCore_$('#oxy', this);
  this.$oxArrow = VCore_$('#ox-arrow', this);
  this.$oyLabelCtn = VCore_$('.vc-oy-label-ctn', this);
  this.$oxLabelCtn = VCore_$('.vc-ox-label-ctn', this);
  this.$grid = VCore_$('.vc-grid', this);
  this.$valueName = VCore_$('.vc-value-name', this);
  this.$postionCtn = VCore_$('.vc-postion-ctn', this);
  this.$fixedContentRef = VCore_$('.vc-fixed-content-ref', this);
  this.$oyLabels = [];
  this.cpData = null;
  this.colors = ['white', 'rgb(201, 241, 253)', 'rgb(212, 227, 252)', 'rgb(218, 202, 251)', 'rgb(242, 201, 251)', 'rgb(255, 218, 216)', 'rgb(255, 236, 215)', 'rgb(254, 252, 224)', 'rgb(223, 237, 214)', 'rgb(77, 215, 250)', 'rgb(117, 169, 249)', 'rgb(139, 81, 245)', 'rgb(215, 87, 246)', 'rgb(255, 138, 132)', 'rgb(152, 165, 52)', 'rgb(254, 248, 160)', 'rgb(174, 221, 148)', 'rgb(0, 164, 221)', 'rgb(20, 100, 246)', 'rgb(156, 41, 183)'];
  this.domSignal = new DelaySignal/* default */.Z();
  this.domSignal.on('updateContent', function () {
    if (_this.isDescendantOf(document.body)) {
      _this.fixedAxisCtrl.start();

      _this.updateContent();
    }
  });
  (0,OOP/* drillProperty */.pj)(this, this, 'computedData', 'cpData');
  (0,DataStructure_Object/* observePropertyChanges */.U)(this, this.dataKeys, function () {
    return _this.domSignal.emit('updateContent');
  });
  /**
   * @name positions
   * @type {{name: string, ranks:number[]}[]}
   * @memberof HorizontalRankChart#
   */

  /**
   * @name valueName
   * @type {string}
   * @memberof HorizontalRangeChart#
   */
}

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

HorizontalRankChart.render = function (data, o, dom) {
  var res = VCore_({
    tag: svg_SvgCanvas,
    "class": ['vc-chart', 'vc-horizontal-rank-chart', 'as-height-auto'],
    style: {},
    child: [{
      tag: 'text',
      "class": 'vc-title',
      attr: {
        'alignment-baseline': "hanging"
      },
      child: {
        text: ''
      }
    }, {
      tag: 'rect',
      "class": 'vc-fixed-content-ref',
      attr: {
        width: '10',
        height: '33'
      },
      style: {
        fill: 'transparent',
        stroke: 'none'
      }
    }, {
      tag: KeyNoteGroup
    }, {
      tag: 'gcontainer',
      "class": 'vc-body',
      child: [{
        tag: 'path',
        "class": 'vc-grid'
      }, {
        tag: 'gcontainer',
        "class": 'vchart-axis',
        child: [{
          tag: 'path',
          id: 'oxy',
          attr: {
            d: 'm0 -1v1 h1',
            fill: 'none'
          }
        }, {
          tag: 'path',
          id: "ox-arrow",
          attr: {
            d: 'm0 -5v10l6.8 -5z'
          }
        }]
      }, {
        tag: 'text',
        "class": 'vc-value-name',
        child: {
          text: ''
        }
      }, {
        tag: 'gcontainer',
        "class": 'vc-oy-label-ctn'
      }, {
        tag: 'gcontainer',
        "class": 'vc-ox-label-ctn'
      }, {
        tag: 'gcontainer',
        "class": 'vc-postion-ctn'
      }]
    }]
  });

  var colorScheme = o && o.props && o.props.colorScheme;

  if ((0,utils.isNaturalNumber)(colorScheme)) {
    colorScheme = Math.max(0, Math.min(SelectColorSchemeMenu/* DEFAULT_CHART_COLOR_SCHEMES.length */.cF.length, colorScheme));
    res.attr('data-color-scheme', colorScheme + '');
  }

  return res;
};

HorizontalRankChart.prototype.dataKeys = src_BChart.prototype.dataKeys.concat(['position', 'valueName']);

HorizontalRankChart.prototype.revokeResource = function () {
  (0,DataStructure_Object/* unobservePropertyChanges */.i3)(this, this.dataKeys);
  (0,utils.revokeResource)(this.titleCtrl);
  (0,utils.revokeResource)(this.resizeCtrl);
  (0,utils.revokeResource)(this.domSignal);
  this.fixedAxisCtrl.revokeResource();

  while (this.lastChild) {
    this.lastChild.remove();
  }
};

HorizontalRankChart.prototype.addStyle = function (arg0, arg1) {
  if (arg0 === 'height') {
    if (arg1 === 'auto') {
      this.addClass('as-height-auto');
    }
  } else {
    this.removeClass('as-height-auto');
    AElement/* default.prototype.addStyle.apply */.Z.prototype.addStyle.apply(this, arguments);
  }

  return this;
};

HorizontalRankChart.prototype.computeData = function () {
  var positions = Array.isArray(this.positions) ? this.positions : [];
  this.cpData = {};
  this.cpData.min = positions.reduce(function (ac, cr) {
    return Math.min.apply(Math, [ac].concat(HorizontalRankChart_toConsumableArray(cr.ranks)));
  }, Infinity);
  this.cpData.count = positions.reduce(function (ac, cr) {
    return Math.max(ac, cr.ranks.length);
  }, 0);
  this.cpData.max = positions.reduce(function (ac, cr) {
    return Math.max.apply(Math, [ac].concat(HorizontalRankChart_toConsumableArray(cr.ranks)));
  }, -Infinity);

  if (this.cpData.min > this.cpData.max) {
    this.cpData.min = 0;
    this.cpData.max = 0;
  }

  this.cpData.max += 1;
  if (this.zeroOY) this.cpData.min = Math.min(this.cpData.min, 0);
  this.colors = this.cpData.count < 10 ? ["#FF5733", // Bright Orange
  "#33FF57", // Bright Green
  "#3357FF", // Bright Blue
  "#FF33A8", // Bright Pink
  "#FF3333", // Bright Red
  "#33FFF5", // Bright Cyan
  "#FFFF33", // Bright Yellow
  "#FF8C33", // Bright Coral
  "#33FF8C", // Bright Mint
  "#8C33FF" // Bright Purple
  ] : ["#FF5733", // Bright Orange
  "#33FF57", // Bright Green
  "#3357FF", // Bright Blue
  "#FF33A8", // Bright Pink
  "#FF3333", // Bright Red
  "#33FFF5", // Bright Cyan
  "#FFFF33", // Bright Yellow
  "#FF8C33", // Bright Coral
  "#33FF8C", // Bright Mint
  "#8C33FF", // Bright Purple
  "#FF5733", // Bright Orange
  "#33FF57", // Bright Green
  "#3357FF", // Bright Blue
  "#FF33A8", // Bright Pink
  "#FF3333", // Bright Red
  "#33FFF5", // Bright Cyan
  "#FFFF33", // Bright Yellow
  "#FF8C33", // Bright Coral
  "#33FF8C", // Bright Mint
  "#8C33FF" // Bright Purple
  ];
};

HorizontalRankChart.prototype.createOYLabel = function () {
  var positions = Array.isArray(this.positions) ? this.positions : [];
  this.$oyLabels = positions.map(function (it) {
    return VCore_({
      tag: 'text',
      attr: {
        'alignment-baseline': "middle"
      },
      child: {
        text: it.name
      }
    });
  });
  this.$oyLabelCtn.addChild(this.$oyLabels);
};

HorizontalRankChart.prototype.createPositions = function () {
  var _this2 = this;

  var positions = Array.isArray(this.positions) ? this.positions : [];
  this.$position = positions.map(function (it) {
    var elt = VCore_({
      tag: 'gcontainer'
    });

    elt.$line = VCore_({
      tag: 'path',
      style: {
        stroke: 'rgb(69, 69, 72)',
        'stroke-width': 3
      }
    });
    elt.addChild(elt.$line);
    elt.$ranks = it.ranks.map(function (r, i) {
      return VCore_({
        tag: 'gcontainer',
        "class": 'rank-chart-group',
        attr: {
          title: _this2.numberToString(r)
        },
        child: [{
          tag: 'circle',
          "class": 'vc-circle-plot',
          style: {
            fill: _this2.colors[i],
            stroke: 'black',
            strokeWidth: 2
          },
          attr: {
            r: 8,
            x: 0,
            y: 0
          }
        }]
      });
    });
    elt.addChild(elt.$ranks);
    return elt;
  });
  this.$postionCtn.clearChild().addChild(this.$position);
};

HorizontalRankChart.prototype.updateContentPosition = function () {
  var _this3 = this;

  if (!this.cpData) return;
  var i, j;
  var width = this.box.width || 0;
  var positions = Array.isArray(this.positions) ? this.positions : [];
  var y = 5;
  this.$title.attr('x', width / 2).attr('y', y);
  y += 30;
  var oyLabelWidth = this.$oyLabels.reduce(function (ac, cr) {
    return Math.max(ac, cr.getBBox().width);
  }, 0);
  oyLabelWidth = Math.ceil(oyLabelWidth);
  var spacing = 40;
  this.$body.box.y = y + 24;
  this.$body.box.x = oyLabelWidth + 10;
  this.$body.box.width = width - this.$body.box.x - 10;
  this.$oyLabelCtn.box.x = -this.$body.box.x;
  this.$axis.box.width = this.$body.box.width;
  this.$oxArrow.attr('d', 'M' + this.$axis.box.width + ' 0 m0 -5v10l6.8 -5z');
  this.$axis.box.height = spacing * this.$oyLabels.length;
  var valueNameWidth = this.$valueName.getBBox().width;
  this.$valueName.attr('x', this.$axis.box.width).attr('y', -8);
  this.$fixedContentRef.attr('y', this.$body.box.y - 24);
  this.$fixedContentRef.attr('width', this.$body.box.width + this.$body.box.x + 8);
  /**
   *
   * @type {Turtle}
   */

  var turtle = new Math_Turtle().moveTo(this.$axis.box.width, 0).hLineTo(0).vLineTo(this.$axis.box.height);
  var dx = Math.max(100, Math.floor(20 + measureArial14TextWidth(this.numberToString(this.cpData.max))));
  var sm = calBeautySegment(Math.floor((this.$axis.box.width - valueNameWidth - 10 - dx / 2) / dx), this.cpData.min, this.cpData.max + 1);
  this.cpData.sm = sm;
  dx = Math.floor((this.$axis.box.width - valueNameWidth - 10 - dx / 2) / sm.segmentCount);
  var dv = (sm.maxValue - sm.minValue) / sm.segmentCount;
  this.cpData.dx = dx;
  this.cpData.dv = dv;
  turtle.moveTo(0, 2);

  for (i = 0; i < sm.segmentCount; ++i) {
    turtle.moveBy(dx, -4);
    turtle.vLineBy(4);
  }

  this.$oxy.attr('d', turtle.getPath());
  this.$oyLabels.forEach(function (elt, i) {
    elt.attr('y', i * spacing + spacing / 2);
  });

  while (this.$oxLabelCtn.childNodes.length > sm.segmentCount + 1) {
    this.$oxLabelCtn.lastChild.remove();
  }

  while (this.$oxLabelCtn.childNodes.length < sm.segmentCount + 1) {
    this.$oxLabelCtn.addChild(VCore_({
      tag: 'text',
      style: {
        textAnchor: 'middle'
      },
      attr: {
        y: -8
      },
      child: {
        text: ''
      }
    }));
  }

  Array.prototype.forEach.call(this.$oxLabelCtn.childNodes, function (elt, i) {
    elt.firstChild.data = _this3.numberToString(sm.minValue + i * dv);
    elt.attr('x', dx * i);
  });
  /***** draw grid *******/

  turtle = new Math_Turtle();
  var oxLength = this.$axis.box.width - 5;
  turtle.moveTo(oxLength, 0);

  for (i = 0; i < positions.length; ++i) {
    turtle.moveBy(-oxLength, spacing).hLineBy(oxLength);
  }

  turtle.moveTo(0, spacing * positions.length, 0);

  for (i = 0; i < sm.segmentCount; ++i) {
    turtle.moveBy(dx, -spacing * positions.length).vLineBy(spacing * positions.length);
  }

  this.$grid.attr('d', turtle.getPath());
  this.$position.forEach(function (elt, i) {
    elt.box.y = i * spacing + spacing / 2;
    var position = positions[i];

    for (var k = 0; k < position.ranks.length; ++k) {
      elt.$ranks[k].box.x = map(position.ranks[k] - sm.minValue, 0, dv, 0, dx);
    }

    if (position.ranks.length > 0) elt.$line.attr('d', "M".concat(map(position.ranks[0] - sm.minValue, 0, dv, 0, dx), " 0 L").concat(map(position.ranks[position.ranks.length - 1] - sm.minValue, 0, dv, 0, dx), " 0"));
  }); //auto size

  this.$body.box.height = this.$axis.box.height + 10; //10px: padding button

  this.box.height = this.$body.box.y + this.$body.box.height;
  this.fixedAxisCtrl.updateContentPosition();
};

HorizontalRankChart.prototype.numberToString = function () {
  return Math_int.numberToString.apply(this, arguments);
};

HorizontalRankChart.prototype.updateContent = function () {
  this.computeData();
  this.$title.firstChild.data = this.title;
  this.$valueName.firstChild.data = this.valueName || '';
  this.createOYLabel();
  this.createPositions();
  this.fixedAxisCtrl.updateContent();
  this.updateContentPosition();
};

HorizontalRankChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  this.updateContentPosition();
};

src_VCore.install(HorizontalRankChart);
/* harmony default export */ const src_HorizontalRankChart = (HorizontalRankChart);
// EXTERNAL MODULE: ./src/style/stackedhorizontalbarchart.css
var stackedhorizontalbarchart = __webpack_require__(7399);
;// CONCATENATED MODULE: ./src/StackedHorizontalBarChart.js















/**
 * @extends SvgCanvas
 * @constructor
 */

function StackedHorizontalBarChart() {
  this.resizeCtrl = new ChartResizeController(this);
  this.titleCtrl = new ChartTitleController(this);
  this.computedData = {
    max: 0
  };
  this.$title = VCore_$('text.vc-title', this);
  /**
   *
   * @type {GContainer}
   */

  this.$keysCtn = VCore_$('g.vc-stacked-horizontal-keys-ctn', this);
  /**
   *
   * @type {GContainer}
   */

  this.$body = VCore_$('.vc-body', this);
  this.$keys = [];
  this.$oxy = VCore_$('#oxy', this);
  this.$oxArrow = VCore_$('#ox-arrow', this);
  this.$grid = VCore_$('path.vc-grid', this);
  this.$rects = [];
  /**
   *
   * @type {KeyNoteGroup}
   */

  this.$keyNoteGroup = VCore_$(KeyNoteGroup.tag, this);
  /**
   * y axis keys
   * @name keys
   * @type {string[]}
   * @memberOf StackedHorizontalBarChart#
   */

  /**
   * series data
   * @name series
   * @type {Array<{name: string, values: number[]}>}
   * @memberOf StackedHorizontalBarChart#
   */
}

StackedHorizontalBarChart.tag = 'StackedHorizontalBarChart'.toLowerCase();
StackedHorizontalBarChart.prototype.rowSpacing = 40;
StackedHorizontalBarChart.prototype.paddingContent = 10;

StackedHorizontalBarChart.prototype.numberToString = function () {
  return Math_int.numberToString.apply(this, arguments);
};

StackedHorizontalBarChart.render = function () {
  return VCore_({
    tag: svg_SvgCanvas,
    "class": ['vc-chart', 'vc-stacked-horizontal-bar-chart', 'as-height-auto'],
    child: [{
      tag: 'text',
      "class": 'vc-title',
      attr: {
        y: 15
      },
      child: {
        text: ''
      }
    }, {
      tag: KeyNoteGroup
    }, {
      tag: svg_GContainer,
      "class": 'vc-body',
      child: [{
        tag: svg_GContainer,
        "class": 'vc-stacked-horizontal-keys-ctn'
      }, {
        tag: 'path',
        "class": 'vc-grid'
      }, {
        tag: 'gcontainer',
        "class": 'vchart-axis',
        child: [{
          tag: 'path',
          id: 'oxy',
          attr: {
            d: 'm0 -1v1 h1',
            fill: 'none'
          }
        }, {
          tag: 'path',
          id: "ox-arrow",
          attr: {
            d: 'm0 -5v10l6.8 -5z'
          }
        }]
      }]
    }]
  });
};

StackedHorizontalBarChart.prototype.computeData = function () {
  var _this = this;

  var cpData = this.computedData;
  cpData.max = this.keys.reduce(function (ac, cr, i) {
    var s = _this.series.reduce(function (ac2, cr2) {
      var value = cr2.values[i];
      if (!(0,utils.isRealNumber)(value)) value = 0;
      return ac2 + value;
    }, 0);

    return Math.max(ac, s);
  }, 0);

  if (cpData.max === 0) {
    cpData.max = 1; // prevent division by zero
  }

  cpData.min = 0;
  cpData.requiredWidth = 0;
  cpData.requiredWidth = Math.max(cpData.requiredWidth, cpData.titleWidth);
  cpData.colors = (0,SelectColorSchemeMenu/* generatorColorScheme */.TD)(1, this.series.length || 10);
  this.addStyle('--vc-required-width', cpData.requiredWidth + 'px');
};

StackedHorizontalBarChart.prototype.updateKeys = function () {
  var keys = this.keys || [];
  this.$keysCtn.clearChild();
  this.$keys = this.keys.map(function (key) {
    return VCore_({
      tag: 'text',
      child: {
        text: key
      }
    });
  });
  this.$keysCtn.addChild(this.$keys);
};

StackedHorizontalBarChart.prototype.updateNotes = function () {
  var _this2 = this;

  this.$keyNoteGroup.items = this.series.map(function (it, i) {
    return {
      noteType: 'rect',
      text: it.name,
      color: it.color || _this2.computedData.colors[i]
    };
  });
};

StackedHorizontalBarChart.prototype.updateKeysPosition = function () {
  var _this3 = this;

  this.$keys.forEach(function (elt, i) {
    elt.attr('y', _this3.rowSpacing * (0.5 + i) + 7);
  });
  this.$keysCtn.box.width = this.$keysCtn.getBBox().width;
  this.$keysCtn.box.x = -this.$keysCtn.box.width - 10;
};

StackedHorizontalBarChart.prototype.updateAxisPosition = function () {
  var turtle = new Math_Turtle();
  turtle.moveTo(this.$body.box.width + 10, 0).hLineBy(-this.$body.box.width - 10).vLineBy(this.$body.box.height);
  this.$oxy.attr('d', turtle.getPath());
  this.$oxArrow.attr('d', 'M' + (this.$body.box.width + 10) + ' 0 m0 -5v10l6.8 -5z');
  turtle = new Math_Turtle();
  var i;
  var n = this.keys.length;
  var spacing = this.rowSpacing;
  var width = this.$body.box.width;
  var height = this.$body.box.height;

  for (i = 1; i <= n; ++i) {
    turtle.moveTo(0, i * spacing).hLineBy(width);
  }

  var valueWidth = 30;
  var dx = Math.max(100, Math.floor(20 + measureArial14TextWidth(this.numberToString(this.computedData.max))));
  var sm = calBeautySegment(Math.floor((this.$body.box.width - valueWidth - 10 - dx / 2) / dx), this.computedData.min, this.computedData.max + 1);
  this.computedData.sm = sm;
  dx = Math.floor((width - valueWidth - 10 - dx / 2) / sm.segmentCount);
  n = sm.segmentCount;

  for (i = 1; i <= n; ++i) {
    turtle.moveTo(i * dx, 0).vLineBy(height);
  }

  this.$grid.attr('d', turtle.getPath());
};

StackedHorizontalBarChart.prototype.makeRect = function (value, color, borderColor) {
  color = Color/* default.parse */.Z.parse(color + '');
  var hsla;

  if (!borderColor) {
    hsla = color.toHSLA();
    hsla[2] -= 0.2;
    hsla[1] -= 0.2;
    if (hsla[1] < 0) hsla[1] = 0;
    if (hsla[2] < 0) hsla[2] = 0;
    borderColor = Color/* default.fromHSL */.Z.fromHSL(hsla[0], hsla[1], hsla[2]);
  }

  var height = Math.min(20, this.rowSpacing - 10);
  var valueText = this.numberToString(value);

  var rectElt = VCore_({
    tag: svg_GContainer,
    child: [{
      tag: 'rect',
      attr: {
        x: 0,
        y: -height / 2,
        height: height,
        width: 40
      },
      style: {
        strokeWidth: 1,
        strokeColor: 'black',
        fill: color,
        stroke: borderColor.toString('hex6')
      }
    }, {
      tag: 'text',
      style: {
        fill: color.getContrastYIQ()
      },
      attr: {
        x: 0,
        y: 0,
        "text-anchor": "middle",
        'dominant-baseline': "middle"
      },
      child: {
        text: valueText
      }
    }]
  });

  rectElt.$rect = VCore_$('rect', rectElt);
  rectElt.$value = VCore_$('text', rectElt);
  rectElt.textWidth = TextMeasure/* default.measureWidth */.Z.measureWidth(valueText, TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14);
  return rectElt;
};

StackedHorizontalBarChart.prototype.updateRectangles = function () {
  this.$rects.forEach(function (elt) {
    return elt.remove();
  });
  this.$rects = [];
  var keys = this.keys || [];
  var series = this.series || [];
  var rectElt;
  var i, j;

  for (i = 0; i < keys.length; ++i) {
    for (j = 0; j < series.length; ++j) {
      rectElt = this.makeRect(series[j].values[i], series[i].color || this.computedData.colors[j]);
      this.$rects.push(rectElt);
    }
  }

  this.$body.addChild(this.$rects);
};

StackedHorizontalBarChart.prototype.updateRectanglePositions = function () {
  var sm = this.computedData.sm;
  var keys = this.keys || [];
  var series = this.series || [];
  var rectElt;
  var i, j, k;
  k = 0;
  var value, rectWidth;
  var width = this.$body.box.width;
  var s;

  for (i = 0; i < keys.length; ++i) {
    s = 0;

    for (j = 0; j < series.length; ++j) {
      value = series[j].values[i];
      rectWidth = map(value, sm.minValue, sm.maxValue, 0, width);
      rectElt = this.$rects[k];
      k++;
      if (!rectElt) continue;
      rectElt.$rect.attr('width', rectWidth);
      rectElt.$value.attr('x', rectWidth / 2);
      rectElt.box.x = map(s, sm.minValue, sm.maxValue, 0, width);
      rectElt.box.y = this.rowSpacing * (0.5 + i);

      if (rectElt.textWidth > rectWidth - 4) {
        rectElt.$value.addStyle('display', 'none');
        rectElt.attr('title', this.numberToString(value));
      } else {
        rectElt.$value.removeStyle('display');
      }

      s += value;
    }
  }
};

StackedHorizontalBarChart.prototype.updateContent = function () {
  this.pendingUpdate = false;
  this.computeData();
  this.updateKeys();
  this.updateNotes();
  this.updateRectangles();
};

StackedHorizontalBarChart.prototype.requestUpdate = function () {
  var _this4 = this;

  if (this.pendingUpdate) return;
  this.pendingUpdate = true;
  setTimeout(function () {
    _this4.updateContent();

    _this4.updateContentPosition();
  }, 1);
};

StackedHorizontalBarChart.prototype.updateContentPosition = function () {
  this.$title.attr('y', this.paddingContent + 17 + '');
  this.$title.attr('x', this.box.width / 2 + '');
  this.updateKeysPosition();
  this.$body.box.x = this.$keysCtn.box.width + this.paddingContent + 10;
  this.$body.box.width = this.box.width - this.paddingContent - this.$body.box.x - 20; //10 for arrow

  this.$keyNoteGroup.box.y = 20 + 10 + this.paddingContent;
  this.$keyNoteGroup.box.width = this.$body.box.width - 20;
  this.$keyNoteGroup.updateSize();
  this.$body.box.y = this.$keyNoteGroup.box.y + this.$keyNoteGroup.box.height + 10;
  this.$body.box.height = this.rowSpacing * this.keys.length;
  this.updateAxisPosition();
  this.updateRectanglePositions();
  this.box.height = this.$body.box.height + this.$body.box.y + this.paddingContent;
  this.addStyle('--vc-require-height', this.box.height);
};

StackedHorizontalBarChart.prototype.updateSize = function () {
  svg_SvgCanvas.prototype.updateSize.call(this);
  this.updateContentPosition();
};

StackedHorizontalBarChart.property = {};
StackedHorizontalBarChart.property.title = {
  set: function set(value) {
    this.$title.firstChild.data = (value || '') + '';
    this.computedData.titleWidth = TextMeasure/* default.measureWidth */.Z.measureWidth(this.$title.firstChild.data, TextMeasure/* default.FONT_ARIAL */.Z.FONT_ARIAL, 14);
  },
  get: function get() {
    return this.$title.firstChild.data;
  }
};
StackedHorizontalBarChart.property.series = {
  set: function set(value) {
    this._series = value || [];
    this.requestUpdate();
  },
  get: function get() {
    return this._series || [];
  }
};
StackedHorizontalBarChart.property.keys = {
  set: function set(value) {
    this._keys = value || [];
    this.requestUpdate();
  },
  get: function get() {
    return this._keys || [];
  }
};
src_VCore.install(StackedHorizontalBarChart);
/* harmony default export */ const src_StackedHorizontalBarChart = (StackedHorizontalBarChart);
;// CONCATENATED MODULE: ./src/install.js
















var VChartCreators = [src_BChart, src_VerticalChart, src_PieChart, src_AssessmentChart, src_ColumnChart, src_ColumnAreaChart, src_TinyCircleChart, src_DoughnutChart, src_SimpleColumnChart, SimplerBarChart, src_SimpleLineChart, src_HorizontalRangeChart, src_HorizontalRankChart, src_StackedHorizontalBarChart, LineChart2];
/***
 *
 * @param {Dom} core
 */

function install_install(core) {
  core.install(VChartCreators);
}
;// CONCATENATED MODULE: ./src/index.js

































install_install(src_VCore);
src_VCore.install(SelectColorSchemeMenu/* default */.ZP);
absol.Dom.ShareInstance.install(SelectColorSchemeMenu/* default */.ZP);
var src_vchart = {
  core: src_VCore,
  creator: src_VCore.creator,
  _: src_VCore._,
  $: src_VCore.$,
  buildSvg: src_VCore._,
  lambda: {
    isNumber: isNumber,
    toLocalString: toLocalString
  },
  text: helper_text,
  circle: circle,
  rect: rect,
  vline: vline,
  hline: hline,
  moveVLine: moveVLine,
  moveHLine: moveHLine,
  autoCurve: autoCurve,
  showTooltip: showTooltip,
  closeTooltip: closeTooltip,
  addDevContextMenu: addDevContextMenu
};
/* harmony default export */ const src = (src_vchart);
;// CONCATENATED MODULE: ./src/vchart.js




Object.assign(src, helper_namespaceObject);
src.tl = template_namespaceObject;

if ('absol' in window) {
  if (absol.coreDom) {
    absol.coreDom.install(Object.keys(src.creator).filter(function (e) {
      return !!e.match(/.+chart/);
    }).reduce(function (ac, cr) {
      ac[cr] = src.creator[cr];
      return ac;
    }, {}));
    install_install(absol.coreDom);
  } else {
    console.error("coreDom not found");
  }
}

window.vchart = src;
})();

/******/ })()
;

VaKeR 2022