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/formeditor/v0.0.3/absol/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/formeditor/v0.0.3/absol/absol_form.js
/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 13);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);


var Acore = new absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"]({ creator: Object.assign({}, absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].ShareInstance.creator) });


/* harmony default export */ __webpack_exports__["a"] = (Acore);

/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Element.js
var Element = __webpack_require__(6);

// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/JSPath.js
function JSPath(props) {
    this.path = props.path;
}


/** 
 * 
 * @param {Element} element 
 * @returns {Boolean}
 */
JSPath.prototype.match = function (element, query) {
    if (query.id) {
        if (!element.getAttribute || element.getAttribute('id') != query.id) return false;
    }
    if (query.tagName) {
        var matchTag = false;
        if (element._azar_extendTags && element._azar_extendTags[query.tagName]) matchTag = true;
        matchTag = matchTag || ((element.tagName || '').toUpperCase() == query.tagName.toUpperCase());
        if (!matchTag) return false;
    }
    if (query.classList)
        for (var i = 0; i < query.classList.length; ++i) {
            if (!element.classList || !element.classList.contains(query.classList[i])) return false;
        }
    if (query.attributes) {
        for (var key in query.attributes) {
            var value;
            if (element.attr) {
                value = element.attr(key);
                if (value != query.attributes[key]) return false;
            }
            else if (element.getAttribute) {
                value = element.getAttribute(key);
                if (value != query.attributes[key]) return false;
            }
        }
    }
    return true;
};

/**
 * Warning : still fail in some testcase
 */
JSPath.prototype.findFirst = function (root, onFound) {
    var queue = [{ e: root, i: 0 }];
    var current;

    while (queue.length > 0) {
        current = queue.shift();
        var isMathed = false;
        var currentElt = current.e;
        var currentI = current.i;
        if (this.match(currentElt, this.path[currentI])) {
            if (this.path[currentI].childCombinate) {
                var trackI = currentI;
                var trackElement = currentElt;
                var isTrackMatch = true;
                while (isTrackMatch && trackI > 0 && this.path[trackI].childCombinate) {
                    if (!trackElement.parentNode || !this.match(trackElement.parentNode, this.path[trackI - 1])) {
                        isTrackMatch = false;
                    }
                    else{
                        trackElement = trackElement.parentNode;
                        trackI--;
                    }
                }
                if (isTrackMatch) isMathed = true;
            }
            else {
                isMathed = true;
            }
        }


        if (isMathed && currentI + 1 == this.path.length) {
            if (!onFound || (onFound && onFound(currentElt)))
                return currentElt;
        }

        if (currentElt.childNodes) {
            var l = currentElt.childNodes.length;
            for (var i = 0; i < l; ++i) {
                if (currentElt.childNodes[i].tagName)
                    queue.push({
                        e: currentElt.childNodes[i],
                        i: currentI + (isMathed && currentI + 1 < this.path.length ? 1 : 0)
                    });
            }
        }
    }
    return undefined;
};


JSPath.prototype.findAll = function (root, onFound) {
    var res = [];
    var queue = [{ e: root, i: 0 }];
    var current;

    while (queue.length > 0) {
        current = queue.shift();
        var isMathed = false;
        var currentElt = current.e;
        var currentI = current.i;
        if (this.match(currentElt, this.path[currentI])) {
            if (this.path[currentI].childCombinate) {
                var trackI = currentI;
                var trackElement = currentElt;
                var isTrackMatch = true;
                while (isTrackMatch && trackI > 0 && this.path[trackI].childCombinate) {
                    if (!trackElement.parentNode || !this.match(trackElement.parentNode, this.path[trackI - 1])) {
                        isTrackMatch = false;
                    }
                    else{
                        trackElement = trackElement.parentNode;
                        trackI--;
                    }
                }
                if (isTrackMatch) isMathed = true;
            }
            else {
                isMathed = true;
            }
        }

        if (isMathed && currentI + 1 == this.path.length) {
            if (!onFound || (onFound && onFound(currentElt)))
                res.push(currentElt);
        }

        if (currentElt.childNodes) {
            var l = currentElt.childNodes.length;
            for (var i = 0; i < l; ++i) {
                if (currentElt.childNodes[i].tagName)
                    queue.push({
                        e: currentElt.childNodes[i],
                        i: currentI + (isMathed && currentI + 1 < this.path.length ? 1 : 0)
                    });
            }
        }
    }
    return res;
};



JSPath.__tagRegex = /((([^\s\>\(])|(\([^\)]*\)))+)|(\>)/g;
JSPath.__tagNameRegex = /^[a-zA-Z0-9\-\_]+/i;
JSPath.__classRegex = /\.[a-zA-Z0-9\-\_]+/g;
JSPath.__idRegex = /\#[a-zA-Z0-9\-\_]+/i;

JSPath.__attrRegex = /\[\s*([a-zA-Z-0-9\-]+)\s*\=\"\s*(((\\.)|([^\"]))+)\"\s*\]/g;
JSPath.__attrParseRegex = /\[\s*([a-zA-Z-0-9\-]+)\s*\=\"\s*(((\\.)|([^\"]))+)\"\s*\]/i;


JSPath.parseQuery = function (s) {
    var tag = {};
    var classList = s.match(this.__classRegex);
    var idList = s.match(this.__idRegex);
    var tagList = s.match(this.__tagNameRegex);
    var attributeList = s.match(this.__attrRegex);
    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) });
    }
    var attrParseRegex = this.__attrParseRegex;
    if (attributeList && attributeList.length > 0) {
        tag.attributes = attributeList.reduce(function (ac, s) {
            var tokens = s.match(attrParseRegex);
            var key = tokens[1];
            var value = tokens[2];
            ac[key] = value;
            return ac;
        }, {});
    }
    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 */ var HTML5_JSPath = (JSPath);
// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(2);

// CONCATENATED MODULE: ./node_modules/absol/src/String/getFunctionName.js
/**
 * 
 * @param {Function} func 
 */
function getFunctionName(func) {
    var ret = func.toString();
    ret = ret.substr('function '.length);
    ret = ret.substr(0, ret.indexOf('('));
    return ret;
}
// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Dom.js







function Dom(option) {
    option = option || {};
    this.creator = option.creator || {};


    this.creator.__svg__ = 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(Element["a" /* default */].prototype);
        Object.defineProperties(element, prototypes);
        Element["a" /* default */].call(element);
        return element;
    };

    Object.defineProperty(this.creator, 'svg', {
        set: function () {
            console.error(new Error());
        },
        get: function () {
            return this.__svg__;
        }
    });

    this.$ = this.selectAttacth.bind(this);
    this._ = this.create.bind(this);
    this.buildDom = this._;
    this.defaultTag = 'div';
}


Dom.prototype.fromCode = function (code) {
    code = code.trim().replace(/>\s+</gm, '><');
    var temTag = 'div';
    if (code.startsWith('<td')) temTag = 'tr';
    if (code.startsWith('<tr')) temTag = 'tbody';
    var tempDiv = document.createElement(temTag);
    tempDiv.innerHTML = code;
    var element = tempDiv.childNodes[0];
    var prototypes = Object.getOwnPropertyDescriptors(Element["a" /* default */].prototype);
    Object.defineProperties(element, prototypes);
    Element["a" /* default */].call(element);
    return element;
};


/**
 * DFS
 * @param {string} query 
 * @param {Element} root 
 * @param {function} onFound - return true to stop find 
 */
Dom.prototype.selectAttacth = 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;
};


/**
 * DFS
 * @param {string} query 
 * @param {Element} root 
 * @param {function} onFound - return true to stop find 
 */
Dom.prototype.select = function (query, root, onFound) {
    root = root || document.documentElement;
    var matcher = HTML5_JSPath.compileJSPath(query);
    return matcher.findFirst(root, onFound);
};

/**
 * 
 * @param {Element} element 
 */
Dom.prototype.attach = function (element) {
    if (typeof element.attr == 'function') return;
    var prototypes = Object.getOwnPropertyDescriptors(Element["a" /* default */].prototype);
    Object.defineProperties(element, prototypes);
    Element["a" /* default */].call(element);
};


Dom.prototype.makeNewElement = function (tagName) {
    return document.createElement(tagName);
};

Dom.prototype.makeNewTextNode = function (data) {
    return document.createTextNode(data);
};



/**
 * 
 * @param {Object} option
 * @returns {Element} 
 */
Dom.prototype.create = function (option, isInherited) {
    var res;
    var prototype;
    var property;
    var attribute;
    if (Dom.isDomNode(option)) {
        res = option;
        option = {};
        isInherited = true;
    }
    else if (typeof option == 'string') {
        option = option.trim();
        if (option[0] == '<') {

            option = option.trim();
            res = this.fromCode(option);
            option = {};
        }
        else {
            var queryObj = HTML5_JSPath.parseQuery(option);
            option = {};
            option.tag = queryObj.tagName || this.defaultTag;
            if (queryObj.classList && queryObj.classList.length > 0)
                option.class = queryObj.classList;
            if (queryObj.id) option.id = queryObj.id;
            if (queryObj.attributes) option.attr = queryObj.attributes;

            if (!this.creator[option.tag]) {
                res = this.makeNewElement(option.tag);
                option.data && Object.assign(res, option.data);
            }
            else {
                res = this.creator[option.tag](option.data);
                res._azar_extendTags = res._azar_extendTags || {};
                res._azar_extendTags[option.tag] = true;
                prototype = this.creator[option.tag].prototype;
                property = this.creator[option.tag].property;
                attribute = this.creator[option.tag].attribute;

            }
        }
    } else {
        option = option || {};
        if (typeof (option.text) == 'string') {//is textNode
            return this.makeNewTextNode(option.text);
        }
        else {
            option.tag = option.tag || this.defaultTag;
            if (!this.creator[option.tag]) {
                res = this.makeNewElement(option.tag);
                option.data && Object.assign(res, option.data);
            }
            else {
                res = this.creator[option.tag](option.data);
                res._azar_extendTags = res._azar_extendTags || {};
                res._azar_extendTags[option.tag] = true;
                prototype = this.creator[option.tag].prototype;
                property = this.creator[option.tag].property;
                attribute = this.creator[option.tag].attribute;
            }
        }
    }
    this.attach(res);
    if (property) {
        Object.defineProperties(res, property);
    }
    if (prototype) {
        OOP["a" /* default */].extends(res, prototype);
    }
    if (attribute) {
        res.defineAttributes(attribute);
    }
    option.attr && res.attr(option.attr);
    option.extendEvent && res.defineEvent(option.extendEvent);
    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);
    //todo:attach option
    if (option.child) {
        option.child = option.child instanceof Array ? option.child : [option.child];
        for (var i = 0; i < option.child.length; ++i) {
            res.addChild(this.create(option.child[i]));
        }
    }

    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 = getFunctionName(arg0) || arg0.name;
            if (name) {
                this.creator[name.toLowerCase()] = arg0;
            }
            else {
                console.error('No ident name of creator function', arg0);
            }
        }
        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 if (arg0 instanceof Array) {
            arg0.forEach(function (func) {
                var name = getFunctionName(func) || func.name;
                if (name) {
                    _this.creator[name.toLowerCase()] = func;
                }
            });
        }
        else {
            console.error('Unknow data', arg0);
        }
    } else if (arguments.length == 2) {
        if (arg0 instanceof Array) {
            arg0.forEach(function (key) {
                if (key.match(arg0)) {
                    var func = arg1[key];
                    if (typeof (func) == 'function')
                        if (_this.create[key] != func)
                            _this.create[key] = func;
                }
            });
        }
        else if (arg0 instanceof RegExp) {
            Object.keys(arg1).forEach(function (key) {
                if (key.match(arg0)) {
                    var func = arg1[key];
                    if (typeof (func) == 'function')
                        if (_this.create[key] != func)
                            _this.create[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 {*} o 
 * @returns {Boolean}
 */
Dom.isDomNode = function (o) {
    return (
        typeof Node === "object" ? o instanceof Node :
            o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string"
    );
};


/**
 * @param {HTMLElement} element
 */
Dom.activeFullScreen = function (element) {
    if (element.requestFullscreen) {
        element.requestFullscreen();
    } else if (element.mozRequestFullScreen) {
        element.mozRequestFullScreen();
    } else if (element.webkitRequestFullscreen) {
        element.webkitRequestFullscreen(Element["a" /* default */].ALLOW_KEYBOARD_INPUT);
    } else if (element.msRequestFullscreen) {
        element.msRequestFullscreen();
    }
};





Dom.deactiveFullScreen = function () {
    if (document.exitFullscreen) {
        document.exitFullscreen();
    } else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
    } else if (document.webkitExitFullscreen) {
        document.webkitExitFullscreen();
    } else if (document.msExitFullscreen) {
        document.msExitFullscreen();
    }
};

Dom.isFullScreen = function () {
    var fullScreenElement = document.fullscreenElement ||
        document.webkitFullscreenElement ||
        document.mozFullScreenElement ||
        document.msFullscreenElement;
    return !!fullScreenElement;
};



/**
 * @param {HTMLElement} element
 * @returns {ClientRect}
 */
Dom.traceOutBoundingClientRect = function (current) {
    var screenSize = Dom.getScreenSize();
    var left = 0;
    var right = screenSize.width;
    var top = 0;
    var bottom = screenSize.height;
    while (current) {

        var ox = Element["a" /* default */].prototype.getComputedStyleValue.call(current, 'overflow-x') != "visible";
        var oy = Element["a" /* default */].prototype.getComputedStyleValue.call(current, 'overflow-y') != "visible";
        var isHtml = current.tagName.toLowerCase() == 'html';
        if (ox || oy || isHtml) {
            var bound = current.getBoundingClientRect();
            if (ox || isHtml) {
                left = Math.max(left, bound.left);
                right = Math.min(right, bound.right);
            }
            if (oy || isHtml) {
                top = Math.max(top, bound.top);
                bottom = Math.min(bottom, bound.bottom);
            }
        }

        if (isHtml) break;
        current = current.parentElement;
    }
    return { left: left, right: right, top: top, bottom: bottom, width: right - left, height: bottom - top };
};


Dom.fontFaceIsLoaded = function (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);
                    }, 10);
            }
            check(timeout);
        });
    });
};


Dom.getScreenSize = function () {
    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.waitImageLoaded = function (img) {
    var isLoaded = true;
    if (!img.complete) {
        isLoaded = false;
    }
    if (img.naturalWidth === 0) {
        isLoaded = false;
    }
    if (isLoaded) return Promise.resolve();
    return new Promise(function (rs) {
        if (img.addEventListener) {
            img.addEventListener('load', rs, false);
        }
        else {
            img.attachEvent('onload', rs, false);
        }
        setTimeout(5000, rs);
    });
    // No other way of checking: assume it’s ok.
};

Dom.imageToCanvas = function (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("Element must be image");
    }
};


Dom.ShareInstance = new Dom();




Dom.scrollWidthPromise;

Dom.documentReady = new Promise(function (resolve) {
    if (document.body) {
        resolve();
    }
    else {
        window.addEventListener("load", resolve);
    }
});

Dom.getScrollSize = function () {
    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.lastResizeTime = 0;

Dom.ResizeSystemElts = [];

Dom.ResizeSystemCacheElts = undefined;

Dom.removeResizeSystemTrash = function () {
    Dom.ResizeSystemElts = Dom.ResizeSystemElts.filter(function (element) {
        return Element["a" /* default */].prototype.isDescendantOf.call(element, document.body);
    });
};

Dom.addToResizeSystem = function (element) {
    for (var i = 0; i < Dom.ResizeSystemElts.length; ++i)
        if (Element["a" /* default */].prototype.isDescendantOf.call(element, Dom.ResizeSystemElts[i])) {
            return false;
        }
    Dom.ResizeSystemElts = Dom.ResizeSystemElts.filter(function (e) {
        return !Element["a" /* default */].prototype.isDescendantOf.call(e, element);
    });
    Dom.ResizeSystemElts.push(element);
    return true;
};

Dom.updateResizeSystem = function () {
    var now = new Date().getTime();
    if (now - 100 > Dom.lastResizeTime) {
        Dom.removeResizeSystemTrash();
        Dom.ResizeSystemCacheElts = undefined;
    }

    Dom.lastResizeTime = now;
    function visitor(child) {

        if (typeof child.requestUpdateSize == 'function') {
            child.requestUpdateSize();
            return true;
        }
        else if (typeof child.updateSize == 'function') {
            child.updateSize();
            return true;
        }
        else if (typeof child.onresize == 'function') {
            child.onresize();
            return true;
        }
    }
    if (Dom.ResizeSystemCacheElts === undefined) {
        Dom.ResizeSystemCacheElts = [];
        Dom.ResizeSystemElts.forEach(function (e) {
            Dom.ShareInstance.$('', e, function (child) {
                if (visitor(child))
                    Dom.ResizeSystemCacheElts.push(child);
            });
        });

    }
    else {
        Dom.ResizeSystemCacheElts.forEach(visitor);
    }
};

window.addEventListener('resize', Dom.updateResizeSystem);


/***
 * if this element is attached, error event will be fired
 * @returns {HTMLElement}
 * 
 */
Dom.ShareInstance.creator.attachhook = function () {
    var res = Dom.ShareInstance._({
        tag: 'img',
        class: 'absol-attachhook',
        style: {
            display: 'none'
        },
        attr: {
            src: ''
        }
    });
    return res;
};



/* harmony default export */ var HTML5_Dom = __webpack_exports__["a"] = (Dom);

/***/ }),
/* 2 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
var OOP =  {};

/**
 * @param {Object} object
 * @param {Sttring} key
 * @param {Function} method
*/
OOP.overideMethod = function (object, key, method) {
    if (object[key] === undefined) object[key] = method;
    else {
        var _superMethod = object[key];
        object[key] = (function (_superMethod, method) {
            return function () {
                var _super = this.super;
                this.super = _superMethod;
                var result = method.apply(this, arguments);
                this.super = _super;
                return result;
            };

        })(_superMethod, method);
    }
};
 

OOP.extends = function (object, prototype) {
    // do not use setter, getter
    for (var key in prototype) {
        if (key != 'constructor' && (typeof prototype[key] == 'function'))
            OOP.overideMethod(object, key, prototype[key]);
    }
};

OOP.inherit = function (child, parent) {
    // do not use setter, getter

    Object.keys(parent).forEach(function (key) {
        if (key != 'constructor' && (typeof parent[key] == 'function')) {
            var superMethod = parent[key];
            var currentMethod = child[key];
            if (!currentMethod) child[key] = superMethod;
            else {
                child[key] = function () {
                    var _super = this.super;
                    this.super = superMethod;
                    var result = currentMethod.apply(this, arguments);
                    this.super = _super;
                    return result;
                };
            }
        }
    });
};





OOP.drillProperty = function (topObject, botObject, keyTop, keyBot) {
    if (typeof (keyTop) == 'string') {
        keyBot = keyBot || keyTop;
        Object.defineProperty(topObject, keyTop, {
            set: function (value) {
                botObject[keyBot] = value;
            },
            get: function () {
                return botObject[keyBot];
            }
        });
    }
    else {
        if (keyTop instanceof Array) {
            for (var i = 0; i < keyTop.length; ++i) {
                OOP.drillProperty(topObject, botObject, keyTop[i], keyTop[i]);
            }
        }
        else {
            for (var key in keyTop) {
                OOP.drillProperty(topObject, botObject, key, keyTop[key]);
            }
        }
    }
};

OOP.bindFunctions = function (_this, handlers) {
    var res = {};
    for (var key in handlers) {
        res[key] = handlers[key].bind(_this);
    }
    return res;
};




OOP.inheritCreator = function (parent, child) {
    var i;
    if (child.property) {
        if (parent.property) {
            for (i in parent.property) {
                if (!child.property[i]) child.property[i] = parent.property[i];
            }
        }
    }
    for (i in parent.prototype) {
        if (!child.prototype[i]) {
            child.prototype[i] = parent.prototype[i];
        }
        else {
            child.prototype[i] = (function (superFunction, childFunction) {
                return function () {
                    var _super = this.super;
                    this.super = superFunction;
                    var result = childFunction.apply(this, arguments);
                    this.super = _super;
                    return result;
                };
            })(parent.prototype[i], child.prototype[i]);
        }
    }
};

/* harmony default export */ __webpack_exports__["a"] = (OOP);

/***/ }),
/* 3 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
function EventEmitter() {
    this._azar_extendEvents = this._azar_extendEvents || { supported: {}, prioritize: {}, nonprioritize: {} };
    this.__azar_force = !(typeof Node === "object" ? this instanceof Node : this && typeof this === "object" && typeof this.nodeType === "number" && typeof this.nodeName === "string");

}



EventEmitter.prototype.defineEvent = function (name) {
    if (name instanceof Array) {
        for (var i = 0; i < name.length; ++i)
            this._azar_extendEvents.supported[name[i]] = true;
    }
    else
        this._azar_extendEvents.supported[name] = true;
    return this;
};

EventEmitter.prototype.isSupportedEvent = function (name) {
    return this.__azar_force || !!this._azar_extendEvents.supported[name];
};


EventEmitter.prototype.emit = function (eventName, data) {
    this.fire.apply(this, arguments);
};

EventEmitter.prototype.fire = function (eventName, data) {
    var others = Array.prototype.slice.call(arguments, 1);
    if (this.isSupportedEvent(eventName)) {
        var listenerList;
        var i;
        if (this._azar_extendEvents.prioritize[eventName]) {
            listenerList = this._azar_extendEvents.prioritize[eventName].slice();
            for (i = 0; i < listenerList.length; ++i) {
                try {
                    listenerList[i].wrappedCallback.apply(this, others);
                }
                catch (e) {
                    console.error(e);
                }
            }
        }

        if (this._azar_extendEvents.nonprioritize[eventName]) {
            listenerList = this._azar_extendEvents.nonprioritize[eventName].slice();
            for (i = 0; i < listenerList.length; ++i) {
                try {
                    listenerList[i].wrappedCallback.apply(this, others);
                }
                catch (e) {
                    console.error(e);
                }
            }
        }
    }
    else {
        if (this.dispatchEvent) {
            var event = new Event(eventName);
            data && Object.assign(event, data);
            this.dispatchEvent(event);
        } else
            throw new Error("Not support event " + eventName);
    }
    return this;
};



EventEmitter.prototype.eventEmittorOnWithTime = function (isOnce, arg0, arg1, arg2) {
    if (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 (data) {
                        event.callback.call(this, data);
                        this.off(event.eventName, event.wrappedCallback, event.cap);
                    };
                }
                else {
                    event.wrappedCallback = event.callback;
                }

                if (!this.isSupportedEvent(arg0)) {
                    if (this.addEventListener) {
                        this.addEventListener(arg0, event.wrappedCallback, !!arg2);
                    }
                    else {
                        this.attachEvent('on' + arg0, arg1, !!arg2);
                    }
                }

                eventArr.push(event);
                this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = eventArr;
            }
            else {
                console.warn("dupplicate event");
            }

        }
        return this;
    }
};



EventEmitter.prototype.on = function (arg0, arg1, arg2) {
    this.eventEmittorOnWithTime(false, arg0, arg1, arg2);
    return this;
};


EventEmitter.prototype.once = function (arg0, arg1, arg2) {
    this.eventEmittorOnWithTime(true, arg0, arg1, arg2);
    return this;
};

EventEmitter.prototype.off = function (arg0, arg1, arg2) {
    if (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.call);
                        }
                        else {
                            this.detachEvent('on' + event.eventName, event.wrappedCallback, !!event.call);
                        }
                    }
                }
                else {
                    newEventArray.push(event);
                }
            }
            this._azar_extendEvents[arg2 ? 'prioritize' : 'nonprioritize'][arg0] = newEventArray;
            return this;
        }
    }

};



EventEmitter.isMouseRight = function (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;
};

EventEmitter.hitElement = function (element, event) {
    var current = event.target;
    while (current) {
        if (current == element) return true;
        current = current.parentElement;
    }
    return false;
};

EventEmitter.copyEvent = function (event, props) {
    var result = {};
    Object.assign(result, event);
    for (var key in result) {
        if (typeof result[key] == 'function') {
            result[key] = result[key].bind(event);
        }
    }

    if (props)
        Object.assign(result, props);
    return result;
};


EventEmitter.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 */ __webpack_exports__["a"] = (EventEmitter);

/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

"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 + ' */';
}

/***/ }),
/* 5 */
/***/ (function(module, 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__(16);

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


/***/ }),
/* 6 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* harmony import */ var _EventEmitter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3);
/* harmony import */ var _Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(10);
/* harmony import */ var _String_stringFormat__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7);





function Element() {
    _EventEmitter__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].call(this);
    this._azar_extendAttributes = this._azar_extendAttributes || {};
}

Object.defineProperties(Element.prototype, Object.getOwnPropertyDescriptors(_EventEmitter__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].prototype));
Element.prototype.init = function (props) {
    Object.assign(this, props || {});
};

/**
 * @typedef {Object} AttributeDefiner
 * @property {Function} set
 * @property {Function} get
 * @property {Function} remove
 * 
 * @param {String} key
 * @param {AttributeDefiner} def
 */
Element.prototype.defineAttribute = function (key, def) {
    this._azar_extendAttributes[key] = def;
};


Element.prototype.defineAttributes = function (defs) {
    for (var key in defs) {
        this.defineAttribute(key, defs[key]);
    }
};

Element.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;
};


Element.prototype.addStyle = function (arg0, arg1) {
    if (typeof arg0 == 'string')
        this.style[Object(_String_stringFormat__WEBPACK_IMPORTED_MODULE_2__[/* kebabCaseToCamelCase */ "a"])(arg0)] = arg1;
    else {
        for (var key in arg0)
            this.addStyle(key, arg0[key]);
    }
    return this;
};

Element.prototype.removeStyle = function (arg0) {
    var key;
    if (typeof arg0 == 'string') {
        key = Object(_String_stringFormat__WEBPACK_IMPORTED_MODULE_2__[/* kebabCaseToCamelCase */ "a"])(arg0);
        this.style[key] = null;
        delete this.style[key];
    }
    else {
        if (typeof arg0 instanceof Array) {
            for (var i = 0; i < arg0.length; ++i)
                this.removeStyle(arg0[i]);
        }
        else {
            for (key in arg0)
                this.removeStyle(key);
        }
    }
    return this;
};



Element.prototype.addChild = function (child) {
    if (child instanceof Array) {
        for (var i = 0; i < child.length; ++i)
            this.appendChild(child[i]);
    }
    else
        this.appendChild(child);
    return this;
};


Element.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;
};


Element.prototype.selfRemove = function () {
    if (this.parentElement)
        this.parentElement.removeChild(this);
    return this;
};



Element.prototype.selfReplace = function (newNode) {
    if (this.parentElement)
        this.parentElement.replaceChild(newNode, this);
    return this;
};

Element.prototype.clearChild = function () {
    while (this.firstChild) {
        this.removeChild(this.firstChild);
    }
    return this;
};

/**
 * 
 * @param {string} className 
 * @returns {Boolean}
 */
Element.prototype.containsClass = function (className) {
    if (className instanceof Array) {
        for (var i = 0; i < className.length; ++i)
            if (!this.classList.containsClass(className[i])) return false;
        return true;
    }
    else
        return this.classList.contains(className);
};

/**
 * 
 * @param {string} className 
 * @returns {Element}
 */
Element.prototype.addClass = function (className) {
    if (className instanceof Array) {
        for (var i = 0; i < className.length; ++i)
            this.classList.add(className[i]);
    }
    else
        this.classList.add(className);
    return this;
};

/**
 * 
 * @param {string} className 
 * @returns {Element}
 */
Element.prototype.removeClass = function (className) {
    if (className instanceof Array) {
        for (var i = 0; i < className.length; ++i)
            this.classList.remove(className[i]);
    }
    else
        this.classList.remove(className);
    return this;
};



Element.prototype.getComputedStyleValue = function (key) {
    return window.getComputedStyle(this).getPropertyValue(key);

};

Element.prototype.getFontSize = function () {
    return parseFloat(this.getComputedStyleValue('font-size').replace('px', ''));
};


Element.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;
};

Element.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;
};

Element.prototype.addChildBefore = function (newItem, bf) {
    this.insertBefore(newItem, bf);
    return this;
};

Element.prototype.addChildAfter = function (newItem, at) {
    var bf = this.findChildAfter(at);
    if (bf) return this.addChildBefore(newItem, bf);
    return this.addChild(newItem);
};

/**
 * @returns {DOMRect}
 */
Element.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;
};


Element.prototype.isDescendantOf = function (parent) {
    var child = this;
    while (child) {
        if (child == parent) return true;
        child = child.parentNode;
    }
    return false;
};


/*************************** **********************/
Element.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
        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;
};



/***
 * WARNING: this function may be unsafe
 */
Element.prototype.afterAttached = function (frameTimeOut) {
    if (!frameTimeOut) frameTimeOut = 25;
    // var tracer = new Error();
    var current = this;
    return new Promise(function (resolve, reject) {
        var delayTime = 0;
        function trace() {
            if (frameTimeOut < 0) {
                // reject(tracer);
                // if (absol.BUILD && absol.BUILD.version == "DEBUG")
                //     console.warn("Element not attached", trace);
            }
            else {
                frameTimeOut--;
                while (true) {
                    if (current == document.body) {
                        resolve();
                        return;
                    }
                    else {
                        if (current.parentNode) {
                            current = current.parentNode;
                        } else {
                            if (delayTime < 25)
                                delayTime += 1;
                            else if (delayTime < 100) {
                                delayTime += 5;
                            }
                            else
                                if (delayTime < 1000) {
                                    delayTime += 10;
                                }

                            setTimeout(trace, delayTime);
                            return;
                        }
                    }
                }
            }
        }
        setTimeout(trace, 0);
    });
};



/***
 * WARNING: this function may be unsafe
 */
Element.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 = Element.prototype.on;
    if (_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].isSafari && !_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].isMobile) {
        Element.prototype.on = function () {
            if (!this.isSupportedEvent('mouseleave') && arguments[0] == 'mouseleave') {
                this.defineEvent('mouseleave');
                var mouseLeaveEventHandler = function (event) {
                    var bound = this.getBoundingClientRect();
                    var ok = false;
                    ok |= event.clientX < bound.left + 1;
                    ok |= event.clientX >= bound.right - 1;
                    ok |= event.clientY < bound.top + 1;
                    ok |= event.clientY >= bound.bottom - 1;
                    if (ok) this.emit('mouseleave', event);
                };
                this.addEventListener('mouseleave', mouseLeaveEventHandler, true);
            }
            origin.apply(this, arguments);
            return this;
        };
    }

    if (_Detector_BrowserDetector__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].isFirefox) {
        Element.prototype.on = function () {
            if (!this.isSupportedEvent('wheel') && arguments[0] == 'wheel') {

                this.defineEvent('wheel');
                var wheelEventHandler = function (oldEvent) {
                    //clone event to avoid some lib fix it
                    var event = oldEvent.absolEvent;
                    if (!event) {
                        event = Object.assign({}, oldEvent);
                        for (var i = 0; i < Element.eventProperties.length; ++i) {
                            var key = Element.eventProperties[i];
                            if (typeof (event[key]) == 'function') {
                                event[key] = event[key].bind(oldEvent);
                            }
                        }

                        event.preventDefault = function () {
                            oldEvent.preventDefault();
                        };
                        if (!event.mozFixWheelScale) {
                            event.mozDeltaY = oldEvent.deltaY;
                            event.mozFixWheelScale = true;
                            Object.defineProperty(event, 'deltaY', { get: function () { return this.mozDeltaY * 100 / 3; } });
                        }
                        oldEvent.absolEvent = event;
                    }
                    this.emit('wheel', event);
                };
                this.addEventListener('wheel', wheelEventHandler);
            }
            origin.apply(this, arguments);
            return this;
        };
    }

}());

Element.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 */ __webpack_exports__["a"] = (Element);

/***/ }),
/* 7 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* unused harmony export wrapToLines */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return nonAccentVietnamese; });
/* unused harmony export pascalCaseToCamelCase */
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return kebabCaseToCamelCase; });
/* unused harmony export underScoreToCamelCase */
/* unused harmony export camelCaseToPascalCase */
/* unused harmony export underScoreToPascalCase */
/* unused harmony export kebabCaseToPascalCase */
/* unused harmony export pascalCaseToKebabCase */
/* unused harmony export camelCaseToKebabCase */
/* unused harmony export underScoreToKebabCase */
/* unused harmony export pascalCaseToUnderScore */
/* unused harmony export pascalCaseToUpperUnderScore */
/* unused harmony export camelCaseToUnderScore */
/* unused harmony export camelCaseToUpperUnderScore */
/* unused harmony export kebabCaseToUnderScore */
/* unused harmony export kebabCaseToUpperUnderScore */
/**
 * 
 * @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;
}

function nonAccentVietnamese(s) {
    return s.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a")
        .replace(/À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ/g, "A")
        .replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e")
        .replace(/È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ/g, "E")
        .replace(/ì|í|ị|ỉ|ĩ/g, "i")
        .replace(/Ì|Í|Ị|Ỉ|Ĩ/g, "I")
        .replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o")
        .replace(/Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ/g, "O")
        .replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u")
        .replace(/Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ/g, "U")
        .replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y")
        .replace(/Ỳ|Ý|Ỵ|Ỷ|Ỹ/g, "Y")
        .replace(/đ/g, "d")
        .replace(/Đ/g, "D")
        .replace(/\u0300|\u0301|\u0303|\u0309|\u0323/g, "")
        .replace(/\u02C6|\u0306|\u031B/g, "");
}




/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function pascalCaseToCamelCase(s) {
    return s.substr(0, 1).toLowerCase() + s.substr(1);
}

/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function kebabCaseToCamelCase(s) {
    return s.replace(/-+([^-])/g, function (full, c) {
        return c.toUpperCase();
    });
}

/**
 * 
 * @param {String} s 
 * @returns {String} 
 */
function underScoreToCamelCase(s) {
    return s.replace(/(_+)?([^_]+)/g, function (full, underscore, word) {
        if (underscore) {
            if (word) {
                return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
            }
            else return '';
        }
        else {
            return word.toLowerCase();
        };
    });
}


/**
 * 
 * @param {String} s 
 * @returns {String} 
 */
function camelCaseToPascalCase(s) {
    return s.substr(0, 1).toUpperCase() + s.substr(1);
}

/**
 * 
 * @param {String} s 
 * @returns {String} 
 */
function underScoreToPascalCase(s) {
    return s.replace(/(_+|^)?([^_]+)/g, function (full, underscore, word) {
        return word.substr(0, 1).toUpperCase() + word.substr(1).toLowerCase();
    });
}


/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function kebabCaseToPascalCase(s) {
    return s.replace(/(-+|^)([^-])/g, function (full, u, c) {
        return c.toUpperCase();
    });
}


/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function pascalCaseToKebabCase(s) {
    return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '-' + full.toLowerCase()
    });
}

/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function camelCaseToKebabCase(s) {
    return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '-' + full.toLowerCase()
    });
}

/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function underScoreToKebabCase(s) {
    return s.replace(/(^|_+)([^_]+)/g, function (full, score, word, index) {
        if (index == 0)
            return word.toLowerCase();
        return '-' + word.toLowerCase()
    });
}



/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function pascalCaseToUnderScore(s) {
    return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '_' + full.toLowerCase()
    });
}

/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function pascalCaseToUpperUnderScore(s) {
    return s.replace(/[A-Z][^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toUpperCase();
        return '_' + full.toUpperCase()
    });
}


/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function camelCaseToUnderScore(s) {
    return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toLowerCase();
        return '_' + full.toLowerCase()
    });
}
/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function camelCaseToUpperUnderScore(s) {
    return s.replace(/(^|[A-Z])[^A-Z]*/g, function (full, index) {
        if (index == 0)
            return full.toUpperCase();
        return '_' + full.toUpperCase()
    });
}

/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function kebabCaseToUnderScore(s) {
    return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) {
        if (index == 0) return word.toLowerCase();
        return '_' + word.toLowerCase()
    });
}



/**
 * 
 * @param {String} s
 * @returns {String} 
 */
function kebabCaseToUpperUnderScore(s) {
    return s.replace(/(-+|^)([^-]+)/g, function (full, u, word, index) {
        if (index == 0) return word.toUpperCase();
        return '_' + word.toUpperCase()
    });
}



String.nonAccentVietnamese = nonAccentVietnamese;

String.prototype.nonAccentVietnamese = function () {
    return String.nonAccentVietnamese(this);
};

/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(91);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 9 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _ACore__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
/* harmony import */ var absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);



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

var originSetTimeout = setTimeout;
var originClearTimeout = setTimeout;
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);
    global.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(global, args)
        pendingTimeout++;
        timeoutDict[timeoutId] = true;

        DebugTask.$view.timeout = pendingTimeout;

        return timeoutId;
    }

    global.clearTimeout = function (timeoutId) {
        var args = Array.prototype.map.call(arguments, function (x) { return x; });
        if (timeoutDict[timeoutId]) {
            pendingTimeout--;
            delete timeoutDict[timeoutId];
            DebugTask.$view.timeout = pendingTimeout;
        }
        return originClearTimeout.apply(global, args);

    };


    global.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(global, args)
        pendingInterval++;
        intervalDict[intervalId] = true;

        DebugTask.$view.interval = pendingInterval;

        return intervalId;
    }

    global.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(global, args);

    };

    absol_src_HTML5_Dom__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"].documentReady.then(function () {
        DebugTask.$view.addTo(document.body);
    });
};

_ACore__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"].install('debugtask', DebugTask);



/* harmony default export */ __webpack_exports__["a"] = (DebugTask);


/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))

/***/ }),
/* 10 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _BrowserRules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12);
/* harmony import */ var _BrowserRules__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_BrowserRules__WEBPACK_IMPORTED_MODULE_0__);



/**
 * 
 * @param {BrowserRules} rulesheet 
 */
function BrowserDetector(rulesheet) {
    this.au = global.navigator ? (navigator.userAgent || '') : '';
    this.rulesheet = rulesheet;
    this.os = this.detectByRules(this.rulesheet.os);
    this.device = this.detectByRules(this.rulesheet.device);
    this.engine = this.detectByRules(this.rulesheet.engine);
    this.browser = this.detectByRules(this.rulesheet.browser);
    this.isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
    this.isCococ = navigator.userAgent.toLowerCase().indexOf('coc_coc_browser') >= 1;
    this.isSafari = !this.isCococ && navigator.userAgent.toLowerCase().indexOf('safari') > -1 && navigator.userAgent.toLowerCase().indexOf('win') < 0 &&navigator.userAgent.toLowerCase().indexOf('android')<0;
    this.isMobile = navigator.userAgent.indexOf('KFFOWI') > -1 || navigator.userAgent.toLowerCase().indexOf('mobile') > -1;
}



BrowserDetector.prototype.detectByRules = function (rules) {
    var result = {};
    for (var i = 0; i < rules.length; ++i) {
        var os = rules[i];
        var type = os[0];
        var rgx = os[1];
        if (typeof (rgx) == 'function') {
            rgx = rgx(this.au.toLowerCase());
        }
        if (Object.prototype.toString.call(rgx).indexOf('RegExp')) {
            var matched = this.au.toLowerCase().match(rgx);
            if (matched) {
                result.type = type;
                if (matched[1]) {
                    result.version = matched[1];
                }
                break;
            }
        }
        else if (typeof (rgx) == 'string') {
            if (this.au.toLowerCase().indexOf(rgx) >= 0) {
                result.type = type;
            }
        }
    }
    return result;

};




/* harmony default export */ __webpack_exports__["a"] = (new BrowserDetector(_BrowserRules__WEBPACK_IMPORTED_MODULE_0___default.a));

/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))

/***/ }),
/* 11 */
/***/ (function(module, exports) {

var g;

// This works in non-strict mode
g = (function() {
	return this;
})();

try {
	// This works if eval is allowed (see CSP)
	g = g || new Function("return this")();
} catch (e) {
	// This works if the window reference is available
	if (typeof window === "object") g = window;
}

// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}

module.exports = g;


/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
/* WEBPACK VAR INJECTION */(function(global) {

const external = global.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"],
    ["windowsce", /\bwindows ce(?: ([0-9.]+))?/],
    ["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 global && "CSS" in global && /\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.]+)/],
    ["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\b/],
    ["firefox", /\bfirefox\/([0-9.ab]+)/],
    ["nokia", /\bnokiabrowser\/([0-9.]+)/]
];

module.exports = {
    device: DEVICES,
    os: OS,
    browser: BROWSER,
    engine: ENGINE,
    re_msie: re_msie,
};
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(11)))

/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

module.exports = __webpack_require__(104);


/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(15);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".as-center-table {\r\n    display: table;\r\n}\r\n\r\n.as-center-cell {\r\n    display: table-cell;\r\n}\r\n\r\n.as-relative-layout {\r\n    position: relative;\r\n}\r\n\r\n.as-relative-layout>.as-relative-anchor-box {\r\n    position: absolute;\r\n    z-index: 1;\r\n}\r\n\r\n\r\n.as-relative-anchor-box {\r\n    pointer-events: none;\r\n}\r\n\r\n\r\n\r\n/*\r\n    width: auto | set\r\n    left: set\r\n    right: unset,\r\n*/\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-left {\r\n    left: 0;\r\n}\r\n\r\n/*\r\n    width: auto | set\r\n    right: set\r\n    left: unset,\r\n*/\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-right {\r\n    right: 0;\r\n}\r\n\r\n/*\r\n    left: unset\r\n    right: unset\r\n    width: auto | set\r\n    warning: inner element should be set text-align to default to prevent error \r\n*/\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-center {\r\n    left: 0;\r\n    right: 0;\r\n    text-align: center;\r\n}\r\n\r\n/*\r\n    left: set\r\n    right: set\r\n    width: unset\r\n*/\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-fixed {\r\n    left: 0;\r\n    right: 0;\r\n}\r\n\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-fixed>.as-base-component,\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-fixed>.as-center-table,\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-fixed>.as-center-table>.as-center-cell>.as-base-component {\r\n    width: 100%;\r\n}\r\n\r\n\r\n\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-center>.as-base-component {\r\n    display: inline-block;\r\n}\r\n\r\n/*\r\n    top: set\r\n    height: auto | set\r\n    bottom: unset\r\n*/\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-top {\r\n    top: 0;\r\n}\r\n\r\n\r\n/*\r\n    bottom: set\r\n    height: auto | set\r\n    top: unset\r\n*/\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-bottom {\r\n    bottom: 0;\r\n}\r\n\r\n/*\r\n    bottom: set\r\n    height: unset\r\n    top: set\r\n*/\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-fixed {\r\n    bottom: 0;\r\n    top: 0\r\n}\r\n\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-fixed>* {\r\n    height: 100%;\r\n}\r\n\r\n\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-center {\r\n    top: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-center>.as-center-table {\r\n    height: 100%;\r\n}\r\n\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-center>.as-center-table>.as-center-cell {\r\n    vertical-align: middle;\r\n}\r\n\r\n\r\n.as-relative-layout>.as-relative-anchor-box.as-valign-center.as-halign-center>.as-center-table {\r\n    width: 100%;\r\n}\r\n\r\n\r\n.as-base-component {\r\n    pointer-events: all;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.as-base-component textarea {\r\n    resize: none;\r\n}\r\n\r\n.as-component-content-scaleless,\r\n.as-relative-layout>.as-relative-anchor-box.as-halign-center>.as-component-content-scaleless {\r\n    display: inline-table;\r\n}\r\n\r\n.as-component-content-scaleless-cell {\r\n    display: table-cell;\r\n    width: 100%;\r\n}", ""]);



/***/ }),
/* 16 */
/***/ (function(module, exports) {


/**
 * 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;
};


/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(18);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".as-layout-editor {\r\n    position: relative;\r\n    box-sizing: border-box;\r\n}\r\n\r\n\r\n.as-layout-editor-v-align-line,\r\n.as-layout-editor-h-align-line {\r\n    position: absolute;\r\n\r\n}\r\n\r\n\r\n.as-layout-editor-h-align-line {\r\n    left: 0;\r\n    right: 0;\r\n    border-top: dashed 1px rgba(59, 154, 209, 0.753);\r\n}\r\n\r\n.as-layout-editor-v-align-line {\r\n    top: 0;\r\n    bottom: 0;\r\n    border-left: dashed 1px rgba(59, 154, 209, 0.753);\r\n}\r\n\r\n\r\n\r\n.as-layout-editor-space-container {\r\n    position: absolute;\r\n    top: 1.5em;\r\n    left: 1.5em;\r\n    right: 0;\r\n    bottom: 0;\r\n}\r\n\r\n.as-layout-editor-space {\r\n    display: inline-block;\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-layout-editor-layout-container {\r\n    padding: 0.4em;\r\n    display: inline-block;\r\n}\r\n\r\n.as-layout-editor-layout-container>.as-relative-layout {\r\n    -webkit-box-shadow: 1px 1px 15px 0px rgba(0, 0, 0, 0.75);\r\n    -moz-box-shadow: 1px 1px 15px 0px rgba(0, 0, 0, 0.75);\r\n    box-shadow: 1px 1px 15px 0px rgba(0, 0, 0, 0.75);\r\n}\r\n\r\n\r\n.as-layout-editor-forceground-container {\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\r\n.as-layout-editor-background {\r\n    z-index: 0;\r\n}\r\n\r\n.as-layout-editor-layout-contaner {\r\n    z-index: 1;\r\n}\r\n\r\n.as-layout-editor-forceground-container {\r\n    z-index: 2;\r\n}\r\n\r\n.as-layout-editor-forceground {\r\n    width: 100%;\r\n    height: 100%;\r\n    position: relative;\r\n}\r\n\r\n\r\n.as-layout-editor-hrule-container {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 1.5em;\r\n    right: 0;\r\n    height: 1.5em;\r\n    z-index: 1;\r\n}\r\n\r\n.as-layout-editor-vrule-container {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 1.5em;\r\n    bottom: 0;\r\n    width: 1.5em;\r\n    z-index: 2;\r\n\r\n}\r\n\r\n.as-layout-editor-vrule-container>.as-vruler,\r\n.as-layout-editor-hrule-container>.as-hruler {\r\n    height: 100%;\r\n    width: 100%;\r\n}\r\n\r\n.as-layout-editor-new-component-menu-trigger {\r\n    position: absolute;\r\n    width: 1.5em;\r\n    height: 1.5em;\r\n    top: -1.5em;\r\n    left: -1.5em;\r\n}\r\n\r\n.as-layout-editor.mode-interact .as-layout-editor-forceground-container {\r\n    visibility: hidden;\r\n}", ""]);



/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(20);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, "button.absol-button {\r\n    text-align: left;\r\n    background-color: #ebebeb;\r\n    border: solid 1px #c0c0c0;\r\n    border-radius: 0.2em;\r\n    font-size: 1em;\r\n    overflow: hidden;\r\n    height: 2em;\r\n}\r\n\r\n.absol-icon-button {\r\n    text-align: left;\r\n    padding: 0;\r\n    margin: 0;\r\n    background-color: #ebebeb;\r\n    border: solid 1px #c0c0c0;\r\n    border-radius: 0.2em;\r\n    font-size: 1em;\r\n    overflow: hidden;\r\n    line-height: 2em;\r\n    box-sizing: content-box;\r\n    height: 2em;\r\n    white-space: nowrap;  \r\n    \r\n}\r\n\r\n.absol-icon-button,\r\n.absol-icon-button *{\r\n    -webkit-user-select: none;  /* Chrome 49+ */\r\n    -moz-user-select: none;     /* Firefox 43+ */\r\n    -ms-user-select: none;      /* No support yet */\r\n    user-select: none;\r\n}\r\n\r\n\r\n.absol-icon-button:hover {\r\n    background-color: rgb(213, 213, 213);\r\n}\r\n\r\n.absol-icon-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.absol-icon-button:focus {\r\n    outline: none;\r\n}\r\n\r\n.absol-icon-button-icon-container {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    width: 2em;\r\n    height: 2em;\r\n    text-align: center;\r\n    background-color: rgba(0, 0, 0, 0.0893617021);\r\n    line-height: inherit;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-icon-button-icon-container>i {\r\n    font-size: 1em;\r\n    color: rgb(146, 146, 146);\r\n    line-height: inherit;\r\n}\r\n\r\n.absol-icon-button-icon-container>svg {\r\n    width: 1em;\r\n    height: 1em;\r\n}\r\n\r\n.absol-icon-button-text-container:empty,\r\n.absol-icon-button-icon-container:empty {\r\n    display: none;\r\n}\r\n\r\n.absol-icon-button-text-container {\r\n    border-left: solid 1px #c0c0c0;\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    height: 2em;\r\n    box-sizing: border-box;\r\n    line-height: 2em;\r\n    text-align: center;\r\n}\r\n\r\n.absol-icon-button-text-container>span,\r\n.absol-icon-button-text-container>div {\r\n    font-size: 1em;\r\n    text-align: center;\r\n    margin-left: 0.7em;\r\n    margin-right: 0.7em;\r\n    line-height: inherit;\r\n}\r\n\r\n.absol-icon-button.primary,\r\n.absol-button.primary {\r\n    border-color: #357ebd;\r\n    background-color: #428bca;\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.primary .absol-icon-button-icon-container>i {\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.primary .absol-icon-button-text-container {\r\n    border-left-color: #357ebd;\r\n}\r\n\r\n.absol-icon-button.success,\r\n.absol-button.success {\r\n    border-color: #398439;\r\n    background-color: #47a447;\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.success .absol-icon-button-icon-container>i {\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.success .absol-icon-button-text-container {\r\n    border-left-color: #398439;\r\n}\r\n\r\n.absol-icon-button.warning,\r\n.absol-button.warning {\r\n    background-color: #ed9c28;\r\n    border-color: #d58512;\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.warning .absol-icon-button-icon-container>i {\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.warning .absol-icon-button-text-container {\r\n    border-left-color: #d58512;\r\n}\r\n\r\n.absol-icon-button.danger,\r\n.absol-button.danger {\r\n    background-color: #d2322d;\r\n    border-color: #ac2925;\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.danger .absol-icon-button-icon-container>i {\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.danger .absol-icon-button-text-container {\r\n    border-left-color: #ac2925;\r\n}\r\n\r\n.absol-icon-button.info,\r\n.absol-button.info {\r\n    background-color: #5bc0de;\r\n    border-color: #46b8da;\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.info .absol-icon-button-icon-container>i {\r\n    color: white;\r\n}\r\n\r\n.absol-icon-button.info .absol-icon-button-text-container {\r\n    border-left-color: #46b8da;\r\n}", ""]);



/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(22);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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-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\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: transparent;\r\n}\r\n\r\n.absol-scrollbar-button {\r\n    position: absolute;\r\n    background-color: rgba(0, 0, 0, 0.45);\r\n    border-radius: 2px;\r\n}\r\n\r\n\r\n.absol-scrollbar.absol-hidden {\r\n    visibility: hidden;\r\n}", ""]);



/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(24);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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: 14px;\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: 1.14285714286em;\r\n    width: 1.14285714286em;\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}", ""]);



/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(26);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}\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 {}", ""]);



/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(28);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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: absolute;\r\n    left: 0;\r\n    top: 100%;\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: absolute;\r\n    left: 100%;\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}\r\n\r\n.absol-drop-hidden>.absol-dropdown-content,\r\n.absol-drop-hidden>.absol-dropright-content {\r\n    visibility: hidden;\r\n}\r\n\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.absol-hmenu .absol-dropdown-content,\r\n.absol-hmenu .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    line-height: 1.8em;\r\n    white-space: nowrap;\r\n    position: relative;\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.3em;\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\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.absol-vmenu-arrow {\r\n    display: block;\r\n    font-size: 1em;\r\n    line-height: 1.2em;\r\n}\r\n\r\n.absol-menu-item-disable .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-disable .absol-vmenu-button:hover,\r\n.absol-menu-item-disable .absol-vmenu .absol-vmenu-button-hover,\r\n.absol-menu-item-disable .absol-hmenu-button:hover,\r\n.absol-menu-item-disable .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-disable {}\r\n\r\n.absol-menu-item-disable button {\r\n    color: rgb(155, 155, 159);\r\n}\r\n\r\n.dark .absol-menu-item-disable 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}", ""]);



/***/ }),
/* 29 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(30);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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: 1000;\r\n}\r\n\r\n.absol-context-hinge {\r\n    position: relative;\r\n    width: 0;\r\n    height: 0;\r\n}\r\n\r\n.absol-context-hinge>.absol-context-menu {\r\n    position: absolute;\r\n    top: -10000px;\r\n    left: -10000px;\r\n    visibility: hidden;\r\n    z-index: 55;\r\n    display: inline-block;\r\n\r\n}\r\n\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-hinge.dark .absol-hmenu,\r\n.absol-context-hinge.dark .absol-vmenu,\r\n.dark .absol-context-hinge .absol-hmenu,\r\n.dark .absol-context-hinge .absol-vmenu {\r\n    background-color: rgb(37, 37, 38);\r\n}", ""]);



/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(32);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-modal {\r\n    position: fixed;\r\n    top: 0;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    box-sizing: border-box;\r\n    z-index: 1000;\r\n}\r\n\r\n.absol-modal-hidden {\r\n    visibility: hidden;\r\n}\r\n\r\n.absol-modal-hcenter {\r\n    display: table;\r\n    text-align: center;\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.absol-modal-vcenter {\r\n    display: table-cell;\r\n    vertical-align: middle;\r\n}\r\n\r\n.absol-modal-container {\r\n    display: inline-block;\r\n    text-align: initial;\r\n}", ""]);



/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(34);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 34 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}", ""]);



/***/ }),
/* 35 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(36);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 36 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-resizablelayout{\r\n    position: relative;\r\n}\r\n\r\n.absol-resizablelayout.debug *,\r\n.absol-resizablelayout.debug\r\n{\r\n    background-color: rgba(100, 100, 100, 0.1); \r\n}\r\n\r\n.absol-resizablelayout-cell{\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n}", ""]);



/***/ }),
/* 37 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(38);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 38 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}\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.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: rgb(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: rgb(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}", ""]);



/***/ }),
/* 39 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(40);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-selectlist {}\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: 20px;\r\n    font-size: 14px;\r\n    font-family: inherit;\r\n    cursor: pointer;\r\n\r\n}\r\n\r\n.absol-selectlist-item.selected {\r\n    background-color: #dfdfdf;\r\n}\r\n\r\n.absol-selectlist-item>span {\r\n    line-height: 20px;\r\n    white-space: pre;\r\n    padding-left: 7px;\r\n    padding-right: 7px;\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    position: relative;\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    margin-left: 1em;\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", ""]);



/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(42);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 42 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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\r\n.absol-selectmenu.disabled {\r\n    pointer-events: none;\r\n}\r\n\r\n.absol-selectmenu.disabled .absol-selectmenu-dropdown-box {\r\n    display: none;\r\n}\r\n\r\n.absol-selectmenu.disabled {\r\n    background-color: #ebebe4;\r\n}\r\n\r\n\r\n.absol-selectmenu {\r\n    display: inline-block;\r\n    position: relative;\r\n    height: 30px;\r\n    min-width: 30px;\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: 14px;\r\n}\r\n\r\n/* .absol-selectmenu:hover {\r\n    border: solid 1px black;\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:hover svg.dropdown {\r\n    width: 10px;\r\n    height: 10px;\r\n    fill: black;\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: 4px;\r\n    bottom: 4px;\r\n    /*1px for border*/\r\n}\r\n\r\n.absol-selectmenu-dropdown-box {\r\n    position: absolute;\r\n    left: -1px;\r\n    top: 100%;\r\n    border: solid 1px rgb(169, 169, 169);\r\n    box-sizing: border-box;\r\n    background-color: white;\r\n    z-index: 3;\r\n    min-width: calc(100% + 2px);\r\n    z-index: 1000;\r\n}\r\n\r\n.absol-selectmenu:not(.focus) .absol-selectmenu-dropdown-box {\r\n    display: none;\r\n}\r\n\r\n\r\n\r\n.absol-selectmenu-dropdown-box.up {\r\n    top: auto;\r\n    bottom: 100%;\r\n}\r\n\r\n.absol-selectmenu .absol-selectlist-item span {\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\r\n.absol-selectmenu .absol-selectlist-item-desc-container {\r\n    right: 40px;\r\n}", ""]);



/***/ }),
/* 43 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(44);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}", ""]);



/***/ }),
/* 45 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(46);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 46 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}", ""]);



/***/ }),
/* 47 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(48);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 48 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-selectbox-item {\r\n    display: inline-block;\r\n    position: relative;\r\n    height: 20px;\r\n    border-radius: 2px;\r\n    overflow: hidden;\r\n    background-color: #5bc0de;\r\n    border-color: #46b8da;\r\n    font-size: 14px;\r\n    vertical-align: top;\r\n    white-space: normal;\r\n}\r\n\r\n.absol-selectbox {\r\n    position: relative;\r\n    min-height: 30px;\r\n    min-width: 40px;\r\n    border: solid 1px #d6d6d6;\r\n    border-radius: 3px;\r\n    box-sizing: border-box;\r\n    cursor: pointer;\r\n    padding-right: 20px;\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: 2px;\r\n}\r\n\r\n.absol-selectbox-item-text {\r\n    height: 20px;\r\n    padding-right: 25px;\r\n    color: white;\r\n    padding-left: 5px;\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    line-height: 20px;\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: 20px;\r\n    font-size: 10px;\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, 0.0893617021);\r\n}\r\n\r\n.absol-selectbox-item-close span {\r\n    font-size: 10px;\r\n    color: white;\r\n    line-height: 20px;\r\n}\r\n\r\n.absol-selectbox {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.absol-selectbox .absol-search-text-input {\r\n    margin: 4px;\r\n}\r\n\r\n.absol-selectbox:not(.focus) .absol-selectmenu-dropdown-box {\r\n    display: none;\r\n}\r\n\r\n\r\n\r\n.absol-selectbox .absol-selectlist-item.selected {\r\n    display: none;\r\n}", ""]);



/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(50);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-radio {\r\n    display: inline;\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-radio input {\r\n    display: none;\r\n}\r\n\r\n.absol-radio label {\r\n    white-space: pre;\r\n    cursor: inherit;\r\n    vertical-align: middle;\r\n    margin: 0;\r\n}\r\n\r\n.absol-radio>svg {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    width: 18px;\r\n    height: 18px;\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.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) .absol-radio-icon-right {\r\n    display: none;\r\n}\r\n\r\n.absol-radio:not(.right) label {\r\n    padding-left: 5px;\r\n}\r\n\r\n.absol-radio.right label {\r\n    padding-right: 5px;\r\n}\r\n\r\n.absol-radio.right .absol-radio-icon-left {\r\n    display: none;\r\n}\r\n\r\n.absol-radio.disabled {\r\n    cursor: default;\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}", ""]);



/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(52);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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-slider {\r\n    position: absolute;\r\n    cursor: pointer;\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", ""]);



/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(54);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 54 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, "\r\n.absol-checkbox {\r\n    display: inline;\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-checkbox input {\r\n    display: none;\r\n}\r\n\r\n.absol-checkbox label {\r\n    white-space: pre;\r\n    cursor: inherit;\r\n    vertical-align: middle;\r\n    margin: 0;\r\n}\r\n\r\n.absol-checkbox>svg {\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n    width: 18px;\r\n    height: 18px;\r\n}\r\n\r\n.absol-checkbox>svg .bound {\r\n    stroke: #929292;\r\n    fill: white;\r\n}\r\n\r\n.absol-checkbox:hover>svg .bound {\r\n    fill: #d6d6d6;\r\n    stroke: black;\r\n}\r\n\r\n/* \r\n.absol-checkbox>svg .bound {\r\n    fill: none;\r\n} */\r\n\r\n.absol-checkbox-icon .border {}\r\n\r\n.absol-checkbox .tick {\r\n    transition: opacity 0.07s;\r\n    opacity: 0;\r\n    fill: #606060;\r\n}\r\n\r\n.absol-checkbox:hover .tick {\r\n    transition: opacity 0.07s;\r\n    opacity: 0;\r\n    fill: black;\r\n}\r\n\r\n.absol-checkbox.checked .tick {\r\n    opacity: 1;\r\n    transition: opacity 0.1s;\r\n}\r\n\r\n.absol-checkbox:not(.right) .absol-checkbox-icon-right {\r\n    display: none;\r\n}\r\n\r\n.absol-checkbox:not(.right) label {\r\n    padding-left: 5px;\r\n}\r\n\r\n.absol-checkbox.right label {\r\n    padding-right: 5px;\r\n}\r\n\r\n.absol-checkbox.right .absol-checkbox-icon-left {\r\n    display: none;\r\n}\r\n\r\n.absol-checkbox.disabled {\r\n    cursor: default;\r\n}\r\n\r\n.absol-checkbox.disabled:hover .tick,\r\n.absol-checkbox.disabled .tick {\r\n    fill: #929292;\r\n}\r\n\r\n.absol-checkbox.disabled .bound,\r\n.absol-checkbox.disabled:hover .bound {\r\n    stroke: #929292;\r\n    fill: #ebebe4;\r\n}\r\n", ""]);



/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(56);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, "\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", ""]);



/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(58);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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 */", ""]);



/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(60);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-follower{\r\n    position: relative;\r\n}\r\n\r\n.absol-follower-content-container{\r\n    position: absolute;\r\n    left: -10000px;\r\n    top: -10000px;\r\n    z-index: -1000;\r\n}\r\n\r\n.absol-follower.following .absol-follower-content-container{\r\n    z-index: 100;\r\n}", ""]);



/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(62);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-tooltip {\r\n    margin: 0;\r\n    position: relative;\r\n    box-sizing: border-box;\r\n    display: inline-block;\r\n}\r\n\r\n.absol-tooltip-content {\r\n    display: inline-block;\r\n    border-radius: 0.25rem;\r\n    background-color: gray;\r\n    padding: 0.25rem 0.5rem;\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}\r\n\r\n.absol-tooltip.top .absol-tooltip-arrow {\r\n    border-left: 0.4rem solid transparent;\r\n    border-right: 0.3rem solid transparent;\r\n\r\n    border-top: 0.3rem solid gray;\r\n    bottom: 0;\r\n    left: calc(50% - 0.3rem);\r\n}\r\n\r\n\r\n\r\n.absol-tooltip.top .absol-tooltip-content {\r\n    margin-bottom: 0.3rem;\r\n} \r\n\r\n\r\n.absol-tooltip.bottom .absol-tooltip-arrow {\r\n    border-left: 0.3rem solid transparent;\r\n    border-right: 0.4rem solid transparent;\r\n    border-bottom: 0.3rem solid gray;\r\n\r\n    top: 0;\r\n    left: calc(50% - 0.3rem);\r\n}\r\n\r\n.absol-tooltip.bottom .absol-tooltip-content {\r\n    margin-top: 0.3rem;\r\n}\r\n\r\n\r\n\r\n.absol-tooltip.left .absol-tooltip-arrow {\r\n    border-top: 0.3rem solid transparent;\r\n    border-bottom: 0.4rem solid transparent;\r\n    border-left: 0.4rem solid gray;\r\n\r\n    right: 0;\r\n    top: calc(50% - 0.3rem);\r\n}\r\n\r\n.absol-tooltip.left .absol-tooltip-content {\r\n    margin-right: 0.4rem;\r\n}\r\n\r\n\r\n.absol-tooltip.right .absol-tooltip-arrow {\r\n    border-top: 0.4rem solid transparent;\r\n    border-bottom: 0.4rem solid transparent;\r\n    border-right: 0.4rem solid gray;\r\n\r\n    left: 0;\r\n    top: calc(50% - 0.3rem);\r\n}\r\n\r\n.absol-tooltip.right .absol-tooltip-content {\r\n    margin-left: 0.4rem;\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: absolute;\r\n    left: 0;\r\n    top: 0;\r\n}", ""]);



/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(64);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-tabbar {\r\n    white-space: normal;\r\n    height: 2em;\r\n    white-space: nowrap;\r\n}\r\n\r\n.absol-tabbar .absol-tabbar-button {\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-button {\r\n    opacity: 0;\r\n    transition: opacity 0.2s;\r\n}\r\n\r\n.absol-tabbar:hover .absol-scrollbar-button {\r\n    opacity: 1;\r\n}\r\n\r\n.absol-tabbar .absol-scrollbar-button {\r\n    background-color: rgba(196, 196, 196, 0.1)\r\n}\r\n\r\n.absol-tabbar .absol-scrollbar-button:active {\r\n    background-color: rgba(255, 255, 255, 0.3)\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}\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-close {\r\n    display: inline;\r\n    vertical-align: middle;\r\n}\r\n\r\n.absol-tabbar-button .absol-tabbar-button-close {\r\n    margin-left: 1em;\r\n    visibility: hidden;\r\n    color: rgb(190, 190, 190);\r\n    font-size: 1em\r\n}\r\n\r\n.absol-tabbar-button:hover .absol-tabbar-button-close,\r\n.absol-tabbar-button-active .absol-tabbar-button-close {\r\n    visibility: visible;\r\n    color: red;\r\n}\r\n\r\n.absol-button-range {}\r\n\r\n\r\n.absol-tabview {\r\n    position: relative;\r\n}\r\n\r\n\r\n.absol-tabview-container {\r\n    position: absolute;\r\n    top: 2em;\r\n    left: 0;\r\n    right: 0;\r\n    bottom: 0;\r\n    overflow: auto;\r\n}\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>div,\r\n.absol-tabview-container>pre {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.absol-tabview-container>pre {\r\n    margin: 0;\r\n}\r\n\r\n.absol-tabview .absol-tabbar-button {\r\n    border-radius: 10px 10px 0 0;\r\n    height: 34px;\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: 14px;\r\n    padding-right: 5px;\r\n    margin-right: 5px;\r\n}\r\n\r\n.absol-tabview .absol-tabbar {\r\n    height: 34px;\r\n    overflow-y: hidden;\r\n    border-bottom: 1px solid #ccc;\r\n    box-sizing: border-box;\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: 30px;\r\n    margin-left: 14px;\r\n    font-size: 20px;\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\r\n\r\n/************** Mini version - like window form ***********************/\r\n\r\n.absol-tabview.xp-tiny .absol-tabbar {\r\n    height: 22px;\r\n    border-bottom: none;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tabbar-button {\r\n    height: 20px;\r\n    padding-left: 5px;\r\n    padding-right: 5px;\r\n    border-radius: 0;\r\n    margin: 0;\r\n    vertical-align: bottom;\r\n    margin-top: 2px;\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: 18px;\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: 22px;\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\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: 18px;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tabbar-button-close.mdi.mdi-close {\r\n    display: none;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tabview-container {\r\n    top: 22px;\r\n}\r\n\r\n.absol-tabview.xp-tiny .absol-tab-frame {\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}", ""]);



/***/ }),
/* 65 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(66);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-page-selector{\r\n    white-space: normal;\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.page-number-buttons{\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.page-number-input > label{\r\n    font-weight: 100;\r\n}\r\n\r\n.page-number-buttons > li.page-previous, \r\n.page-number-buttons > li.page-next,\r\n.page-number-buttons > li.page-first,\r\n.page-number-buttons > li.page-last\r\n{\r\n    display: inline-block;\r\n    height: 30px;\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.page-number-buttons > li.page-number{\r\n    display: inline-block;\r\n    height: 30px;\r\n    width: 40px;\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\r\n.page-number-buttons > li.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.page-number-buttons > li.page-number.active > a{\r\n\tcolor: white;\r\n    \r\n}\r\n\r\n.page-number-buttons > li> a{\r\n    line-height: 30px;\r\n    text-decoration:none;\r\n}\r\n\r\n.page-number-buttons > li:not(.active):hover{\r\n    background-color: #eee;\r\n\r\n}\r\n\r\n.absol-page-selector .page-number-input{\r\n    display: inline-block;\r\n    vertical-align: middle;\r\n}\r\n\r\n.absol-page-selector .page-number-input  input[type=\"text\"]{\r\n    width: 3em;\r\n    margin-left: 5px; \r\n    margin-right: 10px;\r\n    text-align: center;\r\n    height: 26px;\r\n    border: none;\r\n    border: solid 1px #ccc; \r\n    border-radius: 2px;\r\n\r\n}", ""]);



/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(68);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 68 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-bscroller {\r\n    overflow: auto;\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\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: rgb(220, 220, 220, 0.4);\r\n}\r\n\r\n.absol-bscroller::-webkit-scrollbar-thumb {\r\n    background: rgb(182, 182, 182, 0.4);\r\n}\r\n\r\n.absol-bscroller::-webkit-scrollbar-thumb:hover {\r\n    background: rgb(32, 32, 32, 0.4);\r\n}\r\n\r\n.absol-bscroller::-webkit-scrollbar-thumb:active {\r\n    background: rgb(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: rgb(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: rgb(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: rgb(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: rgb(242, 242, 242, 0.6);\r\n}", ""]);



/***/ }),
/* 69 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(70);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 70 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-search-list {\r\n    padding-top: 2.5em;\r\n    position: relative;\r\n    border: solid 1px #a9a9a9;\r\n    box-sizing: border-box;\r\n}\r\n\r\n.absol-search-list-search-input-container {\r\n    position: absolute;\r\n    top: 0;\r\n    left: 0;\r\n    right: 0;\r\n    height: 2.5em;\r\n    border-bottom: solid 1px #a9a9a9;\r\n\r\n}\r\n\r\n\r\n.absol-search-list-search-input-container input[type=\"text\"] {\r\n    font-size: 1em;\r\n    box-sizing: border-box;\r\n    width: calc(100% - 1em);\r\n    height: 1.5em;\r\n    margin: 0.5em;\r\n}\r\n\r\n.absol-search-list-contents {\r\n    height: 100%;\r\n    box-sizing: border-box;\r\n    background: white;\r\n}\r\n\r\n.absol-search-list-item {\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-search-list-item.default {\r\n    line-height: 2em;\r\n    padding-left: 1em;\r\n    padding-right: 1em;\r\n}\r\n\r\n.absol-search-list-item:hover {\r\n    background-color: rgba(169, 169, 169, 0.1);\r\n}\r\n\r\n.absol-search-list-item.active {\r\n    background-color: rgba(169, 169, 169, 0.4);\r\n}", ""]);



/***/ }),
/* 71 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(72);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 72 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}", ""]);



/***/ }),
/* 73 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(74);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 74 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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: rgb(169, 169, 172, 0.1);\r\n}\r\n\r\n.absol-exp-node:focus,\r\n.absol-exp-node.active:focus {\r\n    background-color: rgba(20, 185, 235, 0.3);\r\n}\r\n\r\n.absol-exp-node.active {\r\n    background-color: rgb(169, 169, 172, 0.2);\r\n\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}\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}", ""]);



/***/ }),
/* 75 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(76);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 76 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-table-vscroller {\r\n    position: relative;\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: 1px;\r\n    padding-top: 1px;\r\n}", ""]);



/***/ }),
/* 77 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(78);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 78 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-table-scroller {\r\n    position: relative;\r\n    overflow: hidden;\r\n}\r\n\r\n.absol-table-scroller-viewport {\r\n    max-width: 100%;\r\n    max-height: 100%;\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    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    /*firefox bug*/\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: 6px;\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}\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: 6px;\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}\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    width: calc(100% - 6px);\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:  calc(100% - 6px);\r\n    height: 100%;\r\n}\r\n\r\n\r\n.absol-table-scroller.scroll-v .absol-table-scroller-head-line{\r\n    width: calc(100% - 6px);\r\n}\r\n\r\n.absol-table-scroller.scroll-h .absol-table-scroller-left-line{\r\n    height: calc(100% - 6px);\r\n}", ""]);



/***/ }),
/* 79 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(80);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 80 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-quick-path {\r\n    height: 1.5em;\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}\r\n\r\n.absol-quick-path button {\r\n    outline: none;\r\n    color: rgb(69, 69, 69);\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.absol-quick-path-btn {\r\n    font-size: 1em;\r\n    padding: 0;\r\n    border: none;\r\n    background: transparent;\r\n    padding-right: 0.3em;\r\n}\r\n\r\n.absol-quick-path-btn:focus span {\r\n    text-decoration: underline;\r\n}\r\n\r\n.absol-quick-path-btn-ext-ico {\r\n    width: 1em;\r\n    height: 1em;\r\n    vertical-align: middle;\r\n    margin-right: 0.3em;\r\n    display: none;\r\n}\r\n\r\n.absol-quick-path-btn-ext-ico[src] {\r\n    display: inline;\r\n}\r\n\r\n.absol-quick-path-btn .toggler-ico {\r\n    height: 0.7em;\r\n    width: 0.7em;\r\n}\r\n\r\n.absol-quick-path-btn.toggle svg .toggle-close {\r\n    display: none;\r\n}\r\n\r\n.absol-quick-path-btn:not(.toggle) svg .toggle-open {\r\n    display: none;\r\n}\r\n\r\n.absol-quick-path-btn .toggler-ico path {\r\n    fill: rgb(104, 104, 104);\r\n}\r\n\r\n.absol-quick-path-dropdown {\r\n    position: absolute;\r\n    z-index: 2;\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    background-color: rgb(252, 252, 255);\r\n    box-sizing: border-box;\r\n}\r\n\r\n.dark .absol-quick-path-dropdown {\r\n    background-color: rgb(37, 37, 38)\r\n}\r\n\r\n\r\n.absol-quick-path-dropdown .absol-vmenu-button-key {\r\n    display: none;\r\n}\r\n\r\n.absol-quick-path-dropdown .absol-vmenu-button {\r\n    min-width: unset;\r\n}", ""]);



/***/ }),
/* 81 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(82);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 82 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}\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", ""]);



/***/ }),
/* 83 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(84);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 84 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-draggable-vstack {\r\n    position: relative;\r\n}\r\n\r\n.absol-draggable-vstack .drag-zone {}\r\n\r\n.absol-draggable-vstack>.dragging {\r\n    opacity: 0.2 !important;\r\n}\r\n\r\n.absol-draggable-vstack-child-container.dragging {\r\n    opacity: 0.2 !important;\r\n}\r\n\r\n.absol-draggable-vstack-clone-container {\r\n    position: absolute;\r\n    left: 0;\r\n    right: 0;\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    z-index: 100;\r\n    pointer-events: all;\r\n    opacity: 0.5;\r\n    background: white;\r\n}\r\n\r\n.absol-draggable-vstack-clone-container * {\r\n    pointer-events: none !important;\r\n}\r\n\r\n.absol-draggable-vstack-clone-container.home-going {\r\n    transition: top 0.2s;\r\n}\r\n\r\n.absol-draggable-vstack-dest-line {\r\n    position: absolute;\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    z-index: 99;\r\n    transition: top 0.1s;\r\n}\r\n", ""]);



/***/ }),
/* 85 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(86);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 86 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-chrome-calendar {\r\n    display: inline-block;\r\n    font-family: Arial;\r\n    font-size: 14px;\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.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-title {\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-chrome-calendar-title>span {\r\n    line-height: 1.5em;\r\n}\r\n\r\n.absol-chrome-calendar-instance {\r\n    margin-top: 1em;\r\n    border: solid 1px rgb(190, 190, 190);\r\n    width: 14em;\r\n    position: relative;\r\n    height: calc(8.4em + 3px);\r\n    overflow: hidden;\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-dayofweek>div {\r\n    text-align: center;\r\n    line-height: 1.2;\r\n    display: inline-block;\r\n    width: 14.2857142857%;\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-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    display: table;\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-week-in-mounth {\r\n    display: table-row;\r\n    height: 1.2em;\r\n}\r\n\r\n.absol-chrome-calendar-week-in-mounth>div {\r\n    display: table-cell;\r\n    text-align: right;\r\n    padding-right: 0.4em;\r\n    cursor: pointer;\r\n}\r\n\r\n.absol-chrome-calendar-week-in-mounth>div:hover {\r\n    background-color: rgb(224, 245, 256);\r\n}\r\n\r\n\r\n.absol-chrome-calendar-not-in-month {\r\n    color: rgb(190, 190, 190);\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    background-color: rgb(188, 205, 236);\r\n}\r\n\r\n.absol-chrome-calendar-years {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n\r\n.absol-chrome-calendar:not(.view-year) .absol-chrome-calendar-years {\r\n    /* display: none; */\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    width: 100%;\r\n    height: 100%;\r\n    z-index: -10000;\r\n    opacity: 0;\r\n    visibility: hidden;\r\n}\r\n\r\n.absol-chrome-calendar.view-year .absol-chrome-calendar-instance {\r\n    border-color: rgb(77, 114, 254)\r\n}\r\n\r\n.absol-chrome-calendar:not(.view-month) .absol-chrome-calendar-month,\r\n.absol-chrome-calendar:not(.view-month) .absol-chrome-calendar-dayofweek {\r\n    display: none;\r\n}\r\n\r\n.absol-chrome-calendar:not(.view-month) .absol-chrome-calendar-title {\r\n    color: rgb(191, 191, 191);\r\n}\r\n\r\n\r\n.absol-chrome-calendar-year {\r\n    overflow: hidden;\r\n}\r\n\r\n\r\n.absol-chrome-calendar-year-head {\r\n    background-color: rgb(241, 241, 241);\r\n    border-bottom: solid 1px rgb(191, 191, 191);\r\n    height: 1.5em;\r\n    text-align: center;\r\n    line-height: 1.5em;\r\n}\r\n\r\n\r\n.absol-chrome-calendar-year:last-child .absol-chrome-calendar-year-head {\r\n    border-bottom: solid 1px rgb(191, 191, 191);\r\n}\r\n\r\n.absol-chrome-calendar-year.start-opening .absol-chrome-calendar-year-mounths,\r\n.absol-chrome-calendar-year.closing .absol-chrome-calendar-year-mounths {\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-mounths,\r\n.absol-chrome-calendar-year.start-closing .absol-chrome-calendar-year-mounths {\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-mounths {\r\n    width: 100%;\r\n    display: table;\r\n    height: 6em;\r\n    border-bottom: solid 1px rgb(191, 191, 191);\r\n}\r\n\r\n.absol-chrome-calendar-year-row-months {\r\n    display: table-row;\r\n}\r\n\r\n.absol-chrome-calendar-year-month {\r\n    text-align: center;\r\n    display: table-cell;\r\n    vertical-align: middle;\r\n}\r\n\r\n.absol-chrome-calendar-year-month:hover {\r\n    background-color: rgb(224, 245, 256);\r\n}\r\n\r\n\r\n\r\n\r\n.absol-chrome-calendar-years:hover .absol-scrollbar {\r\n    opacity: 1;\r\n\r\n}\r\n\r\n.absol-chrome-calendar-years .absol-scrollbar {\r\n    background-color: rgba(169, 169, 172, 0.2);\r\n    opacity: 0;\r\n    transition: opacity 0.2s;\r\n}\r\n\r\n.absol-chrome-calendar-date-disabled {\r\n    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    color: rgb(220, 210, 210);\r\n    pointer-events: none;\r\n    box-shadow: none;\r\n    cursor: not-allowed;\r\n}", ""]);



/***/ }),
/* 87 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(88);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 88 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".absol-calendar-input {\r\n    font-size: 14px;\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>input {\r\n    text-align: center;\r\n    width: 100%;\r\n    height: 100%;\r\n    outline: none;\r\n    cursor: pointer;\r\n    border: none;\r\n    background: transparent;\r\n}\r\n\r\n.absol-calendar-input>input:hover,\r\n.absol-calendar-input>input:focus {\r\n    color: red;\r\n}\r\n\r\n.absol-calendar-input.absol-disabled {\r\n    pointer-events: none;\r\n}\r\n\r\n.absol-calendar-input.absol-disabled input {\r\n    color: rgb(169, 169, 171);\r\n}", ""]);



/***/ }),
/* 89 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(90);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 90 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".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}", ""]);



/***/ }),
/* 91 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, "textarea.as-base-component {\r\n    resize: none;\r\n}\r\n\r\n\r\n.absol-selectmenu.as-base-component .absol-selectmenu-holder-item {\r\n    top: calc(50% - 10px);\r\n    bottom: calc(50% - 10px);\r\n}", ""]);



/***/ }),
/* 92 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(93);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 93 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".as-resize-box {\r\n    position: absolute;\r\n    z-index: 1;\r\n    box-sizing: border-box;\r\n    opacity: 0.5;\r\n\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    cursor: move;\r\n}\r\n\r\n\r\n.as-resize-box-dot {\r\n    position: absolute;\r\n    width: 0.4em;\r\n    height: 0.4em;\r\n    background: rgb(32, 150, 218);\r\n}\r\n\r\n.as-resize-box-dot.left-top {\r\n    top: calc(-0.2em - 1px);\r\n    left: calc(-0.2em - 1px);\r\n    cursor: nw-resize;\r\n}\r\n\r\n.as-resize-box-dot.left-bottom {\r\n    bottom: calc(-0.2em - 1px);\r\n    left: calc(-0.2em - 1px);\r\n    cursor: sw-resize;\r\n}\r\n\r\n.as-resize-box-dot.left {\r\n    top: calc(50% - 0.2em);\r\n    left: calc(-0.2em - 1px);\r\n    cursor: w-resize;\r\n}\r\n\r\n.as-resize-box-dot.top {\r\n    top: calc(-0.2em - 1px);\r\n    left: calc(50% - 0.2em);\r\n    cursor: n-resize;\r\n}\r\n\r\n.as-resize-box-dot.bottom {\r\n    bottom: calc(-0.2em - 1px);\r\n    left: calc(50% - 0.2em);\r\n    cursor: s-resize;\r\n}\r\n\r\n.as-resize-box-dot.right-top {\r\n    top: calc(-0.2em - 1px);\r\n    right: calc(-0.2em - 1px);\r\n    cursor: ne-resize;\r\n}\r\n\r\n.as-resize-box-dot.right-bottom {\r\n    bottom: calc(-0.2em - 1px);\r\n    right: calc(-0.2em - 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.2em);\r\n    right: calc(-0.2em - 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;\r\n}\r\n\r\n\r\n.as-resize-box-overiding.left-top {\r\n    cursor: nw-resize;\r\n}\r\n\r\n.as-resize-box-overiding.left-bottom {\r\n    cursor: sw-resize;\r\n}\r\n\r\n.as-resize-box-overiding.left {\r\n    cursor: w-resize;\r\n}\r\n\r\n.as-resize-box-overiding.top {\r\n    cursor: n-resize;\r\n}\r\n\r\n.as-resize-box-overiding.bottom {\r\n    cursor: s-resize;\r\n}\r\n\r\n.as-resize-box-overiding.right-top {\r\n    cursor: ne-resize;\r\n}\r\n\r\n.as-resize-box-overiding.right-bottom {\r\n    cursor: se-resize;\r\n}\r\n\r\n\r\n.as-resize-box-overiding.right {\r\n    cursor: e-resize;\r\n}\r\n\r\nbody.as-resize-box-overiding-overide.right {\r\n    cursor: e-resize;\r\n}", ""]);



/***/ }),
/* 94 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(95);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 95 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".as-hline {\r\n    position: absolute;\r\n    pointer-events: none;\r\n    opacity: 0.5;\r\n\r\n}\r\n\r\n.as-hline-body {\r\n    position: relative;\r\n    border-top: solid 2px rgb(55, 180, 159);\r\n    box-sizing: border-box;\r\n    width: 100%;\r\n    margin-top: -1px;\r\n    margin-bottom: -1px; \r\n\r\n}\r\n\r\n.as-hline-dot {\r\n    position: absolute;\r\n    top: calc(-0.2em - 1px);\r\n    height: 0.4em;\r\n    width: 0.4em;\r\n    background-color: rgb(55, 180, 159);\r\n}\r\n\r\n\r\n.as-hline-dot.left {\r\n    left: -0.2em;\r\n}\r\n\r\n\r\n.as-hline-dot.right {\r\n    right: -0.2em;\r\n}", ""]);



/***/ }),
/* 96 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(97);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 97 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".as-vline {\r\n    position: absolute;\r\n    pointer-events: none;\r\n    opacity: 0.5;\r\n\r\n}\r\n\r\n.as-vline-body {\r\n    position: relative;\r\n    border-left: solid 2px rgb(55, 180, 159);\r\n    box-sizing: border-box;\r\n    height:  100%;\r\n    margin-left: -1px;\r\n    margin-right: -1px;\r\n\r\n}\r\n\r\n.as-vline-dot {\r\n    position: absolute;\r\n    left: calc(-0.2em - 1px);\r\n    height: 0.4em;\r\n    width: 0.4em;\r\n    background-color: rgb(55, 180, 159);\r\n}\r\n\r\n\r\n.as-vline-dot.top {\r\n    top: -0.2em;\r\n}\r\n\r\n\r\n.as-vline-dot.bottom {\r\n    bottom: -0.2em;\r\n}", ""]);



/***/ }),
/* 98 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(99);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 99 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, "/*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} ", ""]);



/***/ }),
/* 100 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(101);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 101 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, "/*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}", ""]);



/***/ }),
/* 102 */
/***/ (function(module, exports, __webpack_require__) {


var content = __webpack_require__(103);

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

var transform;
var insertInto;



var options = {"hmr":true}

options.transform = transform
options.insertInto = undefined;

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

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

if(false) {}

/***/ }),
/* 103 */
/***/ (function(module, exports, __webpack_require__) {

exports = module.exports = __webpack_require__(4)(false);
// Module
exports.push([module.i, ".as-form-editor {\r\n    position: relative;\r\n    font-size: 14px;\r\n}\r\n\r\n.as-form-editor-resizer {\r\n    z-index: 10;\r\n    position: absolute;\r\n}\r\n\r\n.as-form-editor-resizer.vertical {\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 0.4em;\r\n    cursor: w-resize;\r\n}\r\n\r\n.as-form-editor-left-site-container {\r\n    position: absolute;\r\n    left: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 16em;\r\n}\r\n\r\n.as-form-editor-left-site-container>.as-form-editor-left-site {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.as-form-editor-resizer.vertical.left-site {\r\n    left: calc(16em - 0.2em);\r\n}\r\n\r\n.as-form-editor-editor-space-container {\r\n    position: absolute;\r\n    left: 16.2em;\r\n    top: 0;\r\n    bottom: 0;\r\n    right: 16.2em;\r\n}\r\n\r\n.as-form-editor-resizer.vertical.right-site {\r\n    right: calc(16em - 0.2em);\r\n}\r\n\r\n.as-form-editor-right-site-container {\r\n    position: absolute;\r\n    right: 0;\r\n    top: 0;\r\n    bottom: 0;\r\n    width: 16em;\r\n}\r\n\r\n.as-form-editor-right-site-container>.as-form-editor-right-site {\r\n    width: 100%;\r\n    height: 100%;\r\n}\r\n\r\n.as-form-editor-editor-space-container> .as-layout-editor{\r\n    width: 100%;\r\n    height: 100%;\r\n}", ""]);



/***/ }),
/* 104 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);

// EXTERNAL MODULE: ./css/base.css
var base = __webpack_require__(14);

// EXTERNAL MODULE: ./css/layouteditor.css
var layouteditor = __webpack_require__(17);

// EXTERNAL MODULE: ./node_modules/absol-acomp/ACore.js
var ACore = __webpack_require__(0);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/IconButton.js


var IconButton_ = ACore["a" /* default */]._;
var IconButton_$ = ACore["a" /* default */].$;


function IconButton() {
    var res = IconButton_({
        tag: "button",
        class: ['absol-icon-button'],
        child: ['.absol-icon-button-icon-container', '.absol-icon-button-text-container']
    });
    res.$iconContainer = IconButton_$('.absol-icon-button-icon-container', res);
    res.$textContainer = IconButton_$('.absol-icon-button-text-container', res);
    res.sync = res.afterAttached();
    return res;
};

IconButton.prototype.addChild = function (child) {
    if (child instanceof Array) {
        child.forEach(function () {
            this.addChild(child);
        }.bind(this));
    }
    else {
        if (!this.$iconContainerChild) {
            this.$iconContainerChild = child;
            this.$iconContainer.addChild(child);
            this.sync = this.sync.then(this.updateTextPosition.bind(this));
        }
        else if (!this.$textContainerChild) {
            this.$textContainerChild = child;
            this.$textContainer.addChild(child);
            this.sync = this.sync.then(this.updateTextPosition.bind(this));
        }
    }
    return this;
};

IconButton.prototype.updateTextPosition = function () {
    var heightStyle = parseFloat(this.getComputedStyleValue('height').replace('px', ''));
    var iconContainerHeightStyle = parseFloat(this.$iconContainerChild.getComputedStyleValue('height').replace('px', ''));
    if (heightStyle - iconContainerHeightStyle > 0) {
        this.$iconContainer.addStyle({
            width: heightStyle + 'px',
            height: heightStyle + 'px'
        });
        this.addStyle('line-height', heightStyle - 2 + 'px');
        this.$textContainer.addStyle({
            'height': heightStyle + 'px',
            'line-height': heightStyle + 'px'
        });
    }
    if (this.$textContainerChild) {
        var textContainerBound = this.$textContainer.getBoundingClientRect();
        var bound = this.getBoundingClientRect();
        if (textContainerBound.right < bound.right - 2) {
            this.$textContainer.addStyle('width', textContainerBound.width + (bound.right - 2 - textContainerBound.right) + 'px');

        }
    }
}

IconButton.prototype.clearChild = function () {
    res.$iconContainer.clearChild();
    res.$textContainer.clearChild();
    this.$textContainerChild = undefined;
    this.$iconContainerChild = undefined;

    return this;
};

ACore["a" /* default */].creator.iconbutton = IconButton;
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/iconbutton.css
var iconbutton = __webpack_require__(19);

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Dom.js + 2 modules
var Dom = __webpack_require__(1);

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/OOP.js
var OOP = __webpack_require__(2);

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/Element.js
var Element = __webpack_require__(6);

// CONCATENATED MODULE: ./node_modules/absol/src/Math/int.js

/**
 * 
 * @param {number} x 
 * @param {number} l
 * @param {number} h
 * @param {number} L
 * @param {number} H
 * @returns {number}
 */
function map(x, l, h, L, H) {
    return (x - l) / (h - l) * (H - L) + L;
}



function sumArr(arr) {
    var res = 0;
    for (var i = 0; i < arr.length; ++i)
        res += arr[i];
    return res;
}

function radianInRange(x, start, end) {
    if (start > end) return radianInRange(x, end, start);
    if (x < start) x += (Math.PI * 2) * Math.ceil((start - x) / 2 / Math.PI);
    if (x > end) x -= (Math.PI * 2) * Math.ceil((x - end) / 2 / Math.PI);
    return x >= start && x <= end;
}




function distance(x0, y0, x1, y1) {
    var dx = x0 - x1;
    var dy = y0 - y1;
    return Math.sqrt(dx * dx + dy * dy);
}
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Scroller.js






var Scroller_ = ACore["a" /* default */]._;
var Scroller_$ = ACore["a" /* default */].$;

ACore["a" /* default */].$scrollStyle = (function () {
    var element = Scroller_('style#vscroller-style');
    element.innerHTML = [
        '.absol-vscroller-viewport{ margin-right: ' + (-17) + 'px;  min-width: calc(100% + ' + (17) + 'px);}',
        '.absol-hscroller-viewport{ margin-bottom: ' + (-17) + 'px;  min-height: calc(100% + ' + (17) + 'px);}'
    ].join('\n');
    document.head.appendChild(element);

    Dom["a" /* default */].getScrollSize().then(function (size) {
        element.innerHTML = [
            '.absol-vscroller-viewport{ margin-right: ' + (-size.width) + 'px; min-width: calc(100% + ' + (size.width) + 'px);}',
            '.absol-hscroller-viewport{ margin-bottom: ' + (-size.height) + 'px; min-height: calc(100% + ' + (size.height) + 'px);}'
        ].join('\n');
    });
    return element;
}
)();

function VScroller() {
    var res = Scroller_({
        class: 'absol-vscroller',
        child: ['.absol-vscroller-viewport',
            {
                class: ['absol-scrollbar-container', 'vertical'],
                child: 'vscrollbar'
            }
        ]
    });
    res.eventHandler = OOP["a" /* default */].bindFunctions(res, VScroller.eventHandler);
    res.$attachHook = Scroller_('attachhook').addTo(res);
    res.sync = new Promise(function(rs){
        res.$attachHook.once('error', function(){
            rs();
        });
    }); 

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

VScroller.prototype.requestUpdateSize = function () {
    // return;
    if (this._isRequestingUpdateSize) return this.sync;
    this._isRequestingUpdateSize = true;
    this.sync = this.sync.then(function () {
        this.$vscrollbar.outerHeight = this.$viewport.clientHeight;
        this.$vscrollbar.innerHeight = this.$viewport.scrollHeight - 2;
        this.$vscrollbar.innerOffset = this.$viewport.scrollTop;
        if (this.$vscrollbar.innerHeight <= this.$vscrollbar.outerHeight) {
            this.$vscrollbar.hidden = true;
            this.addClass('disabled');
        }
        else {
            this.removeClass('disabled');
            this.$vscrollbar.hidden = false;
        }
        this._isRequestingUpdateSize = false;
    }.bind(this));
    return this.sync;
};

VScroller.prototype.init = function (props) {
    this.super(props);
    this.requestUpdateSize();
};

VScroller.prototype.addChild = function () {
    var res = this.$viewport.addChild.apply(this.$viewport, arguments);
    this.requestUpdateSize();
    return res;
};

VScroller.prototype.clearChild = function () {
    var res = this.$viewport.clearChild.apply(this.$viewport, arguments);
    this.requestUpdateSize();
    return res;

};

VScroller.prototype.addChildBefore = function () {
    var res = this.$viewport.addChildBefore.apply(this.$viewport, arguments);
    this.requestUpdateSize();
    return res;
};

VScroller.prototype.addChildAfter = function () {
    var res = this.$viewport.addChildAfter.apply(this.$viewport, arguments);
    this.requestUpdateSize();
    return res;
};

VScroller.prototype.findChildAfter = function () {
    return this.$viewport.findChildAfter.apply(this.$viewport, arguments);
};

VScroller.prototype.findChildBefore = function () {
    return this.$viewport.findChildBefore.apply(this.$viewport, arguments);
};

VScroller.prototype.removeChild = function () {
    var res = this.$viewport.removeChild.apply(this.$viewport, arguments);
    this.requestUpdateSize();
    return res;
};

VScroller.prototype.scrollInto = function (element, padding, scrollTime, beforFrame, afterFrame) {
    padding = padding || 0;
    scrollTime = scrollTime || 0;
    var frameCount = Math.ceil(scrollTime / 15 + 1);
    var self = this;
    function onFrame() {
        beforFrame && beforFrame();
        var elementBound = element.getBoundingClientRect();
        var viewportBound = self.$viewport.getBoundingClientRect();
        var currentScrollTop = self.$viewport.scrollTop;
        var newScrollTop = currentScrollTop;
        if (elementBound.bottom + padding > viewportBound.bottom) {
            newScrollTop = currentScrollTop + ((elementBound.bottom + padding) - viewportBound.bottom) / (Math.log(frameCount) + 1);
        }
        if (elementBound.top - padding < viewportBound.top) {
            newScrollTop = currentScrollTop - (viewportBound.top - (elementBound.top - padding)) / (Math.log(frameCount) + 1);
        }

        if (newScrollTop != currentScrollTop) {
            self.$viewport.scrollTop = newScrollTop;
        }
        afterFrame && afterFrame();
        frameCount--;
        if (frameCount > 0) setTimeout(onFrame, 15)
    }

    if (Element["a" /* default */].prototype.isDescendantOf.call(element, this.$viewport)) {
        onFrame();
    }
};


VScroller.prototype.scrollBy = function (dy, duration) {
    duration = duration || 0;
    var frameCount = Math.ceil(duration / 20);
    var timeOut = duration/frameCount;
    var i = 0;
    var self = this;
    var start = self.$viewport.scrollTop;
    var end = start + dy;
    function onFrame() {
        self.$viewport.scrollTop = Math.max(map(i, 0, frameCount, start, end), 0);
        ++i;
        if (i <= frameCount)
            setTimeout(onFrame, timeOut);
    }
    onFrame();
};


VScroller.eventHandler = {};

VScroller.eventHandler.scrollViewport = function (event) {
    this.$vscrollbar.outerHeight = this.$viewport.clientHeight;
    this.$vscrollbar.innerHeight = this.$viewport.scrollHeight;
    this.$vscrollbar.innerOffset = this.$viewport.scrollTop;
};

VScroller.eventHandler.scrollScrollbar = function (event) {
    this.$viewport.scrollTop = this.$vscrollbar.innerOffset;
};







function HScroller() {
    var res = Scroller_({
        class: 'absol-hscroller',
        child: ['.absol-hscroller-viewport',
            {
                class: ['absol-scrollbar-container', 'horizontal'],
                child: 'hscrollbar'
            }
        ]
    });
    res.eventHandler = OOP["a" /* default */].bindFunctions(res, HScroller.eventHandler);
    res.sync = res.afterAttached();
    res.$hscrollbar = Scroller_$('hscrollbar', res).on('scroll', res.eventHandler.scrollScrollbar);
    res.$viewport = Scroller_$('.absol-hscroller-viewport', res)
        .on('scroll', res.eventHandler.scrollViewport);
    OOP["a" /* default */].extends(res.$viewport, {
        removeChild: function () {
            this.super.apply(this, arguments);
            res.requestUpdateSize();
            return res;
        }
    })
    return res;
};

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 - 2;
        this.$hscrollbar.innerOffset = this.$viewport.scrollLeft;
        if (this.$hscrollbar.innerWidth <= this.$hscrollbar.outerWidth) {
            this.$hscrollbar.hidden = true;
            this.addClass('disabled');
        }
        else {
            this.removeClass('disabled');
            this.$hscrollbar.hidden = false;
        }
        this._isRequestingUpdateSize = false;
    }.bind(this));
    return this.sync;
};

HScroller.prototype.scrollInto = function (element) {
    if (Element["a" /* default */].prototype.isDescendantOf.call(element, this.$viewport)) {
        var elementBound = element.getBoundingClientRect();
        var viewportBound = this.$viewport.getBoundingClientRect();
        var currentScrollLeft = this.$viewport.scrollLeft;
        var newScrollLeft = currentScrollLeft;
        if (elementBound.right > viewportBound.right) {
            newScrollLeft = currentScrollLeft + (elementBound.right - viewportBound.right);
        }
        if (elementBound.left < viewportBound.left) {
            newScrollLeft = currentScrollLeft - (viewportBound.left - elementBound.left);
        }

        if (newScrollLeft != currentScrollLeft) {
            this.$viewport.scrollLeft = newScrollLeft;
        }
    }
}


function Scrollbar() {

    var res = Scroller_({
        class: ['absol-scrollbar', 'absol-hidden'],
        extendEvent: 'scroll',
        child: '.absol-scrollbar-button'
    });

    res.$button = Scroller_$('.absol-scrollbar-button', res);
    return res;
};

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.containsClass('absol-hidden')
    }
};



function VScrollbar() {

    var res = Scroller_({
        tag: 'scrollbar',
    });


    var body = Scroller_$(document.body);
    var top0, innerOffset0;
    var pointerMoveEventHandler = function (event) {
        event.preventDefault();
        var dy = event.clientY - top0;
        var newInnerOffset = innerOffset0 + dy * (res.innerHeight / res.outerHeight) * (res.outerHeight / res.getBoundingClientRect().height);
        if (newInnerOffset + res.outerHeight > res.innerHeight)
            newInnerOffset = res.innerHeight - res.outerHeight;
        if (newInnerOffset < 0) newInnerOffset = 0;
        res.innerOffset = newInnerOffset;
        //todo
        event.innerOffset = newInnerOffset;
        res.emit('scroll', event);
    };

    var finishEventHandler = function (event) {
        body.off('pointerleave', finishEventHandler);
        body.off('pointerup', finishEventHandler);
        body.off('pointermove', pointerMoveEventHandler);
    };

    var pointerDownEventHandler = function (event) {
        var boundRes = res.getBoundingClientRect();
        var boundButton = res.$button.getBoundingClientRect();
        top0 = event.clientY;
        if (event.target == res.$button) {
            innerOffset0 = res.innerOffset;
        }
        else {
            var newInnerOffset = map(top0 - boundButton.height / 2 - boundRes.top, 0, boundRes.height, 0, res.innerHeight);
            if (newInnerOffset + res.outerHeight > res.innerHeight)
                newInnerOffset = res.innerHeight - res.outerHeight;
            if (newInnerOffset < 0) newInnerOffset = 0;
            res.innerOffset = newInnerOffset;
            //todo
            event.innerOffset = newInnerOffset;
            innerOffset0 = newInnerOffset;
            res.emit('scroll', event);
        }

        body.on('pointerleave', finishEventHandler);
        body.on('pointerup', finishEventHandler);
        body.on('pointermove', pointerMoveEventHandler);

    };

    res.on('pointerdown', pointerDownEventHandler, true);

    return res;
};



VScrollbar.prototype.updateValue = function () {
    this.$button.addStyle('height', Math.min(this.outerHeight / this.innerHeight, 1) * 100 + '%');
    this.$button.addStyle('top', this.innerOffset / this.innerHeight * 100 + '%');
};


VScrollbar.property = {
    innerOffset: {
        set: function (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();
            }
        },
        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();
            }
        },
        get: function () {
            return this._outerHeight || 0;
        }
    }
};





function HScrollbar() {

    var res = Scroller_({
        tag: 'scrollbar',
    });

    var body = Scroller_$('body');
    var left0, innerOffset0;
    var pointerMoveEventHandler = function (event) {
        event.preventDefault();
        var dy = event.clientX - left0;
        var newInnerOffset = innerOffset0 + dy * (res.innerWidth / res.outerWidth) * (res.outerWidth / res.getBoundingClientRect().width);
        if (newInnerOffset + res.outerWidth > res.innerWidth)
            newInnerOffset = res.innerWidth - res.outerWidth;
        if (newInnerOffset < 0) newInnerOffset = 0;
        res.innerOffset = newInnerOffset;
        //todo
        event.innerOffset = newInnerOffset;
        res.emit('scroll', event);
    };

    var finishEventHandler = function (event) {
        body.off('pointerleave', finishEventHandler);
        body.off('pointerup', finishEventHandler);
        body.off('pointermove', pointerMoveEventHandler);
    };

    var pointerDownEventHandler = function (event) {
        var boundRes = res.getBoundingClientRect();
        var boundButton = res.$button.getBoundingClientRect();
        left0 = event.clientX;
        if (event.target == res.$button) {
            innerOffset0 = res.innerOffset;
        }
        else {
            var newInnerOffset = map(left0 - boundButton.width / 2 - boundRes.left, 0, boundRes.width, 0, res.innerWidth);
            if (newInnerOffset + res.outerWidth > res.innerWidth)
                newInnerOffset = res.innerWidth - res.outerWidth;
            if (newInnerOffset < 0) newInnerOffset = 0;
            res.innerOffset = newInnerOffset;
            //todo
            event.innerOffset = newInnerOffset;
            innerOffset0 = newInnerOffset;
            res.emit('scroll', event);
        }

        body.on('pointerleave', finishEventHandler);
        body.on('pointerup', finishEventHandler);
        body.on('pointermove', pointerMoveEventHandler);

    };

    res.on('pointerdown', pointerDownEventHandler, true);


    return res;
}



HScrollbar.prototype.updateValue = function () {
    this.$button.addStyle('width', Math.min(this.outerWidth / this.innerWidth, 1) * 100 + '%');
    this.$button.addStyle('left', this.innerOffset / this.innerWidth * 100 + '%');
};


HScrollbar.property = {
    innerOffset: {
        set: function (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();
            }
        },
        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();
            }
        },
        get: function () {
            return this._outerWidth || 0;
        }
    }
};



ACore["a" /* default */].creator.vscrollbar = VScrollbar;
ACore["a" /* default */].creator.hscrollbar = HScrollbar;
ACore["a" /* default */].creator.scrollbar = Scrollbar;
ACore["a" /* default */].creator.vscroller = VScroller;
ACore["a" /* default */].creator.hscroller = HScroller;
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/scroller.css
var scroller = __webpack_require__(21);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Searcher.js



var Searcher_ = ACore["a" /* default */]._;
var Searcher_$ = ACore["a" /* default */].$;


ACore["a" /* default */].creator['find-ico'] = function () {
    var res = Searcher_(
        '<svg class="find" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        ' <g transform="matrix(-1 0 0 1 99.478 -193.73)">' +
        '  <path d="m62.128 199.18c-18.859 0-34.148 15.289-34.148 34.148 0 5.4138 1.26 10.533 3.5026 15.081 0.6886 1.3965 1.4698 2.7392 2.3357 4.02-1.9962 2.1685-31.467 31.596-31.404 33.295 0.21757 5.8346 4.9404 8.7289 9.464 7.855 1.3264-0.25627 30.938-30.639 31.774-31.529 1.3906 0.89633 2.8508 1.6948 4.3702 2.3848 4.2995 1.9526 9.0756 3.04 14.105 3.04 18.859 0 34.147-15.288 34.147-34.147 3e-6 -18.859-15.288-34.148-34.147-34.148zm0.49444 8.2454a26.067 26.067 0 0 1 26.068 26.067 26.067 26.067 0 0 1-26.068 26.068 26.067 26.067 0 0 1-26.067-26.068 26.067 26.067 0 0 1 26.067-26.067z"/>' +
        ' </g>' +
        '</svg>'
    );
    return res;
};


ACore["a" /* default */].creator['times-circle-ico'] = function () {
    var res = Searcher_(
        '<svg class="times" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">\
            <g transform="translate(0,-197)">\
                <path d="m49.979 236.2-14.231-14.231-10.696 10.696 14.257 14.257-14.351 14.351 10.737 10.737 14.292-14.292 14.292 14.292 10.761-10.761-14.257-14.257 14.316-14.316-10.725-10.725zm50.021 10.804a50 50 0 0 1-50 50 50 50 0 0 1-50-50 50 50 0 0 1 50-50 50 50 0 0 1 50 50z" />\
            </g>\
        </svg>'
    );
    return res;
};



function SearchTextInput() {
    var res = Searcher_(
        {
            class: 'absol-search-text-input',
            child: [
                {
                    class: 'absol-search-text-input-container',
                    child: {
                        tag: 'input', attr: {
                            placeholder: 'search...'
                        }
                    }
                },
                {
                    class: 'absol-search-text-button-container',
                    child: {
                        tag: 'button',
                        child: ['find-ico', 'times-circle-ico']
                    }
                }
            ]
        }
    );



    res.defineEvent(['change', 'modify', 'stoptyping']);

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, SearchTextInput.eventHandler);
    res.$button = Searcher_$('button', res);
    res.$input = Searcher_$('input', res);

    res.$input.on('change', res.eventHandler.inputChange);
    res.$input.on('keyup', res.eventHandler.inputKeyUp);

    res.$button.on('click', function (event) {
        res.$input.value = '';
        res.eventHandler.inputKeyUp(event);
        setTimeout(function () {
            res.focus();
        }, 50);
    });
    return res;
};

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.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["a" /* default */].creator.searchcrosstextinput = function () {
    var res = Searcher_('searchtextinput', true);
    return res;
};

ACore["a" /* default */].creator.searchtextinput = SearchTextInput;
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/searcher.css
var searcher = __webpack_require__(23);

// EXTERNAL MODULE: ./node_modules/absol/src/HTML5/EventEmitter.js
var EventEmitter = __webpack_require__(3);

// CONCATENATED MODULE: ./node_modules/absol/src/String/stringMatching.js
/**
 * 
 * @param {String} a 
 * @param {String} b 
 */
function wordLike(a, b) {
    var m = a.length;
    var n = b.length;

    function map(i, j) {
        return i * (n + 1) + j;
    }
    var Q = Array((m + 1) * (n + 1)).fill(0);

    for (var i = 0; i < m; ++i)
        for (var j = 0; j < n; ++j)
            if (a.charAt(i) == b.charAt(j)) {
                if (Q[map(i + 1, j + 1)]) {
                    if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + 1)
                        Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1;
                }
                else
                    Q[map(i + 1, j + 1)] = Q[map(i, j)] + 1;
            }
            else
                Q[map(i + 1, j + 1)] = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]);

    return Q[map(m, n)] / Math.max(m, n);
}

/**
 * 
 * @param {Array<String>} sq1 
 * @param {Array<String>} sq2 
 */
function wordsMatch(sq1, sq2, matchWordPow) {
    matchWordPow = matchWordPow === undefined ? 1 : matchWordPow;

    var m = sq1.length;
    var n = sq2.length;
    function map(i, j) {
        return i * (n + 1) + j;
    }
    var Q = Array((m + 1) * (n + 1)).fill(0);
    var e = 0.0;
    for (var i = 0; i < m; ++i)
        for (var j = 0; j < n; ++j) {
            e = Math.pow(wordLike(sq1[i], sq2[j]), matchWordPow);

            if (Q[map(i + 1, j + 1)]) {
                if (Q[map(i + 1, j + 1)] < Q[map(i, j)] + e)
                    Q[map(i + 1, j + 1)] = Q[map(i, j)] + e;

            }
            else
                Q[map(i + 1, j + 1)] = Q[map(i, j)] + e;

            e = Math.max(Q[map(i + 1, j)], Q[map(i, j + 1)]);
            if (e > Q[map(i + 1, j + 1)]) Q[map(i + 1, j + 1)] = e;

        }

    return Q[map(m, n)];
}


function phraseMatch(a, b, matchWordPow) {
    matchWordPow = matchWordPow || 1;
    var spliter = /[\s,-\.+?\_]+/;
    var notEmp = function (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(Math.min(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(Math.max(m, n), 1);
}


// EXTERNAL MODULE: ./node_modules/absol/src/String/stringFormat.js
var stringFormat = __webpack_require__(7);

// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/ElementNS.js

function ElementNS() {
    Element["a" /* default */].call(this);
}

Object.defineProperties(ElementNS.prototype, Object.getOwnPropertyDescriptors(Element["a" /* default */].prototype));

ElementNS.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 */ var HTML5_ElementNS = (ElementNS);
// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Svg.js




function Svg(option) {
    Dom["a" /* default */].call(this, option);
    this.defaultTag = 'g';
    this.svgNS = "http://www.w3.org/2000/svg";


    delete this.buidDom;
    this.buildSvg = this.create.bind(this);
}


Object.defineProperties(Svg.prototype, Object.getOwnPropertyDescriptors(Dom["a" /* default */].prototype));

Svg.prototype.fromCode = function (code) {
    code = code.trim();
    var receptacle = document.createElement('div');
    var element;
    var prototypes;
    if (code.startsWith('<svg')) {
        receptacle.innerHTML = code;
        element = receptacle.childNodes[0];
        prototypes = Object.getOwnPropertyDescriptors(Element["a" /* default */].prototype);
        Object.defineProperties(element, prototypes);
        Element["a" /* default */].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(HTML5_ElementNS.prototype);
        Object.defineProperties(element, prototypes);
        HTML5_ElementNS.call(element);
    }
    return element;
};


Svg.prototype.makeNewElement = function (tagName) {
    return document.createElementNS(this.svgNS, tagName);
};

/**
 * 
 * @param {Element} element 
 */
Svg.prototype.attach = function (element) {
    if (typeof element.attr == 'function') return;
    var prototypes = Object.getOwnPropertyDescriptors(HTML5_ElementNS.prototype);
    Object.defineProperties(element, prototypes);
    HTML5_ElementNS.call(element);
};

Svg.ShareInstance = new Svg();

Svg.svgToCanvas = function (element) {
    if (typeof element == 'string') {
        element = Dom["a" /* default */].ShareInstance.$(element);
    }
    if (element && element.tagName == 'svg') {
        var cssTexts = {};
        var depthClone = function (originElt) {
            var newElt = originElt.cloneNode();//no deep
            if (!originElt.getAttributeNS) return newElt;//is text node
            var cssRules = Element["a" /* default */].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] = Element["a" /* default */].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["a" /* default */].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["a" /* default */].ShareInstance._('img');
        image.attr('src', src)
            .addTo(renderSpace);
        var canvas = document.createElement("canvas");
        renderSpace.addChild(canvas);
        return Dom["a" /* default */].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');
    }
};


Svg.svgToExportedString = function (element) {
    if (typeof element == 'string') {
        element = Dom["a" /* default */].ShareInstance.$(element);
    }
    if (element && element.tagName == 'svg') {
        var cssTexts = {};
        var depthClone = function (originElt) {
            var newElt = originElt.cloneNode();//no deep
            if (!originElt.getAttributeNS) return newElt;//is text node
            var cssRules = Element["a" /* default */].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] = Element["a" /* default */].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["a" /* default */].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');
    }
};

/* harmony default export */ var HTML5_Svg = (Svg);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/BScroller.js



var BScroller_ = ACore["a" /* default */]._;
var BScroller_$ = ACore["a" /* default */].$;

function BScroller(data) {
    if (data && data.elt) {
        return BScroller_$(data.elt)
    }
    else
        return BScroller_('.absol-bscroller');
}


BScroller.prototype.scrollInto = function (element) {
    if (Element["a" /* default */].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["a" /* default */].install('bscroller', BScroller);

/* harmony default export */ var js_BScroller = (BScroller);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTable.js









var privateDom = new Dom["a" /* default */]().install(ACore["a" /* default */]);
var SelectTable_$ = privateDom.$;
var SelectTable_ = privateDom._;


function SelectTable() {
    var res = 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']

                        }

                    }
                ]
            }
        ]
    });

    res.sync = res.afterAttached();
    res.eventHandler = OOP["a" /* default */].bindFunctions(res, SelectTable.eventHandler);
    res.$buttonsContainer = SelectTable_$('.absol-select-table-buttons-container', res);
    res.$searchContainer = SelectTable_$('.absol-select-table-searchtextinput-container', res);
    res.$nonselectedItemsContainer = SelectTable_$('.absol-select-table-nonselected-items-container', res);
    res.$selectedItemsContainer = SelectTable_$('.absol-select-table-selected-items-container', res);

    res.$nonselectedSearchItemsContainer = SelectTable_$('.absol-select-table-nonselected-search-items-container', res);
    res.$selectedSearchItemsContainer = SelectTable_$('.absol-select-table-selected-search-items-container', res);

    res.$removeAllBtn = SelectTable_$('button.remove-all', res).on('click', res.eventHandler.removeAllBtnClick);
    res.$addAllBtn = SelectTable_$('button.add-all', res).on('click', res.eventHandler.addAllBtnClick);
    res.$vscrollerSelected = SelectTable_$('bscroller#selected', res)
    res.$vscrollerNonselected = SelectTable_$('bscroller#nonselected', res);
    res.$body = SelectTable_$('.absol-select-table-body', res);
    res.$header = SelectTable_$('.absol-select-table-header', res);
    res.$searchTextInput = SelectTable_$('searchtextinput', res).on('stoptyping', res.eventHandler.searchTextInputModify);
    res.$addAllBtn.updateSize = function () {
        res.updateScroller && res.updateScroller();
    };
    Dom["a" /* default */].addToResizeSystem(res.$addAllBtn);
    return res;
};



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["a" /* default */].copyEvent(event, {}), this);
    this.updateScroller();
};

SelectTable.eventHandler.removeAllBtnClick = function (event) {
    this.removeAll();
    if (this.searching) {
        this.eventHandler.searchTextInputModify(event);
    }
    this.emit('removeall', EventEmitter["a" /* default */].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 = Object(stringFormat["b" /* 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 (Object(stringFormat["b" /* nonAccentVietnamese */])(b.text) > Object(stringFormat["b" /* nonAccentVietnamese */])(a.text)) return -1;
                return 1;
            }
            return b.score - a.score;
        });
        result = result.filter(function (x) {
            return x.score > 0;
        });
    }
    else {
        var its = items.map(function (item) {
            var res = { item: item, text: typeof item === 'string' ? item : item.text };
            var text = res.text.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
            res.score = (phraseMatch(text, filterText)
                + phraseMatch(Object(stringFormat["b" /* nonAccentVietnamese */])(text), Object(stringFormat["b" /* nonAccentVietnamese */])(filterText))) / 2;
            if (Object(stringFormat["b" /* nonAccentVietnamese */])(text).replace(/s/g, '').toLowerCase().indexOf(Object(stringFormat["b" /* 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 (Object(stringFormat["b" /* nonAccentVietnamese */])(b.text) > Object(stringFormat["b" /* 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.containsClass('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.containsClass('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["a" /* default */].copyEvent(event, { item: item }), self);
                            }
                            else {
                                this.addTo($selectedItemsContainer);
                                self.emit('add', EventEmitter["a" /* default */].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["a" /* default */].copyEvent(event, { item: item }), self);
                            }
                            else {
                                this.addTo($selectedItemsContainer);
                                self.emit('add', EventEmitter["a" /* default */].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["a" /* default */].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["a" /* default */].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["a" /* default */].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["a" /* default */].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["a" /* default */].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["a" /* default */].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 HTML5_Svg.ShareInstance.buildSvg(
        '<svg class="add-icon" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        '<g transform="translate(0,-197)">' +
        '<path d="m39.873 198.21v38.668h-38.668v20.252h38.668v38.668h20.253v-38.668h38.668v-20.252h-38.668v-38.668z" style="fill-rule:evenodd;stroke-linejoin:round;stroke-width:2.4109;" />' +
        '</g>' +
        '</svg>'
    );
};

function SubIcon() {
    return HTML5_Svg.ShareInstance.buildSvg(
        '<svg class="sub-icon" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">' +
        ' <g transform="translate(0,-197)">' +
        '  <path d="m98.795 236.87v20.253h-97.589v-20.253z" style="fill-rule:evenodd;stroke-linejoin:round;stroke-width:2.411;"/>' +
        ' </g>' +
        '</svg>'
    );
};

privateDom.install({
    subicon: SubIcon,
    addicon: AddIcon,
    item: Item
});

SelectTable.privateDom = privateDom;


ACore["a" /* default */].creator.selecttable = SelectTable;

/* harmony default export */ var js_SelectTable = (SelectTable);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttable.css
var selecttable = __webpack_require__(25);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Menu.js





var Menu_ = ACore["a" /* default */]._;
var Menu_$ = ACore["a" /* default */].$;



function MenuButton() {
    var res = Menu_({
        tag: 'button',
        class: 'absol-vmenu-button',
        child: [
            {
                class: 'absol-vmenu-button-ext-icon-container',
                child: 'img.absol-vmenu-button-icon'
            },
            '.absol-vmenu-button-text',
            '.absol-vmenu-button-key',
            {
                class: 'absol-vmenu-arrow-container',
                child: 'span.absol-vmenu-arrow'
            }
        ]
    });

    res.$text = Menu_$('.absol-vmenu-button-text', res);
    res.$key = Menu_$('.absol-vmenu-button-key', res);


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

    OOP["a" /* default */].drillProperty(res, res.$text, 'text', 'innerHTML');
    OOP["a" /* default */].drillProperty(res, res.$key, 'key', 'innerHTML');


    return res;
};

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) {
            Menu_(value).addTo(this.$iconCtn);
        }
    },
    get: function () {
        return this._icon;
    }
};

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


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

ACore["a" /* default */].install('menubutton', MenuButton);


function Dropdown(data) {
    data = data || {};

    var res = Menu_({
        class: ['absol-drop-hidden', 'absol-dropdown'], child: '.absol-dropdown-content'
    });

    res.$container = Menu_$('.absol-dropdown-content', res);

    return res;
};



Dropdown.property = {};
Dropdown.property.show = {
    set: function (value) {
        if (value) {
            this.removeClass('absol-drop-hidden');
            var aPst = this.findAvailablePosition();
            if (aPst.overlapRight) {
                this.removeClass('overlap-left');
            }
            else if (aPst.overlapLeft) {
                this.addClass('overlap-left');
            }
        }
        else {
            this.addClass('absol-drop-hidden');
        }
    },
    get: function () {
        return !this.containsClass('absol-drop-hidden');
    }
};

Dropdown.prototype.findAvailablePosition = function () {
    var outBound = Dom["a" /* default */].traceOutBoundingClientRect(this);
    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.right + outBound.right;
    var result = {};
    if (distTop >= containerBound.height) result.top = true;
    if (distBottom >= containerBound.height) result.bottom = true;
    if (distLeft >= containerBound.width) result.left = true;
    if (distRight >= containerBound.width) result.right = true;
    if (distRight + bound.width >= containerBound.width) result.overlapRight = true;
    if (distLeft + bound.width >= containerBound.width) result.overlapLeft = true;
    //todo: more
    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(data) {
    data = data || {};
    //default : hidden
    var res = Menu_({
        class: ['absol-drop-hidden', 'absol-dropright'], child: '.absol-dropright-content', data: { $trigger: undefined, $content: undefined, _isShow: false }
    });

    res.$container = Menu_$('.absol-dropright-content', res);

    return res;
};


Object.assign(Dropright.prototype, Dropdown.prototype);


//is the same
Dropright.prototype.addChild = Dropdown.prototype.addChild;
Dropright.prototype.clearChild = Dropdown.prototype.clearChild;
Dropright.property = Object.assign({}, Dropdown.property);


function VMenuLine() {
    return Menu_('<div class="absol-vmenu-line"><div></div></div>');
}

function VMenuItem() {

    var res = Menu_({
        tag: 'dropright',
        extendEvent: ['press', 'enter'],
        child: ['menubutton',
            {
                tag: 'vmenu',
            }]
    });

    res.sync = new Promise(function (rs) {
        Menu_('attachhook').addTo(res).on('error', function () {
            this.remove();
            rs();
        })
    });
    res.$dropper = Menu_$('dropright', res);
    res.$vmenu = Menu_$('vmenu', res);
    res.$button = Menu_$('menubutton', res);
    
    res.$text = res.$button.$text;

    res.$key = res.$button.$key;
    res.$arrow = res.$button.$arrow;
    res.$iconCtn =  res.$button.$iconCtn;


    OOP["a" /* default */].drillProperty(res, res.$button, ['text', 'extendClasses', 'extendStyle', 'key', 'icon', 'iconSrc']);
    OOP["a" /* default */].drillProperty(res, res.$vmenu, ['activeTab']);

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, VMenuItem.eventHandler);
    res.$vmenu.on('press', res.eventHandler.pressItem, true);

    res.$button.on('click', res.eventHandler.clickButton, true);
    res.$button.on('mouseenter', res.eventHandler.enterButton, true);

    return res;
};

VMenuItem.prototype.init = function (props) {
    Object.assign(this, props || {});
    this.sync = this.sync.then(this.autoFixParrentSize.bind(this));
};


VMenuItem.prototype.autoFixParrentSize = function () {
    var parentWidth = this.$dropper.getBoundingClientRect().width;// dropper is fixed parent content size
    var buttonWidth = this.$button.getBoundingClientRect().width;
    var fontSize = this.$text.getFontSize();
    this.$text.addStyle('margin-right', (parentWidth - buttonWidth) / fontSize + 'em');
};

VMenuItem.eventHandler = {};


VMenuItem.eventHandler.enterButton = function (event) {
    event.menuItem = this;
    var newEvent = EventEmitter["a" /* default */].copyEvent(event);
    this.emit('enter', newEvent, this);
};


VMenuItem.eventHandler.pressItem = function (event) {
    var newEvent = EventEmitter["a" /* default */].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 = EventEmitter["a" /* default */].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.disable = {
    set: function (value) {
        if (value) {
            this.addClass('absol-menu-item-disable');
        }
        else {
            this.removeClass('absol-menu-item-disable');
        }
    },
    get: function () {
        return this.containsClass('absol-menu-item-disable');
    }
};




function VMenu() {

    var res = Menu_({
        class: 'absol-vmenu',
        extendEvent: 'press'
    });

    res.sync = new Promise(function (rs) {
        Menu_('attachhook').addTo(res).on('error', function () {
            this.remove();
            rs();
        })
    });
    res.eventHandler = OOP["a" /* default */].bindFunctions(res, VMenu.eventHandler);
    return res;
};


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.disable;
                item.activeTab = -1;
                if (i == tabIndex && !item.disable) {
                    item.$button && item.items && item.items.length > 0 && item.$button.addClass('absol-vmenu-button-hover');
                }
                else {
                    item.$button && item.$button.removeClass('absol-vmenu-button-hover');
                }
            }
        }
    },
    get: function () {
        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) { 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', EventEmitter["a" /* default */].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 res;
        if (typeof (item) == 'string') {
            res = Menu_('vmenuline');
        }
        else {
            res = Menu_({
                tag: 'vmenuitem',
                props: Object.assign({ _tabIndex: index }, item),
                on: {
                    enter: { callback: this.eventHandler.enterItem, cap: true },
                    press: { callback: this.eventHandler.pressItem, cap: true }
                }
            });
        }
        this.addChild(res);
        return res;
    }.bind(this));
    //todo
};


function HMenuItem() {

    var res = Menu_({
        tag: 'dropdown',
        extendEvent: ['press', 'enter'],
        child: ['button.absol-hmenu-button',
            'vmenu'
        ]
    });

    res.$vmenu = Menu_$('vmenu', res);
    res.$dropDown = res;
    res.$button = Menu_$('button.absol-hmenu-button', res);
    OOP["a" /* default */].drillProperty(res, res.$button, 'text', 'innerHTML');
    OOP["a" /* default */].drillProperty(res, res.$vmenu, 'items');
    OOP["a" /* default */].drillProperty(res, res.$vmenu, 'activeTab');

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, HMenuItem.eventHandler);

    res.$button.on('click', res.eventHandler.clickButton);
    res.$button.on('mouseenter', res.eventHandler.enterButton, true);
    res.$vmenu.on('press', res.eventHandler.pressItem, true);

    //property show not need because dropdown is itself
    return res;
};


HMenuItem.eventHandler = {};

HMenuItem.eventHandler.clickButton = function (event) {
    event.menuItem = this;
    event.hmenuItem = this;
    this.emit('press', EventEmitter["a" /* default */].copyEvent(event, { target: this }), this);
};

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

HMenuItem.eventHandler.pressItem = function (event) {
    this.emit('press', EventEmitter["a" /* default */].copyEvent(event, { target: this }), this);
};

HMenuItem.prototype = {};

HMenuItem.prototype.disable = VMenuItem.prototype.disable;





HMenuItem.prototype.init = function (props) {
    props = props || {};
    Object.assign(this, props);
};



function HMenu() {


    var res = Menu_({
        class: 'absol-hmenu',
        extendEvent: ['press', 'enter']
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, HMenu.eventHandler);

    return res;
};


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;
        setTimeout(function () {
            Menu_$(document.body).once('click', this.eventHandler.clickSomewhere, false);
        }.bind(this), 100);
    }
    else {
        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 (event.menuItem) {
        //  wait for next time
        setTimeout(function () {
            Menu_$(document.body).once('click', this.eventHandler.clickSomewhere, false);
        }.bind(this), 100);
    }
    else {
        this.activeTab = -1;
    }
};


HMenu.prototype._childFromItems = function (items) {

    this.clearChild();
    this.$items = items.map(function (item, index) {
        var res = Menu_({
            tag: 'hmenuitem',
            props: Object.assign({ _tabIndex: index }, item),
            on: {
                press: { callback: this.eventHandler.pressItem, cap: true },
                enter: { callback: this.eventHandler.enterItem, cap: true }
            }
        });
        this.addChild(res);
        return res;
    }.bind(this));

};

HMenu.prototype.init = function (props) {
    Object.assign(this, props || {});
};


HMenu.property = {};
HMenu.property.items = {
    set: function (items) {
        this._childFromItems(items || []);
    },
    get: function () {
        return this.$items;
    }
};


HMenu.property.activeTab = {
    set: function (tabIndex) {
        this._activeTab = tabIndex;
        for (var i = 0; i < this.$items.length; ++i) {
            var item = this.$items[i];
            item.show = i == tabIndex && !item.disable;
            item.activeTab = -1;
            if (i == tabIndex && !item.disable) {
                item.$button && item.items && item.items.length > 0 && item.$button.addClass('absol-hmenu-button-hover');
            }
            else {
                item.$button && item.$button.removeClass('absol-hmenu-button-hover');
            }
        }
    },
    get: function () {
        return this._activeTab;
    }
};



ACore["a" /* default */].creator.hmenu = HMenu;
ACore["a" /* default */].creator.vmenuitem = VMenuItem;
ACore["a" /* default */].creator.vmenu = VMenu;
ACore["a" /* default */].creator.dropright = Dropright;
ACore["a" /* default */].creator.vmenuline = VMenuLine;

ACore["a" /* default */].creator.dropdown = Dropdown;
ACore["a" /* default */].creator.hmenuitem = HMenuItem;
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/menu.css
var css_menu = __webpack_require__(27);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ContextMenu.js





var ContextMenu_ = ACore["a" /* default */]._;
var ContextMenu_$ = ACore["a" /* default */].$;

/**
 * If a element want to capture contextmenu event, it extendEvent: 'contextmenu'
 * 
 */
function ContextHook() {
    var res = ContextMenu_({
        tag: 'textarea',
        class: 'absol-context-menu-hook'
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, ContextHook.eventHandler);
    res.on('contextmenu', res.eventHandler.contextmenu, true);
    return res;
};

ContextHook.prototype.handle = function (event) {
    if (!this.parentElement) return;
    var isRightMB;
    event = event || window.event;
    var body = ContextMenu_$(document.body);

    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;

    var needHandle = false;
    if (isRightMB) {
        var current = event.target;
        while (current && !needHandle) {
            if (current.isSupportedEvent && current.isSupportedEvent('contextmenu'))
                needHandle = true;
            current = current.parentElement;
        }

        if (needHandle) {
            this.$target = event.target;

            this.addStyle('z-index', '1000000');
            this.removeStyle('display');

            this.moveTo(event);
            body.on('mouseup', this.eventHandler.mousefinish);
            body.on('mouseleave', this.eventHandler.mousefinish);
            body.on('mousemove', this.eventHandler.mousemove);
        }
    }

    return needHandle;
};

ContextHook.prototype.moveTo = function (event) {
    if (!this.parentElement) return;
    var parentBound = this.parentElement.getBoundingClientRect();

    this.addStyle('left', -parentBound.left + event.clientX - 7 + 'px');
    this.addStyle('top', -parentBound.top + event.clientY - 7 + 'px');
}


ContextHook.eventHandler = {};
ContextHook.eventHandler.contextmenu = function (event) {
    this.addStyle('z-index', '-1000');
    event.preventDefault();

    var parentBound = this.parentElement.getBoundingClientRect();
    var propagation = true;

    var localEvent = {
        clientX: event.clientX,
        clientY: event.clientY,
        target: this.$target,
        hinge: this.parentElement,
        relativeX: event.clientX - parentBound.left,
        relativeY: event.clientY - parentBound.top,
        showContextMenu: function (props, onSelectItems) {
            this.hinge.showContextMenu(props, event, onSelectItems);
        },
        stopPropagation: function () {
            propagation = false;
        }
    }

    var current = this.$target;
    while (current && propagation) {
        if (current.isSupportedEvent && current.isSupportedEvent('contextmenu')) {
            current.emit('contextmenu', localEvent, current, this);
        }
        current = current.parentElement;
    }

};


ContextHook.eventHandler.mousemove = function (event) {
    this.moveTo(event);
};

ContextHook.eventHandler.mousefinish = function (event) {
    setTimeout(function () {
        this.addStyle('z-index', '-1000');
        this.addStyle('display', 'none');
    }.bind(this), 1);
    var body = ContextMenu_$(document.body);
    body.off('mouseup', this.eventHandler.mousefinish);
    body.off('mouseleave', this.eventHandler.mousefinish);
    body.off('mousemove', this.eventHandler.mousemove);
};


/**
 * Add this element to some thing like body, and when mousedown event was fired, let call `thisElement.handle`
 * every element in event pathlist will fire contextmenu event if supported  
 * */
function ContextCaptor() {

    var res = ContextMenu_({
        extendEvent: 'requestcontextmenu',
        class: 'absol-context-hinge',
        child: ['contexthook', 'vmenu.absol-context-menu']
    });
    res.$contexHook = ContextMenu_$('contexthook', res);
    res.$contextMenu = ContextMenu_$('vmenu.absol-context-menu', res);
    res._contextMenuSync = Promise.resolve();

    return res;
};

ContextCaptor.prototype.handle = function (event) {
    return this.$contexHook.handle(event);
};

/**
 * @param {HTMLElement} element
 * @returns {HTMLElement}
 */
ContextCaptor.prototype.attachTo = function (element) {
    if (!this._listener) {
        this._listener = this.handle.bind(this);
    }
    if (this._attachedElement) {
        this._attachedElement.removeEventListener('mousedown', this._listener, true);
        this._attachedElement = undefined;
    }
    this._attachedElement = element;
    if (element) {
        element.addEventListener('mousedown', this._listener, true);
    }
    return this;
};



/**
 * 
 * @param {Object} props vmenu property
 * @param {Event} event for align menu
 */
ContextCaptor.prototype.showContextMenu = function (props, event, onSelectItems) {
    Object.assign(this.$contextMenu, props);
    onSelectItems = onSelectItems || function () { };
    var bound = this.getBoundingClientRect();
    var viewableBound = Dom["a" /* default */].traceOutBoundingClientRect(this);
    var left = event.clientX - bound.left;
    var top = event.clientY - bound.top;
    var body = ContextMenu_$('body');
    this.emit('requestcontextmenu', EventEmitter["a" /* default */].copyEvent(event, { target: this }));
    this._contextMenuSync = this._contextMenuSync.then(function () {
        return new Promise(function (resolve) {
            setTimeout(function () {
                this.$contextMenu.addStyle('z-index', '1000');
                this.$contextMenu.addStyle('visibility', 'visible');

                var viewBound = Dom["a" /* default */].traceOutBoundingClientRect(this.$contextMenu.parentElement);
                var menuBound = this.$contextMenu.getBoundingClientRect();
                if (menuBound.width + event.clientX > viewBound.right) {
                    this.$contextMenu.addStyle('left', left - menuBound.width + 'px');

                }
                else {
                    this.$contextMenu.addStyle('left', left + 'px');
                }

                if (menuBound.height + event.clientY > viewBound.bottom) {
                    this.$contextMenu.addStyle('top', top - menuBound.height + 'px');
                }
                else {
                    this.$contextMenu.addStyle('top', top + 'px');
                }

                var finishCallback = function (event) {

                    body.off('click', finishCallback);
                    this.off('contextmenu', finishCallback);
                    this.off('requestcontextmenu', finishCallback);
                    this.$contextMenu.off('press', onSelectItems, true);
                    this.$contextMenu.off('press', finishCallback);
                    this.hideContextMenu();
                    resolve();
                }.bind(this);

                var mouseDownEventHandler = function (event) {
                    if (EventEmitter["a" /* default */].isMouseRight(event))
                        finishCallback.call(this, event);
                }

                body.on('mousedown', mouseDownEventHandler);
                body.on('click', finishCallback);
                this.on('contextmenu', finishCallback);
                this.on('requestcontextmenu', finishCallback);
                this.$contextMenu.on('press', onSelectItems, true);
                this.$contextMenu.on('press', finishCallback);
            }.bind(this), 50);
        }.bind(this));
    }.bind(this));
};


ContextCaptor.prototype.hideContextMenu = function () {
    this.$contextMenu.addStyle({ 'z-index': ' -1000', top: '0', left: '-1000' });
    this.$contextMenu.removeStyle('visibility');

};

ACore["a" /* default */].creator.contextcaptor = ContextCaptor;
ACore["a" /* default */].creator.contexthook = ContextHook;
//todo: may be need closeContextMenu
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/contextmenu.css
var contextmenu = __webpack_require__(29);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Modal.js


function Modal() {
    var $ = ACore["a" /* default */].$;
    var _ = ACore["a" /* default */]._;

    var res = _({
        class: 'absol-modal',
        child: {
            class: 'absol-modal-hcenter',
            child: {
                class: 'absol-modal-vcenter',
                child: '.absol-modal-container'

            }
        }
    });

    res.$container = $('.absol-modal-container', res);

    return res;
};


Modal.prototype.addChild = function (child) {
    this.$container.addChild.apply(this.$container, arguments);
    return this;
};


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


ACore["a" /* default */].creator.modal = Modal;

/* harmony default export */ var js_Modal = (Modal);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/modal.css
var modal = __webpack_require__(31);

// CONCATENATED MODULE: ./node_modules/absol/src/Converter/file.js
function blobToFile(theBlob, fileName) {
    return new File([theBlob], fileName);
}

function dataURItoBlob(dataURI) {
    var byteString = atob(dataURI.split(',')[1]);
    var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
    var ab = new ArrayBuffer(byteString.length);
    var ia = new Uint8Array(ab);
    for (var i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }
    var blob = new Blob([ab], { type: mimeString });
    return blob;

}

function blobToArrayBuffer(blob) {
    var fileReader = new FileReader();
    return new Promise(function (rs) {
        fileReader.onload = function (event) {
            var arrayBuffer = event.target.result;
            rs(arrayBuffer);
        };
        fileReader.readAsArrayBuffer(blob);
    });
}

function stringToBlob(text, type) {
    return new Blob([text], {
        type: type || 'text/plain'
    });
}
// CONCATENATED MODULE: ./node_modules/absol/src/HTML5/Text.js


function getTextNodesIn(node) {
    var textNodes = [];
    if (node.nodeType == 3) {
        textNodes.push(node);
    } else {
        var children = node.childNodes;
        for (var i = 0, len = children.length; i < len; ++i) {
            textNodes.push.apply(textNodes, getTextNodesIn(children[i]));
        }
    }
    return textNodes;
}

/**
 * 
 * @param {Element} el 
 * @param {Range} range 
 * @param {Number} start 
 * @returns {Number} -1: ok,  ret >= 0(is length of text) : need move to next element
 * 
 */
function setSelectionRangeStart(el, range, start) {
    if (start > 0) {
        if (el.nodeType == Node.TEXT_NODE) {
            var text = el.data;
            if (start <= text.length) {
                range.setStart(el, start);
                return -1;
            }
            else
                return text.length;
        } if (el.tagName.toLowerCase() == 'br') {
            return 0;
        }
        else {
            var delta = 0;
            var i = 0;
            var textLength = 0;
            var newLine = false;
            while (delta >= 0 && i < el.childNodes.length) {
                var childElt = el.childNodes[i];

                if (newLine) {
                    newLine = false;
                    ++textLength;
                }
                delta = setSelectionRangeStart(childElt, range, start - textLength);

                if (delta >= 0) textLength += delta;
                if (childElt.nodeType != Node.TEXT_NODE
                    && (window.getComputedStyle(childElt).display == 'block'
                        || childElt.tagName.toLowerCase() == 'br')) {
                    newLine = true;
                }
                ++i;
            }
            if (delta >= 0) return textLength;
            return -1;
        }
    }
    else {
        range.setStart(el, 0);
        return -1;
    }
}

/**
 * 
 * @param {Element} el 
 * @param {Range} range 
 * @param {Number} end 
 * @returns {Number} -1: ok,  ret >= 0(is length of text) : need move to next element
 * 
 */
function setSelectionRangeEnd(el, range, end) {
    if (end > 0) {
        if (el.nodeType == Node.TEXT_NODE) {
            var text = el.data;
            if (end <= text.length) {
                range.setEnd(el, end);
                return -1;
            }
            else
                return text.length;
        } if (el.tagName.toLowerCase() == 'br') {
            return 0;
        }
        else {
            var delta = 0;
            var i = 0;
            var textLength = 0;
            var newLine = false;
            while (delta >= 0 && i < el.childNodes.length) {
                var childElt = el.childNodes[i];

                if (newLine) {
                    newLine = false;
                    ++textLength;
                }
                delta = setSelectionRangeEnd(childElt, range, end - textLength);

                if (delta >= 0) textLength += delta;
                if (childElt.nodeType != Node.TEXT_NODE
                    && (window.getComputedStyle(childElt).display == 'block'
                        || childElt.tagName.toLowerCase() == 'br')) {
                    newLine = true;
                }
                ++i;
            }
            if (delta >= 0) return textLength;
            return -1;
        }
    }
    else {
        range.setEnd(el, 0);
        return -1;
    }
}

function setSelectionRange(el, start, end) {
    if (document.createRange && window.getSelection) {
        var range = document.createRange();
        range.selectNodeContents(el);
        var delta;
        if (start >= 0) {
            delta = setSelectionRangeStart(el, range, start);
            if (delta >= 0) range.setStart(el, el.childNodes.length);
        }
        else {
            start = 0;
            range.setStart(el, 0);
        }
        if (end >= start) {
            delta = setSelectionRangeEnd(el, range, end);
            if (delta >= 0) range.setEnd(el, el.childNodes.length);
        }
        var sel = window.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
    } else if (document.selection && document.body.createTextRange) {
        var textRange = document.body.createTextRange();
        textRange.moveToElementText(el);
        textRange.collapse(true);
        textRange.moveEnd("character", end);
        textRange.moveStart("character", start);
        textRange.select();
    }
}

function getTextIn(e) {
    if (e.nodeType == Node.TEXT_NODE) {
        return e.data;
    }
    if (e.tagName && e.tagName.toLowerCase() == 'br') return '';

    var texts = [];
    var newLine = false;
    for (var i = 0; i < e.childNodes.length; ++i) {
        if (newLine) {
            newLine = false;
            texts.push('\n');
        }
        var childElt = e.childNodes[i];
        texts.push(getTextIn(childElt));


        if (childElt.nodeType != Node.TEXT_NODE
            && (window.getComputedStyle(childElt).display == 'block'
                || childElt.tagName.toLowerCase() == 'br')) {
            newLine = true;
        }
    }
    return texts.join('');
}


function textToNodes(text) {
    var lines = text.split(/\r?\n/);
    return lines.map(function (text) {
        if (text.length == 0) {
            return Dom["a" /* default */].ShareInstance._({
                child: { tag: 'br' }
            });
        }
        else {
            return Dom["a" /* default */].ShareInstance._({
                child: { text: text }
            });
        }
    });
}

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/MediaInput.js










var MediaCore = new Dom["a" /* default */]({ creator: Object.assign({}, ACore["a" /* default */].creator) });

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() {
    var res = 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',
            ]
        }
    });


    return res;
}

MediaInput.prototype.preInit = function () {
    this.eventHandler = OOP["a" /* default */].bindFunctions(this, MediaInput.eventHandler);
    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.prototype.init = function (props) {
    this.preInit();
    this.super(props);
}




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

    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["a" /* default */].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();
    setSelectionRange(this.$editor, Infinity);
};

MediaInput.prototype.clear = function () {
    Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) {
        return e._azar_extendTags && e._azar_extendTags.imagepreview;
    }).forEach(function (e) {
        e.selfRemove();
    });

    Array.prototype.filter.call(this.$imagePreviewContainer.childNodes, function (e) {
        return e._azar_extendTags && e._azar_extendTags.filepreview;
    }).forEach(function (e) {
        return e.selfRemove();
    });

    this.$editor.innerHTML = "";
    this.emit('update', { target: this }, this);
};


MediaInput.prototype.escapeSpace = function (s) {
    return s.replace(/\s/g, '&nbsp');
};


MediaInput.prototype.unescapeSpace = function (s) {
    return s.replace(/&nbsp/g, ' ');
};


MediaInput.prototype.getTextFromElements = function (element) {
    return getTextIn(element);
    // var self = this;

    // function visit(e, prevE) {
    //     var ac = '';
    //     var isNewLine = false;
    //     if (prevE && prevE.nodeType != Node.TEXT_NODE) {

    //         if (prevE.tagName && prevE.tagName.toLowerCase() == 'br') {
    //             isNewLine = true;
    //         }
    //         else if (Element.prototype.getComputedStyleValue.call(prevE, 'display') == 'block') {
    //             isNewLine = true;
    //         }
    //     }

    //     if (e.nodeType == Node.TEXT_NODE) {
    //         if (isNewLine) ac += '\n';
    //         ac += e.data;
    //     }
    //     else {
    //         var lastE = undefined;
    //         for (var i = 0; i < e.childNodes.length; ++i) {
    //             ac += visit(e.childNodes[i], i > 0 ? e.childNodes[i - 1] : null);

    //         }
    //     }
    //     return ac;
    // }

    // return visit(element);
};

MediaInput.prototype.getElementsFromText = function (text) {
    var newElements = text.split('\n')
        .map(function (text) {
            return document.createTextNode(text);
        })
        .reduce(function (ac, cr, i, arr) {
            if (i > 0)
                ac.push(MediaInput_('br'));
            ac.push(cr);
            return ac;
        }, []);
    return newElements;
};




// MediaInput.prototype.textOnly = function(e) {
//     if (e.nodeType == Node.TEXT_NODE) return e.textContent;
//     if (!e.tagName) return '';
//     if (e.tagName.toLowerCase() == 'br') return '\n';
//     return ($(e).getComputedStyleValue('display') == 'block' ? '\n' : '') + Array.prototype.map.call(e.childNodes, this.textOnly.bind(this)).join('')
// };

MediaInput.prototype.makeTextOnly = function () {
    var self = this;
    var editor = this.$editor;
    Array.apply(null, this.$editor.childNodes).forEach(function (e) {
        e = MediaInput_$(e);
        if (e.nodeType == Node.TEXT_NODE) return;
        if (e.tagName) {
            var tagName = e.tagName.toLowerCase();
            if (tagName == 'br') return;
            if (tagName.match(/img|script|svg|button|iframe|hr|video|canvas/)) {
                e.selfRemove(e);
            }

            if (tagName.match(/select|input|textarea/)) {
                e.selfReplace(document.createTextNode(e.value));
                return;
            }

            var newElements = self.getElementsFromText(self.getTextFromElements(e));
            var lastElement;
            if (e.getComputedStyleValue('display') == 'block') {
                lastElement = MediaInput_('br');
            }
            else {
                lastElement = newElements.pop();
            }
            e.selfReplace(lastElement);
            newElements.forEach(function (nE) {
                editor.addChildBefore(nE, lastElement);
            });
        }
    });


    this.emit('update', { target: editor }, this);
};

MediaInput.eventHandler = {};


MediaInput.eventHandler.keydown = function (event) {
    if (event.key == "Enter") {
        if (!event.ctrlKey && !event.altKey && !event.shiftKey) {
            event.preventDefault();
            this.eventHandler.send(event);
            this.snapText();
        }

    }
    if (event.ctrlKey && event.key == 'z') {
        event.preventDefault();
        this.undoText();
    }
    if (event.ctrlKey && event.key == 'x') {
        setTimeout(this.snapText.bind(this), 100)
    }
    setTimeout(this.emit.bind(this, 'update', event, this), 1);
};


MediaInput.eventHandler.send = function (event) {
    if (this.images.length == 0 && this.text.trim().length == 0 && this.files.length == 0) {
        return;
    }
    this.emit('send', event, this);
    this.snapText();
};

MediaInput.eventHandler.clickAddImage = function (event) {
    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 {
                setSelectionRange(last, Infinity);
            }
        }
    }

    /**Safari bug */
    if (pasteData && pasteData.items) {
        var items = pasteData.items;
        var isAddImage = false;
        for (var i = 0; i < items.length; i++) {
            if (items[i].type.indexOf('image') !== -1) {
                var blob = items[i].getAsFile();
                var URLObj = (window.URL || window.webkitURL);
                var source = URLObj.createObjectURL(blob);
                var file = blobToFile(blob);
                var buffer = blobToArrayBuffer(blob).then(function (arrayBuffer) {
                    this.addImage(source, 'Clipboard', { file: blob, name: null, url: source, blob: blob, arrayBuffer: arrayBuffer });
                    this.emit('update', event, this);
                }.bind(this));

                isAddImage = true;
                this.emit('update', event, this);
            }
        }
        if (isAddImage)
            event.preventDefault();
        requestAnimationFrame(function () {
            self.makeTextOnly();
            relocalCursor();
        });
    }
    else {
        requestAnimationFrame(function () {
            var img = MediaInput_$('img', this.$editor, function (img) {
                if (img) {
                    img = MediaInput_$(img);
                    var source = img.getAttribute('src');
                    img.selfRemove();
                    Dom["a" /* default */].imageToCanvas(img).then(function (canvas) {
                        var dataURI = canvas.toDataURL();
                        var blob = dataURItoBlob(dataURI);
                        var file = blobToFile(blob);
                        var buffer = blobToArrayBuffer(blob).then(function (arrayBuffer) {
                            this.addImage(source, 'Clipboard', { dataURI: dataURI, file: blob, name: null, url: source, blob: blob, arrayBuffer: arrayBuffer });
                            this.emit('update', event, this);
                        }.bind(this));

                    }.bind(this), function (e) { }).catch(function (e) { });

                }
            }.bind(this));
            this.makeTextOnly();
            relocalCursor();
        }.bind(this));
    }
};



MediaInput.prototype.undoText = function () {
    if (this.snapDataHead <= 1) return;
    this.snapDataHead--;
    if (this.snapDataHead <= 0) return;
    var newText = this.snapData[this.snapDataHead - 1];
    this.text = newText;
    setSelectionRange(this.$editor, Infinity);
};

MediaInput.prototype.redoText = function () {
    if (this.snapData.length <= this.snapDataHead) return;
    this.snapDataHead++;
    var newText = this.snapData[this.snapDataHead - 1];
    var currentText = this.text;
    this.text = newText;
    setSelectionRange(this.$editor, Infinity);
};

MediaInput.prototype.snapText = function () {
    while (this.snapData.length > this.snapDataHead && this.snapData.length > 0) this.snapData.pop();
    var oldText = this.snapData[this.snapDataHead - 1];
    var newText = this.text;
    if (newText == oldText) return;
    this.snapData.push(this.text);
    this.snapDataHead++;
}


function ImagePreview() {

    var res = MediaInput_({
        extendEvent: 'pressremove',
        class: ['vmedia-media-input-imagepreview', 'vmedia-no-select'],
        child: ['img', 'times-ico']
    });

    res.$img = MediaInput_$('img', res);
    res.$timesIco = MediaInput_$('times-ico', res);
    res.$timesIco.on('click', function (event) {
        res.emit('pressremove', event, res);
    });
    OOP["a" /* default */].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["a" /* default */].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 = HTML5_Svg.ShareInstance._('<text text-anchor="middle" x="321.39" y="170" font-size="145.76" style="fill:white;" >' + value + '</text>').addTo(this);
        },
        get: function () {
            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["a" /* default */].creator.mediainput = MediaInput;



/* harmony default export */ var js_MediaInput = (MediaInput);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/mediainput.css
var mediainput = __webpack_require__(33);

// CONCATENATED MODULE: ./node_modules/absol/src/JSMaker/TemplateString.js
function TemplateString(props) {
    this.parts = props.parts;
}




TemplateString.prototype.toJSCode = function () {
    return this.parts.map(function (e) {
        if (e.type == TemplateString.TYPE_EXPRESSION) {
            return '(' + e.data + ')';
        }
        else {
            return JSON.stringify(e.data);
        }
    }).join('+');
};


TemplateString.__partRegex = /(\{\{(([^\}]|(\}[^\}]))*)\}\})|(([^\{]|(\{[^\{]))+)/g;

/**
 *  @param  {String} text 
 */
TemplateString.__matchExpression = function (text) {
    if (text[0] == '{' && text[1] == '{' && text[text.length - 1] == '}' && text[text.length - 2] == '}') {
        return [text, text.substr(2, text.length - 4).trim()];
    }
    else {
        return false;
    }
};

TemplateString.TYPE_STRING = 0;
TemplateString.TYPE_EXPRESSION = 1;


TemplateString.parse = function (text) {
    text = text+'';
    var matchedParts = text.match(this.__partRegex);
    if (matchedParts) {
        var parts = matchedParts.map(function (e) {
            var matchedExp = this.__matchExpression(e);
            if (matchedExp) {
                return {
                    type: this.TYPE_EXPRESSION,
                    data: matchedExp[1]
                };
            }
            else {
                return {
                    type: this.TYPE_STRING,
                    data: e
                };
            }
        }.bind(this));
        return new TemplateString({ parts: parts });
    }
    else {
        return undefined;
    }
};

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


function Color(bytes) {
    this.bytes = bytes.slice();
}



Color.prototype.toHex6 = function () {
    return this.bytes.slice(0, 3).map(function (b) {
        b = b * 255 >> 0;
        return (b < 16 ? '0' : '') + b.toString(16);
    }).join('');
};

Color.prototype.toHex8 = function () {
    return this.bytes.map(function (b) {
        b = b * 255 >> 0;
        return (b < 16 ? '0' : '') + b.toString(16);
    }).join('');
};

Color.prototype.toHex3 = function () {
    return this.bytes.slice(0, 3).map(function (b) {
        b = b * 255 / 17 >> 0;
        return b.toString(16);
    }).join('');
};

Color.prototype.toHex4 = function () {
    return this.bytes.map(function (b) {
        b = b * 255 / 17 >> 0;
        return b.toString(16);
    }).join('');
};


Color.prototype.toHSLA = function () {
    return Color.rgbaToHSLA(this.bytes);
};


Color.prototype.toHSBA = function () {
    return Color.rgbaToHSBA(this.bytes);
};

Color.prototype.toHWBA = function () {
    return Color.rgbaToHWBA(this.bytes);
};


Color.prototype.getHightContrastColor = function () {
    var hsba = this.toHSBA();
    var h, s, b;
    h = hsba[0] > 0.5 ? hsba[0] - 0.5 : hsba[0] + 0.5;
    s = hsba[1] > 0.5 ? hsba[1] - 0.5 : hsba[1] + 0.5;
    b = hsba[2] > 0.5 ? hsba[2] - 0.5 : hsba[2] + 0.5;
    return Color.fromHSB(h, s, b);
};


Color.prototype.getContrastYIQ = function () {
    var r = this.bytes[0] * 255;
    var g = this.bytes[1] * 255;
    var b = this.bytes[2] * 255;
    var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;
    return (yiq >= 128) ? new Color([0, 0, 0, 1]) : new Color([1, 1, 1, 1]);
};

Color.prototype.clone = function () {
    return new Color(this.bytes.slice());
};

Color.prototype.toString = function (mode) {
    mode = mode || 'rgba';
    mode = mode.toLocaleLowerCase();
    return Color.templates[mode](this);
};

Color.templates = [
    ['rgba', 'bytes', 'rgba({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}}, {{x[3]}})'],
    ['rgb', 'bytes', 'rgb({{x[0]*255>>0}}, {{x[1]*255>>0}}, {{x[2]*255>>0}})'],
    ['hsl', 'toHSLA()', 'hsl({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'],
    ['hsla', 'toHSLA()', 'hsla({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'],
    ['hsb', 'toHSBA()', 'hsb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'],
    ['hsba', 'toHSBA()', 'hsba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})'],
    ['hex3', 'toHex3()', '#{{x}}'],
    ['hex4', 'toHex4()', '#{{x}}'],
    ['hex6', 'toHex6()', '#{{x}}'],
    ['hex8', 'toHex8()', '#{{x}}'],
    ['hwb', 'toHWBA()', 'hwb({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%)'],
    ['hwba', 'toHWBA()', 'hwba({{x[0] * 360}}, {{x[1] * 100}}%, {{x[2] * 100}}%, {{x[3]}})']
].reduce(function (ac, cr) {
    ac[cr[0]] = new Function('color', [
        'var x = color.' + cr[1] + ';',
        'return ' + JSMaker_TemplateString.parse(cr[2]).toJSCode() + ';'
    ].join('\n'));
    return ac;
}, {});




Color.regexes = {
    whiteSpace: /\s*/, // Match zero or more whitespace characters.
    integer: /(\d{1,3})/, // Match integers: 79, 255, etc.
    decimal: /((?:\d+(?:\.\d+)?)|(?:\.\d+))/, // Match 129.6, 79, .9, etc.
    percent: /((?:\d+(?:\.\d+)?)|(?:\.\d+))%/, // Match 12.9%, 79%, .9%, etc.
    hex3: /^#([a-f0-9])([a-f0-9])([a-f0-9])$/i,

    // Match colors in format #XXXX, e.g. #5123.
    hex4: /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])$/i,

    // Match colors in format #XXXXXX, e.g. #b4d455.
    hex6: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i,

    // Match colors in format #XXXXXXXX, e.g. #b4d45535.
    hex8: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i
};


Color.regexes.percent = new RegExp(Color.regexes.decimal.source + '%');

Color.regexes.rgb = new RegExp(
    [
        '^rgb\\(',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

Color.regexes.rgbPercent = new RegExp(
    [
        '^rgb\\(',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

// Match colors in format rgb(R, G, B, A), e.g. rgb(255, 0, 128, 0.25).
Color.regexes.rgba = new RegExp(
    [
        '^rgba\\(',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        ',',
        Color.regexes.integer.source,
        ',',
        Color.regexes.decimal.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

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

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

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

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

Color.regexes.hwb = new RegExp(
    [
        '^hwb\\(',
        Color.regexes.integer.source,
        '[deg]*',
        ',',
        Color.regexes.percent.source,
        ',',
        Color.regexes.percent.source,
        '\\)$'
    ].join(Color.regexes.whiteSpace.source),
    'i'
);

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


Color.fromRGB = function (r, g, b) {
    return new Color([r, g, b, 1]);
};

Color.fromRGBA = function (r, g, b, a) {
    return new Color([r, g, b, a]);
};

Color.fromHSL = function (h, s, l) {
    var bytes = this.hslaToRGBA([h, s, l, 1]);
    return new Color(bytes);

};

Color.fromHSLA = function (h, s, l, a) {
    var bytes = this.hslaToRGBA([h, s, l, a]);
    return new Color(bytes);
};

Color.fromHSB = function (h, s, b) {
    var bytes = this.hsbaToRGBA([h, s, b, 1]);
    return new Color(bytes);
};

Color.fromHSBA = function (h, s, b, a) {
    var bytes = this.hsbaToRGBA([h, s, b, a]);
    return new Color(bytes);
};

Color.fromHWB = function (h, s, b) {
    var bytes = this.hwbaToRGBA([h, s, b, 1]);
    return new Color(bytes);
};

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


/**
 * @param {String} text
 * @returns {Color}
 */
Color.parse = function (text) {
    if (this.namedColors[text]) text = this.namedColors[text];
    if (this.regexes.hex8.test(text)) {
        return this.fromRGBA.apply(this,
            this.regexes.hex8.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v, 16) / 255;
                }));
    }
    else if (this.regexes.hex6.test(text)) {
        return this.fromRGB.apply(this,
            this.regexes.hex6.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v, 16) / 255;
                }));
    }
    else if (this.regexes.hex4.test(text)) {
        return this.fromRGBA.apply(this,
            this.regexes.hex4.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v + v, 16) / 255;
                }));
    }
    else if (this.regexes.hex3.test(text)) {
        return this.fromRGB.apply(this,
            this.regexes.hex3.exec(text)
                .slice(1)
                .map(function (v) {
                    return parseInt(v + v, 16) / 255;
                }));
    } else if (this.regexes.rgba.test(text)) {
        return this.fromRGBA.apply(this,
            this.regexes.rgba.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return i < 3 ? parseFloat(v, 10) / 255 : parseFloat(v, 10);
                }));
    }
    else if (this.regexes.rgb.test(text)) {
        return this.fromRGB.apply(this,
            this.regexes.rgb.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / 255;
                }));
    }
    else if (this.regexes.rgbPercent.test(text)) {
        return this.fromRGB.apply(this,
            this.regexes.rgbPercent.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / 100;
                }));
    }
    else if (this.regexes.rgbaPercent.test(text)) {
        return this.fromRGBA.apply(this,
            this.regexes.rgbaPercent.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / (i < 3 ? 100 : 1);
                }));
    }
    else if (this.regexes.hsl.test(text)) {
        return this.fromHSL.apply(this,
            this.regexes.hsl.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / (i == 0 ? 360 : 100);
                }));
    }
    else if (this.regexes.hsla.test(text)) {
        return this.fromHSLA.apply(this,
            this.regexes.hsla.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / (i == 0 ? 360 : i < 3 ? 100 : 1);
                }));
    }
    else if (this.regexes.hsb.test(text)) {
        return this.fromHSB.apply(this,
            this.regexes.hsb.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / (i == 0 ? 360 : 100);
                }));
    }
    else if (this.regexes.hsba.test(text)) {
        return this.fromHSBA.apply(this,
            this.regexes.hsba.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / (i == 0 ? 360 : i < 3 ? 100 : 1);
                }));
    }
    else if (this.regexes.hwb.test(text)) {
        return this.fromHWB.apply(this,
            this.regexes.hwb.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / (i == 0 ? 360 : 100);
                }));
    }
    else if (this.regexes.hwba.test(text)) {
        return this.fromHWBA.apply(this,
            this.regexes.hwba.exec(text)
                .slice(1)
                .map(function (v, i) {
                    return parseFloat(v, 10) / (i == 0 ? 360 : i < 3 ? 100 : 1);
                }));
    }
    else {
        throw new Error("Fail to parse " + text);
    }
};


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

/********************** COLOR CONVERTER *******************/


Color.rgbToHex = function (rgb) {
    return '#' + rgb.slice(0, 3).map(function (c) {
        var res = ((c * 255) >> 0).toString(16);
        if (res < 10) res = '0' + res;
        return res.toUpperCase();
    }).join('');
};

Color.rgbaToHex = function (rgb) {
    return '#' + rgb.map(function (c) {
        var res = ((c * 255) >> 0).toString(16);
        if (res < 10) res = '0' + res;
        return res.toUpperCase();
    }).join('');
};

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

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

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

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

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

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


Color.hsbaToHSLA = function (hsba) {
    var hue = hsba[0];
    var sat = hsba[1];
    var val = hsba[2];

    // Calculate lightness.
    var li = (2 - sat) * val / 2;

    // Convert saturation.
    if (li !== 0) {
        if (li === 1) {
            sat = 0;
        } else if (li < 0.5) {
            sat = sat / (2 - sat);
        } else {
            sat = sat * val / (2 - li * 2);
        }
    }

    // Hue and alpha stay the same.
    return [hue, sat, li, hsba[3]];
};

Color.hsbaToRGBA = function (hsba) {
    var hue = hsba[0] * 6; // We will split hue into 6 sectors.
    var sat = hsba[1];
    var val = hsba[2];

    var RGBA = [];

    if (sat === 0) {
        RGBA = [val, val, val, hsba[3]]; // Return early if grayscale.
    } else {
        var sector = Math.floor(hue);
        var tint1 = val * (1 - sat);
        var tint2 = val * (1 - sat * (hue - sector));
        var tint3 = val * (1 - sat * (1 + sector - hue));
        var red, green, blue;
        if (sector === 1) {
            // Yellow to green.
            red = tint2;
            green = val;
            blue = tint1;
        } else if (sector === 2) {
            // Green to cyan.
            red = tint1;
            green = val;
            blue = tint3;
        } else if (sector === 3) {
            // Cyan to blue.
            red = tint1;
            green = tint2;
            blue = val;
        } else if (sector === 4) {
            // Blue to magenta.
            red = tint3;
            green = tint1;
            blue = val;
        } else if (sector === 5) {
            // Magenta to red.
            red = val;
            green = tint1;
            blue = tint2;
        } else {
            // Red to yellow (sector could be 0 or 6).
            red = val;
            green = tint3;
            blue = tint1;
        }
        RGBA = [red, green, blue, hsba[3]];
    }
    return RGBA;
};



Color.hslaToHSBA = function (hsla) {
    var hue = hsla[0];
    var sat = hsla[1];
    var li = hsla[2];

    // Calculate brightness.
    var val;
    if (li < 0.5) {
        val = (1 + sat) * li;
    } else {
        val = li + sat - li * sat;
    }

    // Convert saturation.
    sat = 2 * (val - li) / val;

    // Hue and alpha stay the same.
    return [hue, sat, val, hsla[3]];
};

Color.hslaToRGBA = function (hsla) {
    var hue = hsla[0] * 6; // We will split hue into 6 sectors.
    var sat = hsla[1];
    var li = hsla[2];

    var RGBA = [];

    if (sat === 0) {
        RGBA = [li, li, li, hsla[3]]; // Return early if grayscale.
    } else {
        // Calculate brightness.
        var val;
        if (li < 0.5) {
            val = (1 + sat) * li;
        } else {
            val = li + sat - li * sat;
        }

        // Define zest.
        var zest = 2 * li - val;

        // Implement projection (project onto green by default).
        var hzvToRGB = function (hue, zest, val) {
            if (hue < 0) {
                // Hue must wrap to allow projection onto red and blue.
                hue += 6;
            } else if (hue >= 6) {
                hue -= 6;
            }
            if (hue < 1) {
                // Red to yellow (increasing green).
                return zest + (val - zest) * hue;
            } else if (hue < 3) {
                // Yellow to cyan (greatest green).
                return val;
            } else if (hue < 4) {
                // Cyan to blue (decreasing green).
                return zest + (val - zest) * (4 - hue);
            } else {
                // Blue to red (least green).
                return zest;
            }
        };

        // Perform projections, offsetting hue as necessary.
        RGBA = [
            hzvToRGB(hue + 2, zest, val),
            hzvToRGB(hue, zest, val),
            hzvToRGB(hue - 2, zest, val),
            hsla[3]
        ];
    }

    return RGBA;
};


Color.rgbaToHSBA = function (rgba) {
    var red = rgba[0];
    var green = rgba[1];
    var blue = rgba[2];

    var val = Math.max(red, green, blue);
    var chroma = val - Math.min(red, green, blue);

    var hue, sat;
    if (chroma === 0) {
        // Return early if grayscale.
        hue = 0;
        sat = 0;
    } else {
        sat = chroma / val;
        if (red === val) {
            // Magenta to yellow.
            hue = (green - blue) / chroma;
        } else if (green === val) {
            // Yellow to cyan.
            hue = 2 + (blue - red) / chroma;
        } else if (blue === val) {
            // Cyan to magenta.
            hue = 4 + (red - green) / chroma;
        }
        if (hue < 0) {
            // Confine hue to the interval [0, 1).
            hue += 6;
        } else if (hue >= 6) {
            hue -= 6;
        }
    }

    return [hue / 6, sat, val, rgba[3]];
};

Color.rgbaToHSLA = function (rgba) {
    var red = rgba[0];
    var green = rgba[1];
    var blue = rgba[2];

    var val = Math.max(red, green, blue);
    var min = Math.min(red, green, blue);
    var li = val + min; // We will halve this later.
    var chroma = val - min;

    var hue, sat;
    if (chroma === 0) {
        // Return early if grayscale.
        hue = 0;
        sat = 0;
    } else {
        if (li < 1) {
            sat = chroma / li;
        } else {
            sat = chroma / (2 - li);
        }
        if (red === val) {
            // Magenta to yellow.
            hue = (green - blue) / chroma;
        } else if (green === val) {
            // Yellow to cyan.
            hue = 2 + (blue - red) / chroma;
        } else if (blue === val) {
            // Cyan to magenta.
            hue = 4 + (red - green) / chroma;
        }
        if (hue < 0) {
            // Confine hue to the interval [0, 1).
            hue += 6;
        } else if (hue >= 6) {
            hue -= 6;
        }
    }

    return [hue / 6, sat, li / 2, rgba[3]];
};



Color.hwbaToHSBA = function (hwba) {
    return [hwba[0], 1 - hwba[1] / (1 - hwba[2]), 1 - hwba[2], hwba[3]];
};

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

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

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

/* harmony default export */ var Color_Color = (Color);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ResizableLayout.js




var ResizableLayout_ = ACore["a" /* default */]._;
var ResizableLayout_$ = ACore["a" /* default */].$;

function ResizableLayout() {
    var res = ResizableLayout_({
        class: 'absol-resizablelayout',
        child: '.absol-resizablelayout-cell'
    });

    res._colsSize = [1];
    res._rowSize = [1];
   
    return res;
}

ResizableLayout.prototype.debug = function(){
    ResizableLayout_$('div', this, function(e){
        e.addStyle('background-color', Color_Color.fromHSLA(Math.random(), Math.random(), 0.2, 0.2).toString())
    });
};

/**
 * @param {Number} index -1: end of table
 * @param {Number} size 
 * @returns {Array<Element>}
 */
ResizableLayout.prototype.insertRow = function (index, size) {
    if (!(size>=0 && size<=1)){
        this._rowSize.reduce(function(ac, cr){return ac+ cr},0)/this._rowSize.length;
    }

    
};


ResizableLayout.prototype.addRow = function (index) {

}


ResizableLayout.prototype.updateSize = function () {

};

ResizableLayout.prototype.property = {};

ResizableLayout.prototype.property.nCol = {
    set: function (value) {
        if (value > 0) {
            value = Math.ceil(value);
        }
        else {
            throw new Error('Invalid number');
        }

    },
    get: function () {

    }
};

ResizableLayout.prototype.property.nRow = {
    set: function (value) {
        if (value > 0) {
            value = Math.ceil(value);
        }
        else {
            throw new Error('Invalid number');
        }
    },
    get: function () {
       
    }
};





ResizableLayout.prototype.init = function (props) {
    this._cell = [];
    Object.assign(this, props || {});
};

ACore["a" /* default */].creator.resizablelayout = ResizableLayout;

/* harmony default export */ var js_ResizableLayout = (ResizableLayout);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/resizablelayout.css
var resizablelayout = __webpack_require__(35);

// 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_SearchStringArrayAdapter(texts, options) {
    if (!this.queryItems) return new SearchStringArrayAdapter_SearchStringArrayAdapter(texts, options);
    
    this.texts = texts;
}

SearchStringArrayAdapter_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_SearchStringArrayAdapter.onAttached = function(parent){
    this.parent = parent;
};

SearchStringArrayAdapter_SearchStringArrayAdapter.prototype.getItemText = function (item, mInput) {
    return item.text;
};

SearchStringArrayAdapter_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 */ var adapter_SearchStringArrayAdapter = (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_SearchObjectArrayAdapter(objects, options) {
    if (!this.queryItems) return new SearchObjectArrayAdapter_SearchObjectArrayAdapter(texts, options);
    this.objects = objects;
    this.options = options;
}

SearchObjectArrayAdapter_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_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_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_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 */ var adapter_SearchObjectArrayAdapter = (SearchObjectArrayAdapter_SearchObjectArrayAdapter);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/AutoCompleteInput.js








var AutoCompleteInput_ = ACore["a" /* default */]._;
var AutoCompleteInput_$ = ACore["a" /* default */].$;

function AutoCompleteInput() {
    var res = AutoCompleteInput_({
        extendEvent: 'change',
        class: 'absol-autocomplete-input',
        child: [
            'input[type="text"].absol-autocomplete-input-text',
            {
                class: 'absol-autocomplete-input-dropdown',
                style: {
                    display: 'none'
                },
                child: {
                    tag: 'bscroller',
                    style: {
                        'max-height': '500px'
                    }
                }
            }
        ]
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, AutoCompleteInput.eventHandler);

    res.$input = AutoCompleteInput_$('input', res)
        .on('keyup', res.eventHandler.keyup)
        .on('keydown', res.eventHandler.keydown)
        .on('focus', res.eventHandler.focus)
        .on('blur', res.eventHandler.blur)
        ;


    res.$dropdown = AutoCompleteInput_$('.absol-autocomplete-input-dropdown', res);
    res.$vscroller = AutoCompleteInput_$('bscroller', res).on('click', res.eventHandler.vscrollerClick);
    res.$poolItems = [];
    res._currentData = [];
    res._sessionIndex = 0;
    res._updatedSession = -1;
    res._cache = {};
    OOP["a" /* default */].drillProperty(res, res.$input, 'value');

    return res;
}


AutoCompleteInput.eventHandler = {};
AutoCompleteInput.eventHandler.keyup = function (event) {
    if (this._keyTimeout) {
        clearTimeout(this._keyTimeout);
        this._keyTimeout = 0;
    }

    var cTimeout = setTimeout(function () {
        clearTimeout(cTimeout);
        this.find();
    }.bind(this), 300);


    if (this._cacheTimeout) {
        clearTimeout(this._cacheTimeout);
        this._cacheTimeout = 0;
    }

    var cacheTimeout = setTimeout(function () {
        clearTimeout(cacheTimeout);
        this.clearCache();
    }.bind(this), 300);

    this._cacheTimeout = cacheTimeout;
    this._keyTimeout = cTimeout;
};



AutoCompleteInput.eventHandler.blur = function () {
    this.removeClass('focus');
};

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

    //todo
}

AutoCompleteInput.eventHandler.clickOut = function (event) {
    if (EventEmitter["a" /* default */].hitElement(this, event)) return;
    AutoCompleteInput_$(document.body).off('mousedown', this.eventHandler.clickOut);
    var text = this.$input.value;

    if (this._lastValue != text) {
        this._lastValue = text;
        this.$dropdown.addStyle('display', 'none');
        this._lastValue = text;
        this.emit('change', { target: this, value: text }, this);
    }

}


AutoCompleteInput.eventHandler.vscrollerClick = function (event) {
    var current = event.target;
    while (current && !current.containsClass('absol-autocomplete-input-item') && current != this.$vscroller) {
        current = current.parentElement;
    }

    if (current && current._holderItem) {
        var text = this.getItemText(current._holderItem);
        this.$input.value = text;
        this._lastQuery = text;
        this._selectedIndex = current._holderIndex;
        this.$dropdown.addStyle('display', 'none');
        this._lastValue = text;
        this.emit('change', { target: this, value: text }, this);
    }
};

AutoCompleteInput.eventHandler.keydown = function (event) {
    var key = event.key;
    if (key == 'ArrowDown') {
        if (this._selectedIndex + 1 < this._currentData.length) {
            if (this.$poolItems[this._selectedIndex]) {
                this.$poolItems[this._selectedIndex].removeClass('active');
            }
            this._selectedIndex += 1;
            if (this.$poolItems[this._selectedIndex]) {
                this.$poolItems[this._selectedIndex].addClass('active');
                this.$vscroller.scrollInto(this.$poolItems[this._selectedIndex]);
            }

        }
        event.preventDefault();
    }
    else if (key == 'ArrowUp') {
        if (this._selectedIndex - 1 >= 0) {
            if (this.$poolItems[this._selectedIndex]) {
                this.$poolItems[this._selectedIndex].removeClass('active');
            }
            this._selectedIndex -= 1;
            if (this.$poolItems[this._selectedIndex]) {
                this.$poolItems[this._selectedIndex].addClass('active');
                this.$vscroller.scrollInto(this.$poolItems[this._selectedIndex]);
            }

        }
        event.preventDefault();
    }
    else if (key == 'Enter') {
        var text;
        if (this._currentData[this._selectedIndex] === undefined) {
            text = this.$input.value;
        }
        else {
            text = this.getItemText(this._currentData[this._selectedIndex]);
            this.$input.value = text;
        }
        this._lastQuery = text;
        this.$dropdown.addStyle('display', 'none');
        this._lastValue = text;
        this.emit('change', { target: this, value: text }, this);
    }
};

AutoCompleteInput.prototype.focus = function () {
    if (this.disabled) return;
    this.$input.focus.apply(this.$input, arguments);

};

AutoCompleteInput.prototype.blur = function () {
    this.$input.blur.apply(this.$input, arguments);

};

AutoCompleteInput.prototype.select = function () {
    this.$input.select.apply(this.$input, arguments);
}

AutoCompleteInput.prototype.find = function () {
    var query = this.$input.value;
    if (query == this._lastQuery) return;
    this._lastQuery = query;
    var currentSession = ++this._sessionIndex;
    if (!query) {
        this.pushData([], currentSession, query)
        return;
    }
    if (this.disableCache) {
        var onReciveData = function (data) {
            cacheHolder.data = data;
            this.pushData(data, currentSession, query);//sessionIndex may be change
        }.bind(this);
        var result = this.queryItems(query);
        if (typeof result.then == 'function')
            result.then(onReciveData);
        else onReciveData(result)
    }
    else {
        if (this._cache[query]) {
            this._cache[query].sessionIndex = currentSession;
            if (!this._cache[query].pending) {
                var data = this._cache[query].data;
                this.pushData(data, currentSession);
            }
        }
        else {
            var cacheHolder = { pending: true, sessionIndex: currentSession };
            var onReciveData = function (data) {
                cacheHolder.data = data;
                cacheHolder.pending = false;
                this.pushData(data, cacheHolder.sessionIndex, query);//sessionIndex may be change
            }.bind(this);
            var result = this.queryItems(query);
            if (typeof result.then == 'function')
                result.then(onReciveData);
            else onReciveData(result)

            this._cache[query] = cacheHolder;
        }
    }
};

AutoCompleteInput.prototype.pushData = function (data, sessionIndex, query) {
    if (sessionIndex > this._updatedSession) {
        this._updatedSession = sessionIndex;
        this.$vscroller.clearChild();
        this._currentData = data;
        if (data && data.length > 0) {
            this.$dropdown.removeStyle('display');
        }
        else {
            this.$dropdown.addStyle('display', 'none');
        }

        var maxHeight = this.getComputedStyleValue('max-height');
        if (maxHeight == 'none' || !maxHeight) {
            maxHeight = 10000;
        }
        else {
            maxHeight = parseFloat(maxHeight.replace('px', ''));
        }

        var outBound = Dom["a" /* default */].traceOutBoundingClientRect(this);
        var bound = this.$input.getBoundingClientRect();
        var aTop = bound.top - outBound.top;
        var aBotom = outBound.bottom - bound.bottom;
        this.$dropdown.removeClass('top');
        if (aTop > aBotom) {
            maxHeight = Math.min(maxHeight, aTop - 10);
        }
        else {
            maxHeight = Math.min(maxHeight, aBotom - 10);
        }

        this.$vscroller.addStyle('max-height', maxHeight + 'px');
        this._selectedIndex = -1;
        data.reduce(function (sync, item, i, arr) {
            return sync.then(function () {
                if (this._updatedSession != sessionIndex) return;
                return new Promise(function (rs) {
                    if (this._updatedSession != sessionIndex) return;
                    var reuseItem = this.$poolItems.length > i ? this.$poolItems[i] : undefined;
                    if (reuseItem) {
                        reuseItem.removeClass('active');
                    }
                    var newView = this.getItemView(item, i, AutoCompleteInput_, AutoCompleteInput_$, query, reuseItem, this);
                    newView.addClass('absol-autocomplete-input-item');
                    newView._holderItem = item;
                    newView._holderIndex = i;
                    if (i == this._selectedIndex)
                        newView.addClass('active');
                    if (this.$poolItems.length <= i) {
                        this.$poolItems.push(newView);
                    }
                    else {
                        this.$poolItems[i] = newView;
                    }
                    this.$vscroller.addChild(newView);
                    if (i == 0) {
                        var estimateHeight = newView.getBoundingClientRect().height * arr.length;
                        if (aTop > aBotom && estimateHeight > aBotom) {
                            this.$dropdown.addClass('top');
                        }
                    }
                    if (i >= 50 && i % 50 == 0)
                        setTimeout(rs, 0);
                    else rs();
                }.bind(this));
            }.bind(this))
        }.bind(this), Promise.resolve());
    }
};


AutoCompleteInput.prototype.getItemText = function (item) {
    if (this.adapter && this.adapter.getItemText) {
        return this.adapter.getItemText(item, this);
    }
    else if (typeof item == 'string') {
        return item;
    } else {
        throw Error('You need adapter.getItemText(item, mAutoCompleteInput) to handle your item text!');
    }

}

AutoCompleteInput.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent) {
    if (this.adapter && this.adapter.getItemView) {
        return this.adapter.getItemView(item, index, _, $, query, reuseItem, refParent, this);
    }
    else {
        var text = this.getItemText(item);
        if (reuseItem) {
            reuseItem.childNodes[0].innerHTML = text;
            return reuseItem;
        }

        return _({
            child: {
                tag: 'span',
                class: 'absol-autocomplete-input-item-text',
                child: { text: text }
            }
        });
    }
};



/**
 * @param {String} query
 * @returns {Array}
 */
AutoCompleteInput.prototype.queryItems = function (query) {
    if (this.adapter && this.adapter.queryItems) {
        return this.adapter.queryItems(query, this);
    }
    else {
        throw new Error('Invalid adapter: queryItems(query, mAutoCompleteInput) not found!');
    }
};


AutoCompleteInput.prototype.clearCache = function (old) {
    if (typeof old != "number") old = 30;
    for (var key in this._cache) {
        var cacheHolder = this._cache[key];
        if (this._sessionIndex - cacheHolder.sessionIndex > old) {
            delete this._cache[key];
        }
    }
}

AutoCompleteInput.property = {};
AutoCompleteInput.property.adapter = {
    set: function (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.disabled = {
    set: function (value) {
        if (value) {
            this.addClass('absol-disabled');
        }
        else {
            this.removeClass('absol-disabled');
        }
    },
    get: function () {
        return this.containsClass('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["a" /* default */].install('AutoCompleteInput'.toLowerCase(), AutoCompleteInput);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/autocompleteinput.css
var autocompleteinput = __webpack_require__(37);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectlist.css
var selectlist = __webpack_require__(39);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectList.js


var SelectList_ = ACore["a" /* default */]._;
var SelectList_$ = ACore["a" /* default */].$;

/*global absol*/
function SelectList() {
    var res = SelectList_('.absol-selectlist');
    res.defineEvent('change');
    res.$attachhook = SelectList_('attachhook').addTo(res);
    res.sync = new Promise(function (rs) {
        res.$attachhook.once('error', rs);
    });
    res.$items = [];
    return res;
};

SelectList.prototype.creatItem = function (item, index) {
    var text;
    var extendStyle = {};
    var extendClasses = [];
    if (typeof item == 'string') {
        text = item;
    }
    else {
        text = item.text;
        extendStyle = item.extendStyle || {};
        if (typeof item.extendClasses == 'string') {
            extendClasses = item.extendClasses.split(/\s+/);
        }
        else if (item.extendClasses && (extendClasses instanceof Array)) {
            extendClasses = item.extendClasses
        }
    }

    var res = SelectList_({
        class: ['absol-selectlist-item'].concat(extendClasses),
        style: extendStyle,
        child: [
            {
                tag: 'span',
                class: 'absol-selectlist-item-text',
                props: {
                    innerHTML: text
                },
            },
            {
                class: 'absol-selectlist-item-desc-container',
                child: {
                    tag: 'span',
                    class: 'absol-selectlist-item-desc',
                    child: item.desc ? { text: item.desc } : []
                }
            }
        ]
    });

    res.$descCtn = SelectList_$('.absol-selectlist-item-desc-container', res);
    res.$text = SelectList_$('.absol-selectlist-item-text', res);
    return res;
};

SelectList.prototype.realignDescription = function (extMarginLeft) {
    if (this.$items.length == 0) return;
    extMarginLeft = extMarginLeft || 0;
    var maxWidth = 0;
    this.$items.forEach(function (elt) {
        elt.$descCtn.removeStyle('width');
        var bound = elt.$descCtn.getBoundingClientRect();

        maxWidth = Math.max(maxWidth, bound.width);
    });
    var fontSize = this.$items[0].getFontSize();
    var cntWidth = maxWidth / fontSize + 'em';
    var extMarginRight = maxWidth / fontSize + extMarginLeft + 'em';
    this.$items.forEach(function (elt) {
        elt.$descCtn.addStyle('width', cntWidth);
        elt.$text.addStyle('margin-right', extMarginRight);
    });

    this._extMarginRight = extMarginRight;
    this._cntWidth = cntWidth;
};


SelectList.prototype.updateSelectItem = function () {
    var value = this.value;
    this.$items.forEach(function ($item) {
        var item = $item._item;
        if (value !== undefined && (item == value || item.value == value)) {
            $item.addClass('selected');
        }
        else {
            $item.removeClass('selected');
        }
    });
};

SelectList.property = {};
SelectList.property.items = {
    set: function (value) {
        value = value || [];
        this._items = value;
        this.clearChild();
        this.$items = value.map(function (item, index) {
            var $item = this.creatItem(item, index).addTo(this);
            $item._item = item; //hold a data
            $item.on('mousedown', function (event) {
                this.value = typeof item == 'string' ? item : item.value;
                event.selectlistValue = this.value;
                this.emit('change', event);
            }.bind(this));
            return $item;

        }.bind(this));
        this.updateSelectItem();
        this.sync = this.sync.then(this.realignDescription.bind(this, 0));
    },
    get: function () {
        return this._items || [];
    }
};

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

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

SelectList.property.item = {
    get: function () {
        if (!this._items || this._items.length == 0) {
            return undefined;
        }
        var res = this._items[0];
        var value = this.value;
        var matchItems = this._items.filter(function (item) {
            return item == value || item.value == value;
        });
        if (matchItems.length > 0) res = matchItems[0];
        return res;
    }
};



SelectList.prototype.init = function (props) {
    props = props || {};
    if (props.adapter && (typeof props.adapter == 'object')) {
        Object.assign(this, props.adapter);
        props = Object.assign({}, props);
        delete props['adapter'];
    }
    var value = props.value;
    delete props.value;
    this.super(props);
    if (value !== undefined)
        this.value = value;
};

ACore["a" /* default */].creator.selectlist = SelectList;

/* harmony default export */ var js_SelectList = (SelectList);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectmenu.css
var selectmenu = __webpack_require__(41);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectMenu.js







/*global absol*/
var SelectMenu_ = ACore["a" /* default */]._;
var SelectMenu_$ = ACore["a" /* default */].$;


ACore["a" /* default */].creator['dropdown-ico'] = function () {
    return SelectMenu_([
        '<svg class="dropdown" width="100mm" height="100mm" version="1.1" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">',
        '<g transform="translate(0,-197)">',
        '<path d="m6.3152 218.09a4.5283 4.5283 0 0 0-3.5673 7.3141l43.361 55.641a4.5283 4.5283 0 0 0 7.1421 7e-3l43.496-55.641a4.5283 4.5283 0 0 0-3.5673-7.3216z" />',
        '</g>',
        '</svg>'
    ].join(''));
};


function SelectMenu() {
    var res = SelectMenu_({
        class: ['absol-selectmenu'],
        extendEvent: ['change', 'minwidthchange'],
        attr: {
            tabindex: '1'
        },
        child: [
            '.absol-selectmenu-holder-item',
            {
                tag: 'button',
                class: 'absol-selectmenu-btn',
                child: ['dropdown-ico']
            },
            {
                class: 'absol-selectmenu-dropdown-box',
                child: [
                    {
                        tag: 'searchtextinput', style: {
                            display: 'none'
                        }
                    },
                    'bscroller']
            },
            'attachhook',
        ]
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, SelectMenu.eventHandler);
    res.$renderSpace = SelectMenu.getRenderSpace();

    res.$selectlist = SelectMenu_('selectlist', res).addTo(res.$renderSpace);
    res.$selectlist.on('change', res.eventHandler.selectlistChange, true);
    res.$vscroller = SelectMenu_$('bscroller', res);
    res.on('mousedown', res.eventHandler.click, true);
    res.on('blur', res.eventHandler.blur);

    res.$holderItem = SelectMenu_$('.absol-selectmenu-holder-item', res);
    res.$dropdownBox = SelectMenu_$('.absol-selectmenu-dropdown-box', res);
    res.$searchTextInput = SelectMenu_$('searchtextinput', res);
    res.$searchTextInput.on('stoptyping', res.eventHandler.searchModify);
    res.selectListBound = { height: 0, width: 0 };
    res.$attachhook = SelectMenu_$('attachhook', res)
        .on('error', res.eventHandler.attached);

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

    return res;
};



SelectMenu.getRenderSpace = function () {
    if (!SelectMenu.$renderSpace) {
        SelectMenu.$renderSpace = SelectMenu_('.absol-selectmenu-render-space')
            .addTo(document.body);
    };
    return SelectMenu.$renderSpace;
};

SelectMenu.prototype.updateItem = function () {
    this.$holderItem.clearChild();
    if (this.$selectlist.item) {
        var elt = this.$selectlist.creatItem(this.$selectlist.item).addTo(this.$holderItem);
        this.$selectlist.sync.then(function () {
            elt.$descCtn.addStyle('width', this.$selectlist._cntWidth);
            elt.$text.addStyle('margin-right', this.$selectlist._extMarginRight);
        }.bind(this))
    }
};



SelectMenu.prototype.init = function (props) {
    props = props || [];
    Object.keys(props).forEach(function (key) {
        if (props[key] === undefined) delete props[key];
    });

    this.super(props);
};

SelectMenu.property = {};
SelectMenu.property.items = {
    set: function (value) {
        this._items = value;
        this.$selectlist.items = value || [];
        this.$selectlist.sync.then(function () {
            this.selectListBound = this.$selectlist.getBoundingClientRect();
            this.addStyle('min-width', this.selectListBound.width + 2 + 37 + 'px');
            this.emit('minwidthchange', { target: this, value: this.selectListBound.width + 2 + 37, type: 'minwidthchange' }, this);
        }.bind(this));

        if (this.$selectlist.items.length > 0 && (this.$selectlist.item === undefined || this.value === undefined)) {
            this.value = this.items[0].value !== undefined ? this.items[0].value : this.items[0];
        }
    },
    get: function () {
        return this._items || [];
    }
};

SelectMenu.property.value = {
    set: function (value) {
        if (value === undefined && this._items && this.items.length > 0) {
            value = this._items[0].value !== undefined ? this._items[0].value : this._items[0];
        }
        this.$selectlist.value = value;
        this._lastValue = value;
        this.sync = this.sync.then(this.updateItem.bind(this));
    },
    get: function () {
        return this.$selectlist.value;
    }
};

SelectMenu.property.selectedIndex = {
    get: function () {
        if (!this._items) return -1;
        var value = this.value;
        for (var i = 0; i < this._items.length; ++i) {
            if (value == this._items[i] || value == this._items[i].value)
                return i;
        }
        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 (searching) {
    var screenBottom = Dom["a" /* default */].getScreenSize().height;

    var outBound = Dom["a" /* default */].traceOutBoundingClientRect(this);
    var searchBound = this.$searchTextInput.getBoundingClientRect();
    var bound = this.getBoundingClientRect();
    var availableTop = bound.top - outBound.top - (this.enableSearch ? searchBound.height + 8 : 0) - 20;
    var availableBottom = Math.min(outBound.bottom, screenBottom) - bound.bottom - (this.enableSearch ? searchBound.height + 8 : 0) - 20;
    if (this.forceDown || (!this.$dropdownBox.containsClass('up') && searching) || (!searching && (availableBottom >= this.selectListBound.height || availableBottom > availableTop))) {
        if (!searching) {
            this.$dropdownBox.removeClass('up');
            this.$searchTextInput.selfRemove();
            this.$dropdownBox.addChildBefore(this.$searchTextInput, this.$vscroller);

        }

        this.$vscroller.addStyle('max-height', availableBottom + 'px');
    }
    else {
        if (!searching) {
            this.$dropdownBox.addClass('up');
            this.$searchTextInput.selfRemove();
            this.$dropdownBox.addChild(this.$searchTextInput);
        }

        this.$vscroller.addStyle('max-height', availableTop + 'px');
    }
    this.scrollToSelectedItem();
};

SelectMenu.prototype.scrollToSelectedItem = function () {

    requestAnimationFrame(function () {
        SelectMenu_$('.selected', this.$selectlist, function (e) {
            this.$vscroller.scrollInto(e);
            return true;
        }.bind(this));
    }.bind(this));
};

SelectMenu.prototype.init = function (props) {
    this.super(props);
};

SelectMenu.property.isFocus = {
    set: function (value) {
        value = !!value;
        if (value == this.isFocus) return;
        this._isFocus = value;
        if (value) {
            this.addClass('focus');
            this.$selectlist.addTo(this.$vscroller);
            SelectMenu_$('body').on('mousedown', this.eventHandler.bodyClick);
            if (this.enableSearch) {
                setTimeout(function () {
                    this.$searchTextInput.focus();
                }.bind(this), 50);
            }

            this.updateDropdownPostion();

        }
        else {
            this.$selectlist.addTo(this.$renderSpace);
            SelectMenu_$('body').off('mousedown', this.eventHandler.bodyClick);
            this.removeClass('focus');
            this.$searchTextInput.value = '';
            this.$selectlist.items = this.items;
            this.selectListBound = this.$selectlist.getBoundingRecursiveRect();
            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.containsClass('disabled');
    }
};


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

SelectMenu.eventHandler = {};

SelectMenu.eventHandler.attached = function () {
    if (this._updateInterval) return;
    if (!this.$selectlist.parentNode) this.$content.addTo(this.$renderSpace);
    this._updateInterval = setInterval(function () {
        if (!this.isDescendantOf(document.body)) {
            clearInterval(this._updateInterval);
            this._updateInterval = undefined;
            this.$selectlist.selfRemove();
        }
    }.bind(this), 10000);
};

SelectMenu.eventHandler.click = function (event) {
    if (EventEmitter["a" /* default */].hitElement(this.$selectlist, event) || (this.isFocus && !EventEmitter["a" /* default */].hitElement(this.$dropdownBox, event))) {
        event.preventDefault();
        setTimeout(function () {
            this.isFocus = false;
        }.bind(this), 5)
    }
    else {
        if (!this.isFocus) {
            this.$selectlist.addTo(this.$vscroller);
            this.isFocus = true;
        }
    }
};



SelectMenu.eventHandler.bodyClick = function (event) {
    event.preventDefault();
    if (!EventEmitter["a" /* default */].hitElement(this, event)) {
        setTimeout(function () {
            this.isFocus = false;
        }.bind(this), 5)
    }
};

SelectMenu.eventHandler.selectlistChange = function (event) {
    this.updateItem();
    this.selectMenuValue = this.value;
    if (this._lastValue != 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.$selectlist.items = this.items;
    }
    else {
        var view = [];
        if (filterText.length == 1) {
            view = this.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 = Object(stringFormat["b" /* nonAccentVietnamese */])(text);
                it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0;
                return it;
            });

            view.sort(function (a, b) {
                if (b.score - a.score == 0) {
                    if (Object(stringFormat["b" /* nonAccentVietnamese */])(b.text) > Object(stringFormat["b" /* nonAccentVietnamese */])(a.text)) return -1;
                    return 1;
                }
                return b.score - a.score;
            });
            view = view.filter(function (x) {
                return x.score > 0;
            })
        }
        else {
            var its = this.items.map(function (item) {
                var res = { item: item, text: typeof item === 'string' ? item : item.text };
                var text = res.text.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
                res.score = (phraseMatch(text, filterText)
                    + phraseMatch(Object(stringFormat["b" /* nonAccentVietnamese */])(text), Object(stringFormat["b" /* nonAccentVietnamese */])(filterText))) / 2;
                if (Object(stringFormat["b" /* nonAccentVietnamese */])(text).replace(/s/g, '').toLowerCase().indexOf(Object(stringFormat["b" /* 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 (Object(stringFormat["b" /* nonAccentVietnamese */])(b.text) > Object(stringFormat["b" /* nonAccentVietnamese */])(a.text)) return -1;
                    return 1;
                }
                return b.score - a.score;
            });
            var view = its.filter(function (x) {
                return x.score > 0.5;
            });
            if (view.length == 0) {
                var bestScore = its[0].score;
                view = its.filter(function (it) {
                    return it.score + 0.001 >= bestScore;
                });
            }
            if (view[0].score == 0) view = [];
        }
        view = view.map(function (e) {
            return e.item;
        });
        this.$selectlist.items = view;
    }

    this.selectListBound = this.$selectlist.getBoundingRecursiveRect();
    this.updateDropdownPostion(true);
};

ACore["a" /* default */].creator.selectmenu = SelectMenu;

/* harmony default export */ var js_SelectMenu = (SelectMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/treelist.css
var treelist = __webpack_require__(43);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeList.js

var TreeList_ = ACore["a" /* default */]._;
var TreeList_$ = ACore["a" /* default */].$;

function TreeList() {
    var res = TreeList_({
        class: 'absol-tree-list',
        extendEvent: 'press'
    });

    return res;
}


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["a" /* default */].creator.treelist = TreeList;

/* harmony default export */ var js_TreeList = (TreeList);

// TreeList.prototype.
// CONCATENATED MODULE: ./node_modules/absol/src/Math/random.js

/**
 * Returns a random number between min (inclusive) and max (exclusive)
 */
function randomArbitrary(min, max) {
    return Math.random() * (max - min) + min;
}

/**
 * Returns a random integer between min (inclusive) and max (inclusive)
 * Using Math.round() will give you a non-uniform distribution!
 */
function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function randomPick(arr) {
    var id = randomInt(0, arr.length - 1);
    return arr[id];
}
// CONCATENATED MODULE: ./node_modules/absol/src/String/stringGenerate.js


var identCharacters = function () {
    var chars = 'qwertyuiopasdfghjklzxcvbnm';
    chars = chars + chars.toUpperCase();
    var num = '0123456789';
    var spect = '_';
    return (chars + spect + num).split('');

}();


function randomIdent(length) {
    if (!(length > 0)) length = 4;
    var factor = identCharacters;
    return [factor[(Math.random() * (factor.length - 10)) >> 0]].concat(Array(length - 1).fill('').map(function () {
        return factor[(Math.random() * factor.length) >> 0];
    })).join('');
}

function parallelMatch(a, b) {
    var l = Math.min(a.length, b.length);
    var res = 0;
    for (var i = 0; i < l; ++i) {
        if (a[i] == b[i])++res;
    }
    return res;
}

var ipsumLoremWord = ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'sed', 'do',
    'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua', 'enim', 'ad', 'minim',
    'veniam', 'quis', 'nostrud', 'exercitation', 'ullamco', 'laboris', 'nisi', 'aliquip', 'ex', 'ea', 'commodo',
    'consequat', 'duis', 'aute', 'irure', 'in', 'reprehenderit', 'voluptate', 'velit', 'esse', 'cillum',
    'eu', 'fugiat', 'nulla', 'pariatur', 'excepteur', 'sint', 'occaecat', 'cupidatat', 'non', 'proident',
    'sunt', 'culpa', 'qui', 'officia', 'deserunt', 'mollit', 'anim', 'id', 'est', 'laborum', 'perspiciatis',
    'unde', 'omnis', 'iste', 'natus', 'error', 'voluptatem', 'accusantium', 'doloremque', 'laudantium',
    'totam', 'rem', 'aperiam', 'eaque', 'ipsa', 'quae', 'ab', 'illo', 'inventore', 'veritatis', 'quasi', 'architecto',
    'beatae', 'vitae', 'dicta', 'explicabo', 'nemo', 'ipsam', 'quia', 'voluptas', 'aspernatur', 'aut', 'odit',
    'fugit', 'consequuntur', 'magni', 'dolores', 'eos', 'ratione', 'sequi', 'nesciunt', 'neque', 'porro',
    'quisquam', 'dolorem', 'adipisci', 'numquam', 'eius', 'modi', 'tempora', 'incidunt', 'magnam', 'aliquam',
    'quaerat', 'minima', 'nostrum', 'exercitationem', 'ullam', 'corporis', 'suscipit', 'laboriosam', 'aliquid',
    'commodi', 'consequatur', 'autem', 'vel', 'eum', 'iure', 'quam', 'nihil', 'molestiae', 'illum', 'quo',
    'at', 'vero', 'accusamus', 'iusto', 'odio', 'dignissimos', 'ducimus', 'blanditiis', 'praesentium', 'voluptatum',
    'deleniti', 'atque', 'corrupti', 'quos', 'quas', 'molestias', 'excepturi', 'occaecati', 'cupiditate',
    'provident', 'similique', 'mollitia', 'animi', 'dolorum', 'fuga', 'harum', 'quidem', 'rerum', 'facilis',
    'expedita', 'distinctio', 'nam', 'libero', 'tempore', 'sum', 'soluta', 'nobis', 'eligendi', 'optio',
    'cumque', 'impedit', 'minus', 'quod', 'maxime', 'placeat', 'facere', 'possimus', 'assumenda', 'repellendus',
    'temporibus', 'quibusdam', 'officiis', 'debitis', 'necessitatibus', 'saepe', 'eveniet', 'voluptates',
    'repudiandae', 'recusandae', 'itaque', 'earum', 'hic', 'tenetur', 'a', 'sapiente', 'delectus', 'reiciendis',
    'voluptatibus', 'maiores', 'alias', 'perferendis', 'doloribus', 'asperiores', 'repellat', 'integer',
    'nec', 'praesent', 'cursus', 'ante', 'dapibus', 'diam', 'sem', 'nibh', 'elementum', 'imperdiet', 'sagittis',
    'mauris', 'fusce', 'tellus', 'augue', 'semper', 'porta', 'massa', 'vestibulum', 'lacinia', 'arcu', 'eget',
    'class', 'aptent', 'taciti', 'sociosqu', 'litora', 'torquent', 'per', 'conubia', 'nostra', 'inceptos',
    'himenaeos', 'curabitur', 'sodales', 'ligula', 'dignissim', 'nunc', 'tortor', 'pellentesque', 'aenean',
    'scelerisque', 'maecenas', 'mattis', 'convallis', 'tristique', 'proin', 'egestas', 'porttitor', 'morbi',
    'lectus', 'risus', 'iaculis', 'luctus', 'ac', 'turpis', 'aliquet', 'metus', 'ullamcorper', 'tincidunt',
    'euismod', 'quisque', 'volutpat', 'condimentum', 'urna', 'facilisi', 'fringilla', 'suspendisse', 'potenti',
    'feugiat', 'mi', 'sapien', 'etiam', 'ultrices', 'justo', 'lacus', 'pharetra', 'auctor', 'interdum', 'primis',
    'faucibus', 'orci', 'posuere', 'cubilia', 'curae', 'molestie', 'dui', 'blandit', 'congue', 'pede', 'facilisis',
    'laoreet', 'donec', 'viverra', 'malesuada', 'pulvinar', 'sollicitudin', 'cras', 'nisl', 'felis', 'venenatis',
    'ultricies', 'accumsan', 'pretium', 'fermentum', 'nullam', 'purus', 'mollis', 'vivamus', 'consectetuer'
];


function randomWord() {
    var arr = ipsumLoremWord;
    var idx = randomInt(0, arr.length - 1);
    return arr[idx];
}

function randomPhrase(limitLenght) {
    if (!limitLenght) limitLenght = 50;
    var length = Math.ceil(Math.random() * limitLenght / 7);
    return new Array(length)
        .fill(null)
        .map(randomWord)
        .reduce(function (ac, cr) {
            if (ac.length + cr.length < limitLenght) {
                ac.parts.push(cr);
            }
            return ac;
        }, { parts: [], length: 0 }).parts
        .join(' ');

}

function randomSentence(limitLenght) {
    if (!limitLenght) limitLenght = 300;
    var length = Math.ceil(Math.random() * limitLenght / 70);
    var res = new Array(length)
        .fill(null)
        .map(randomPhrase)
        .reduce(function (ac, cr) {
            if (ac.length + cr.length < limitLenght) {
                ac.parts.push(cr);
            }
            return ac;
        }, { parts: [], length: 0 }).parts
        .join(', ');
    if (Math.random() < 0.03) {
        res = res.replace(/\,/i, ':');
    }
    res = res.replace(/^./, function (x) {
        return x.toUpperCase();
    });
    res += '.';
    return res;
}

function randomParagraph(limitLenght) {
    if (!limitLenght) limitLenght = 1000;
    var length = Math.ceil(Math.random() * limitLenght / 200);
    return new Array(length).fill(null)
        .map(randomSentence)
        .reduce(function (ac, cr) {
            if (ac.length + cr.length < limitLenght) {
                ac.parts.push(cr);
            }
            return ac;
        }, { parts: [], length: 0 }).parts
        .join(' ');
}
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TreeListItem.js



var TreeListItem_ = ACore["a" /* default */]._;
var TreeListItem_$ = ACore["a" /* default */].$;

function TreeListItem() {
    var res = 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'
        ]
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, TreeListItem.eventHandler);

    res.$list = TreeListItem_$('treelist', res).on('press', function (event, sender) {
        res.emit('press', event, this);
    });

    res.$parent = TreeListItem_$('.absol-tree-list-item-parent', res).on('mousedown', res.eventHandler.clickParent);
    res.$text = TreeListItem_$('span.absol-tree-list-item-text', res);
    res.$desc = TreeListItem_$('span.absol-tree-list-item-desc', res);
    res.$descCtn = TreeListItem_$('.absol-tree-list-item-desc-container', res);
    res.$list.level = 1;
    OOP["a" /* default */].drillProperty(res, res.$list, 'items');

    return res;
};


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.containsClass('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["a" /* default */].creator.treelistitem = TreeListItem;
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selecttreemenu.css
var selecttreemenu = __webpack_require__(45);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectTreeMenu.js








var SelectTreeMenu_ = ACore["a" /* default */]._;
var SelectTreeMenu_$ = ACore["a" /* default */].$;

function SelectTreeMenu() {
    var res = SelectTreeMenu_({
        class: ['absol-selectmenu', 'absol-selecttreemenu'],
        extendEvent: 'change',
        attr: {
            tabindex: '1'
        },
        child: [
            '.absol-selectmenu-holder-item',
            {
                tag: 'button',
                class: 'absol-selectmenu-btn',
                child: ['dropdown-ico']
            },
            {
                class: 'absol-selectmenu-dropdown-box',
                child: [
                    {
                        tag: 'searchtextinput', style: {
                            display: 'none'
                        }
                    },
                    'bscroller.limited-height']
            },
            'attachhook',
        ]
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, SelectTreeMenu.eventHandler);
    res.$renderSpace = SelectTreeMenu.getRenderSpace();

    res.$treelist = SelectTreeMenu_('treelist', res).addTo(res.$renderSpace);
    res.$treelist.on('press', res.eventHandler.treelistPress, true);
    res.$vscroller = SelectTreeMenu_$('bscroller', res);
    res.on('mousedown', res.eventHandler.click, true);
    res.on('blur', res.eventHandler.blur);

    res.$holderItem = SelectTreeMenu_$('.absol-selectmenu-holder-item', res);
    res.$dropdownBox = SelectTreeMenu_$('.absol-selectmenu-dropdown-box', res);
    res.$searchTextInput = SelectTreeMenu_$('searchtextinput', res);
    res.$searchTextInput.on('stoptyping', res.eventHandler.searchModify);
    res.treeListBound = { height: 0, width: 0 };
    res.$attachhook = SelectTreeMenu_$('attachhook', res)
        .on('error', res.eventHandler.attached);

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

SelectTreeMenu.prototype.updateDropdownPostion = function (searching) {
    var screenBottom = Dom["a" /* default */].getScreenSize().height;

    var outBound = Dom["a" /* default */].traceOutBoundingClientRect(this);
    var searchBound = this.$searchTextInput.getBoundingClientRect();
    var bound = this.getBoundingClientRect();
    var availableTop = bound.top - outBound.top - (this.enableSearch ? searchBound.height + 8 : 0) - 20;
    var availableBottom = Math.min(outBound.bottom, screenBottom) - bound.bottom - (this.enableSearch ? searchBound.height + 8 : 0) - 20;
    if (this.forceDown || (!this.$dropdownBox.containsClass('up') && searching) || (!searching && (availableBottom >= this.treeListBound.height || availableBottom > availableTop))) {
        if (!searching) {
            this.$dropdownBox.removeClass('up');
            this.$searchTextInput.selfRemove();
            this.$dropdownBox.addChildBefore(this.$searchTextInput, this.$vscroller);

        }
        this.$vscroller.addStyle('max-height', availableBottom + 'px');
    }
    else {
        if (!searching) {
            this.$dropdownBox.addClass('up');
            this.$searchTextInput.selfRemove();
            this.$dropdownBox.addChild(this.$searchTextInput);
        }
        this.$vscroller.addStyle('max-height', availableTop + 'px');
    }
    if (!searching)
        this.scrollToSelectedItem();
};

SelectTreeMenu.prototype.scrollToSelectedItem = function () {
    this._scrolling = true;
    setTimeout(function () {
        if (this.$selectedItem) this.$vscroller.scrollInto(this.$selectedItem);
        this._scrolling = false;
    }.bind(this), 5);
};

SelectTreeMenu.getRenderSpace = js_SelectMenu.getRenderSpace;

SelectTreeMenu.eventHandler = {};


SelectTreeMenu.eventHandler.bodyClick = function (event) {
    event.preventDefault();
    if (!EventEmitter["a" /* default */].hitElement(this, event)) {
        this.isFocus = false;
    }
};

SelectTreeMenu.eventHandler.attached = function () {
    if (this._updateInterval) return;
    if (!this.$treelist.parentNode) this.$content.addTo(this.$renderSpace);
    this._updateInterval = setInterval(function () {
        if (!this.isDescendantOf(document.body)) {
            clearInterval(this._updateInterval);
            this._updateInterval = undefined;
            this.$treelist.selfRemove();
        }
    }.bind(this), 10000);
};

SelectTreeMenu.eventHandler.click = function (event) {
    if (EventEmitter["a" /* default */].hitElement(this.$treelist, event) || (this.isFocus && !EventEmitter["a" /* default */].hitElement(this.$dropdownBox, event))) {
        event.preventDefault();
        setTimeout(function () {
            this.isFocus = false;
        }.bind(this), 1);
    }
    else {
        if (!this.isFocus) {
            this.$treelist.addTo(this.$vscroller);
            this.isFocus = true;
        }
    }
};


SelectTreeMenu.eventHandler.searchModify = function (event) {
    var value = this.$searchTextInput.value;
    this.search(value);

}

SelectTreeMenu.prototype.notifyChange = function (eventData) {
    setTimeout(function () {
        this.emit('change', Object.assign({}, eventData), this)
    }.bind(this), 1)
}

SelectTreeMenu.eventHandler.treelistPress = function (event) {
    var value = event.target.value;
    if (value != this._value) {
        this._value = value;
        //not need update tree
        this.$holderItem.clearChild()
            .addChild(SelectTreeMenu_(event.target.$parent.cloneNode(true)));
        this.notifyChange(Object.assign({ value: value }, event));
    }
};

SelectTreeMenu.prototype.updateSelectedItem = function (scrollInto) {
    if (this._isUpdateSelectedItem) return;
    this._isUpdateSelectedItem = true;
    var self = this;
    setTimeout(function () {
        SelectTreeMenu_$('treelistitem', self.$treelist, function (elt) {
            if (elt.value == self.value) {
                self.$selectedItem = elt;
                self.$holderItem.clearChild();
                self.$holderItem.addChild(elt.$parent.cloneNode(true));
                elt.active = true;
                if (scrollInto) {
                    this.$vscroller.scrollInto(elt);
                }
            }
            else {
                elt.active = false;
            }
        });
        self._isUpdateSelectedItem = false;
    }, 1)
}

SelectTreeMenu.property = {};
SelectTreeMenu.property.items = {
    set: function (value) {
        this._items = value || [];
        this.$treelist.items = SelectTreeMenu.prepareData(this._items);
        this.__searchcache__ = {};
        this.$treelist.realignDescription();

        this.treeListBound = this.$treelist.getBoundingClientRect();
        this.addStyle('min-width', this.treeListBound.width + 37 + 2 + 'px');
        if (typeof this.value == 'undefined' && this._items.length > 0) {
            var first = this._items[0];
            if (typeof first == 'string') {
                this.value = first;
            }
            else {
                this.value = (typeof (first.value) == 'undefined') ? first.text : first.value;
            }
        }
        else {
            this.updateSelectedItem();
        }
    },
    get: function () {
        return this._items;
    }
};

SelectTreeMenu.property.value = {
    set: function (value) {
        this._value = value;
        this.updateSelectedItem();
    },
    get: function () {
        return this._value;
    }
};

SelectTreeMenu.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;
    }
};

SelectTreeMenu.property.isFocus = {
    set: function (value) {
        value = !!value;
        if (value == this.isFocus) return;
        this._isFocus = value;
        if (value) {
            this.addClass('focus');
            this.$treelist.addTo(this.$vscroller);
            SelectTreeMenu_$('body').on('mousedown', this.eventHandler.bodyClick);
            if (this.enableSearch) {
                setTimeout(function () {
                    this.$searchTextInput.focus();
                }.bind(this), 50);
            }

            this.updateDropdownPostion();
            this.scrollToSelectedItem();
        }
        else {
            this.$treelist.addTo(this.$renderSpace);
            SelectTreeMenu_$('body').off('mousedown', this.eventHandler.bodyClick);
            this.removeClass('focus');
            if (this.$searchTextInput.value.length > 0) {
                this.$searchTextInput.value = '';
                setTimeout(function () {
                    this.$treelist.items = this.items;
                    this.$treelist.realignDescription();
                    setTimeout(this.updateSelectedItem.bind(this), 1);
                    this.treeListBound = this.$treelist.getBoundingRecursiveRect();
                }.bind(this), 1)
            }
        }
    },
    get: function () {
        return !!this._isFocus;
    }
};


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


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

SelectTreeMenu.EXTRA_MATCH_SCORE = 2;
SelectTreeMenu.UNCASE_MATCH_SCORE = 1;
SelectTreeMenu.UVN_MATCH_SCORE = 3;
SelectTreeMenu.EQUAL_MATCH_SCORE = 4;
SelectTreeMenu.WORD_MATCH_SCORE = 3;

/**
 * @typedef {{text:String, __words__: Array<String>, __textNoneCase__: String, __wordsNoneCase__: Array<String>, __nvnText__:String, __nvnWords__:Array<String>, __nvnTextNoneCase__: String, __nvnWordsNoneCase__: Array<String>}} SearchItem
 * @param {SearchItem} item
 * @returns {SearchItem}
 */
SelectTreeMenu.prepareItem = function (item) {
    var spliter =/\s+/;

    item.__text__ = item.text.replace(/([\s\b\-()\[\]]|&#8239;|&nbsp;|&#xA0;|\s)+/g, ' ').trim();
    item.__words__ = item.__text__.split(spliter);

    item.__textNoneCase__ = item.__text__.toLowerCase();
    item.__wordsNoneCase__ = item.__textNoneCase__.split(spliter);


    item.__nvnText__ = Object(stringFormat["b" /* nonAccentVietnamese */])(item.__text__);
    item.__nvnWords__ = item.__nvnText__.split(spliter);

    item.__nvnTextNoneCase__ = item.__nvnText__.toLowerCase();
    item.__nvnWordsNoneCase__ = item.__nvnTextNoneCase__.split(spliter);
    return item;
};


SelectTreeMenu.prepareData = function (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];
        SelectTreeMenu.prepareItem(item);
        if (item.items) SelectTreeMenu.prepareData(item.items);
    }
    return items;
}

/**
 * @param {SearchItem} queryItem
 * @param {SearchItem} item
 */
SelectTreeMenu.calScore = function (queryItem, item) {
    var score = 0;

    if (item.__text__ == queryItem.__text__)
        score += SelectTreeMenu.EQUAL_MATCH_SCORE * queryItem.__text__.length;

    var extraIndex = item.__text__.indexOf(queryItem.__text__);
    
    if (extraIndex >= 0) {
        score += SelectTreeMenu.EXTRA_MATCH_SCORE * queryItem.__text__.length - extraIndex / item.__text__.length;
    }
    
    extraIndex = item.__textNoneCase__.indexOf(queryItem.__textNoneCase__);
    if (extraIndex >= 0) {
        score += SelectTreeMenu.UNCASE_MATCH_SCORE * queryItem.__text__.length - extraIndex / item.__text__.length;
    }
    
    extraIndex = item.__nvnTextNoneCase__.indexOf(queryItem.__nvnTextNoneCase__);
    if (extraIndex >= 0) {
        score += SelectTreeMenu.UNCASE_MATCH_SCORE * queryItem.__text__.length - extraIndex / item.__text__.length;
    }
    
    score += wordsMatch(queryItem.__nvnWordsNoneCase__, item.__nvnWordsNoneCase__) / (queryItem.__nvnWordsNoneCase__.length + 1 + item.__nvnWordsNoneCase__.length) * 2 * SelectTreeMenu.WORD_MATCH_SCORE;
    score += wordsMatch(queryItem.__wordsNoneCase__, item.__wordsNoneCase__) / (queryItem.__wordsNoneCase__.length + 1 + item.__wordsNoneCase__.length) * 2 * SelectTreeMenu.WORD_MATCH_SCORE;
    return score;
};

SelectTreeMenu.queryTree = function (query, items) {
    var gmaxScore = 0;
    var gminScore = 1000;
    var queryItem = SelectTreeMenu.prepareItem({ text: query });

    function makeScore(item) {

        var score = SelectTreeMenu.calScore(queryItem, item);
        gmaxScore = Math.max(score, gmaxScore);
        gminScore = Math.min(score, gminScore);

        var children = (item.items || []).map(function (item) {
            return makeScore(item);
        });

        var maxScore = children.reduce(function (ac, cr) {
            return Math.max(ac, cr.maxScore);
        }, score);

        return {
            score: score,
            maxScore: maxScore,
            item: item,
            children: children
        }
    }

    function sortcmp(a, b) {
        return b.maxScore - a.maxScore;
    }
    function makeItems(nodes, medScore) {
        nodes.sort(sortcmp);
        return nodes.filter(function (node) {
            return node.maxScore >= medScore;
        }).map(function (node) {
            var res;
            if (typeof node.item == 'string') {
                res = node.item;
            }
            else {
                res = Object.assign({}, node.item);
                if (node.children && node.children.length > 0) {
                    res.items = makeItems(node.children, medScore);
                    if (res.items.length == 0) delete res.items;
                }
            }
            return res;
        });
    }

    var scoredItems = items.map(makeScore);

    var medianScore = (gminScore + gmaxScore) / 2;
    var items = makeItems(scoredItems, medianScore);

    return items;
};

SelectTreeMenu.prototype.search = function (query) {
    if (query.length == 0) {
        this.$treelist.items = this.items;
        this.updateSelectedItem();
        this.updateDropdownPostion(true);
        this.scrollToSelectedItem();
    }
    else {
        var searchResult = this.__searchcache__[query] || SelectTreeMenu.queryTree(query, this.items);
        this.__searchcache__[query] = searchResult;
        this.$treelist.items = searchResult;
        this.updateSelectedItem();
        this.updateDropdownPostion(true);
        this.$vscroller.scrollTop = 0;
    }
};


ACore["a" /* default */].creator.selecttreemenu = SelectTreeMenu;

/* harmony default export */ var js_SelectTreeMenu = (SelectTreeMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/selectbox.css
var selectbox = __webpack_require__(47);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SelectBox.js








var SelectBox_ = ACore["a" /* default */]._;
var SelectBox_$ = ACore["a" /* default */].$;


function SelectBox() {
    var res = SelectBox_({
        class: ['absol-selectbox'],
        extendEvent: ['change', 'add', 'remove'],
        attr: {
            tabindex: '1'
        },
        child: [
            '.absol-selectbox-content-item',
            {
                class: 'absol-selectmenu-dropdown-box',
                child: [
                    {
                        tag: 'searchtextinput', style: {
                            display: 'none'
                        }
                    },
                    {
                        tag: 'bscroller',
                        class: 'limited-height',
                        child: [
                            '.absol-selectlist.search'//handled event by itself, reusing style

                        ]
                    }]
            },
            'attachhook',
        ]
    });
    res.eventHandler = OOP["a" /* default */].bindFunctions(res, SelectBox.eventHandler);
    res.$renderSpace = js_SelectMenu.getRenderSpace();

    res.$vscroller = SelectBox_$('bscroller', res);
    res.$attachhook = SelectBox_$('attachhook', res);
    res.$selectlist = SelectBox_('.absol-selectlist.choose', res).addTo(res.$renderSpace);
    res.$searchlist = SelectBox_$('.absol-selectlist.search', res).addStyle('display', 'none');
    res.on('click', res.eventHandler.click, true);
    res.on('blur', res.eventHandler.blur);
    res.$holderItem = SelectBox_$('.absol-selectbox-content-item', res);
    res.$dropdownBox = SelectBox_$('.absol-selectmenu-dropdown-box', res);
    res.$searchTextInput = SelectBox_$('searchtextinput', res);
    res.$searchTextInput.on('stoptyping', res.eventHandler.searchModify);
    res.selectListBound = { height: 0, width: 0 };//selectlist did not init  

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

    res.$attachhook.on('error', res.eventHandler.attached);

    return res;
};





SelectBox.prototype.updateItemList = function () {
    var self = this;
    self.$selectlist.clearChild();
    this._items.map(function (item) {
        var text;
        if (typeof item == 'string') {
            text = item;
        }
        else {
            text = item.text;
        }
        return SelectBox_({
            class: 'absol-selectlist-item',
            child: '<span>' + text + '</span>',
            props: {
                _data: item
            },
            on: {
                click: function (event) {
                    self.eventHandler.selectlistChange(event, this);
                }
            }
        }).addTo(self.$selectlist);
    });

    this.selectListBound = this.$selectlist.getBoundingClientRect();
    this.addStyle('min-width', this.selectListBound.width + 15 + 'px');
};



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.resetFilter = function () {
    Array.prototype.forEach.call(this.$selectlist.childNodes, function (e) {
        e.removeStyle('display');
    }.bind(this));
};


SelectBox.prototype.updateDropdownPostion = function (searching) {
    var screenBottom = Dom["a" /* default */].getScreenSize().height;
    var outBound = Dom["a" /* default */].traceOutBoundingClientRect(this);
    var bound = this.getBoundingClientRect();
    var searchBound = this.$searchTextInput.getBoundingClientRect();

    var availableTop = bound.top - outBound.top - (this.enableSearch ? searchBound.height + 8 : 0) - 7;//for boder
    var availableBottom = Math.min(outBound.bottom, screenBottom) - bound.bottom - (this.enableSearch ? searchBound.height + 8 : 0) - 7;
    if (this.forceDown || (!this.$dropdownBox.containsClass('up') && searching) || (!searching && (availableBottom >= this.selectListBound.height || availableBottom > availableTop))) {
        if (!searching) {
            this.$dropdownBox.removeClass('up');
            this.$searchTextInput.selfRemove();
            this.$dropdownBox.addChildBefore(this.$searchTextInput, this.$vscroller);

        }
        this.$vscroller.addStyle('max-height', availableBottom + 'px');
    }
    else {
        if (!searching) {
            this.$dropdownBox.addClass('up');
            this.$searchTextInput.selfRemove();
            this.$dropdownBox.addChild(this.$searchTextInput);
        }
        if (availableTop < this.selectListBound.height) {
            this.$vscroller.addStyle('max-height', availableTop + 'px');

        }
        else {
            this.$vscroller.addStyle('max-height', this.selectListBound.height + 'px');
        }
    }
};

SelectBox.prototype.addSelectedItem = function (data) {
    var self = this;
    SelectBox_({
        tag: 'selectboxitem',
        props: {
            data: data
        },
        on: {
            close: function (event) {
                self.eventHandler.removeItem(event, this);
                event.itemData = data;
                self.emit('remove', event, self);
                self.emit('change', event, self);
            }
        }
    }).addTo(this.$holderItem);
};


SelectBox.prototype.queryValues = function () {
    return Array.prototype.map.call(this.$holderItem.childNodes, function (e) {
        var data = e.data;
        return (typeof data == 'string') ? data : data.value;
    })
};
SelectBox.prototype.querySelectedItems = function () {
    return Array.prototype.map.call(this.$holderItem.childNodes, function (e) {
        return e.data;
    });
};

SelectBox.prototype.updateSelectedItem = function () {
    if (!this._values) return;
    var dict = this._values.reduce(function (ac, cr) {
        var value = cr;
        ac[value] = true;
        return ac;
    }, {});
    this.$holderItem.clearChild();
    Array.prototype.forEach.call(this.$selectlist.childNodes, function (e) {
        var value = (typeof e._data == 'string') ? e._data : e._data.value;
        if (dict[value]) {
            e.addClass('selected');
            this.addSelectedItem(e._data);
        }
        else {
            e.removeClass('selected');
        }
    }.bind(this));
};



SelectBox.prototype.init = js_SelectMenu.prototype.init;


SelectBox.property = {};

SelectBox.property.isFocus = {
    set: function (value) {
        value = !!value;
        if (value == this.isFocus) return;
        this._isFocus = value;
        if (value) {
            SelectBox_$('body').on('click', this.eventHandler.bodyClick);
            this.addClass('focus');
            this.$searchlist.addStyle('display', 'none');
            this.$selectlist.addTo(this.$vscroller);
            if (this.enableSearch) {
                setTimeout(function () {
                    this.$searchTextInput.focus();
                }.bind(this), 50);
            }
            this.selectListBound = this.$selectlist.getBoundingClientRect();
            this.updateDropdownPostion();
        }
        else {
            this.$selectlist.addTo(this.$renderSpace);
            SelectBox_$('body').off('click', this.eventHandler.bodyClick);
            this.removeClass('focus');
            this.$searchTextInput.value = '';
            this.$searchTextInput.emit('stoptyping');
        }
    },
    get: js_SelectMenu.property.isFocus.get
};



SelectBox.property.items = {
    set: function (value) {
        this._items = value;
        this.updateItemList();
        // this.sync = this.sync.then(this.updateSelectedItem.bind(this));
    },
    get: js_SelectMenu.property.items.get
};

SelectBox.property.values = {
    set: function (value) {
        this._values = (value instanceof Array) ? value : [value];
        this.sync = this.sync.then(this.updateSelectedItem.bind(this));
    },
    get: function () {
        return this._values || [];
    }
};


SelectBox.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;
    }
};

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


SelectBox.property.hidden = js_SelectMenu.property.hidden;

SelectBox.eventHandler = Object.assign({}, js_SelectMenu.eventHandler);

SelectBox.eventHandler.attached = function (event) {
    if (this._updateInterval) return;
    if (!this.$selectlist.parentNode) this.$content.addTo(this.$renderSpace);
    this._updateInterval = setInterval(function () {
        if (!this.isDescendantOf(document.body)) {
            clearInterval(this._updateInterval);
            this._updateInterval = undefined;
            this.$selectlist.selfRemove();
        }
    }.bind(this), 10000);
};

SelectBox.eventHandler.click = function (event) {
    if (EventEmitter["a" /* default */].hitElement(this.$selectlist, event) || (this.isFocus && !EventEmitter["a" /* default */].hitElement(this.$dropdownBox, event)) || EventEmitter["a" /* default */].hitElement(this.$searchlist, event)) {
        event.preventDefault();
        setTimeout(function(){
            this.isFocus = false;
        }.bind(this), 5)
    }
    else {
        if (!this.isFocus && (event.target == this.$holderItem || event.target == this)) {
            this.updateDropdownPostion();
            this.isFocus = true;
        }
    }
};


SelectBox.eventHandler.selectlistChange = function (event, itemElt) {
    //todo
    this.$vscroller.removeStyle('max-height');
    var data = itemElt._data;
    itemElt.addClass('selected');
    this.addSelectedItem(data);
    this._values = this.queryValues();
    this.resetFilter();
    event.itemData = data;
    this.emit('add', event, this);
    this.emit('change', event, this);
};

SelectBox.eventHandler.removeItem = function (event, item) {
    var data = item.data;
    item.selfRemove();
    Array.prototype.forEach.call(this.$selectlist.childNodes, function (e) {
        if (e._data == data) {
            e.removeClass('selected');
        }
    });
    Array.prototype.forEach.call(this.$searchlist.childNodes, function (e) {
        if (e._data == data) {
            e.removeClass('selected');
        }
    });
    this._values = this.queryValues();
    // this.emit('change', event, this);

};



SelectBox.eventHandler.searchModify = function (event) {
    var filterText = this.$searchTextInput.value.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
    if (filterText.length == 0) {
        this.$selectlist.addTo(this.$vscroller);
        this.$searchlist.addStyle('display', 'none');
    }
    else {
        this.$searchlist.removeStyle('display');
        this.$selectlist.addTo(this.$renderSpace);
        var view = [];
        if (filterText.length == 1) {
            view = this.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 = Object(stringFormat["b" /* nonAccentVietnamese */])(text);
                it.score += text.toLowerCase().indexOf(filterText.toLowerCase()) >= 0 ? 100 : 0;
                return it;
            });
            view.sort(function (a, b) {
                if (b.score - a.score == 0) {
                    if (Object(stringFormat["b" /* nonAccentVietnamese */])(b.text) > Object(stringFormat["b" /* nonAccentVietnamese */])(a.text)) return -1;
                    return 1;
                }
                return b.score - a.score;
            });

            view = view.filter(function (x) {
                return x.score > 0;
            });
        }
        else {
            var its = this.items.map(function (item) {
                var res = { item: item, text: typeof item === 'string' ? item : item.text };
                var text = res.text.replace(/((\&nbsp)|(\s))+/g, ' ').trim();
                res.score = (phraseMatch(text, filterText)
                    + phraseMatch(Object(stringFormat["b" /* nonAccentVietnamese */])(text), Object(stringFormat["b" /* nonAccentVietnamese */])(filterText))) / 2;
                if (Object(stringFormat["b" /* nonAccentVietnamese */])(text).replace(/s/g, '').toLowerCase().indexOf(Object(stringFormat["b" /* 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 (Object(stringFormat["b" /* nonAccentVietnamese */])(b.text) > Object(stringFormat["b" /* nonAccentVietnamese */])(a.text)) return -1;
                    return 1;
                }
                return b.score - a.score;
            });

            var view = its.filter(function (x) {
                return x.score > 0.5;
            });
            if (view.length == 0) {
                var bestScore = its[0].score;
                view = its.filter(function (it) {
                    return it.score + 0.001 >= bestScore;
                });
            }
            if (view[0].score == 0) view = [];
        }

        view = view.map(function (e) {
            return e.item;
        });

        var self = this;
        self.$searchlist.clearChild();
        view.map(function (item) {
            var sameElement = Array.prototype.filter.call(self.$selectlist.childNodes, function (e) {
                return e._data == item;
            })[0];

            if (sameElement.style.display == 'none' || sameElement.containsClass('selected')) return;
            var text;
            if (typeof item == 'string') {
                text = item;
            }
            else {
                text = item.text;
            }
            return SelectBox_({
                class: 'absol-selectlist-item',
                child: '<span>' + text + '<span>',
                props: {
                    _data: item
                },
                on: {
                    click: function (event) {
                        this.addStyle('display', 'none')
                        self.eventHandler.selectlistChange(event, sameElement);
                    }
                }
            }).addTo(self.$searchlist);
        });

    }

    if (filterText.length > 0)
        this.selectListBound = this.$searchlist.getBoundingClientRect();
    else
        this.selectListBound = this.$selectlist.getBoundingClientRect();

    this.updateDropdownPostion(true);

};;



function SelectBoxItem() {
    var res = SelectBox_({
        class: 'absol-selectbox-item',
        extendEvent: 'close',
        child: [
            '.absol-selectbox-item-text',
            {
                class: 'absol-selectbox-item-close',
                child: '<span class="mdi mdi-close"></span>'
            }
        ]
    });
    res.eventHandler = OOP["a" /* default */].bindFunctions(res, SelectBoxItem.eventHandler);
    res.$text = SelectBox_$('.absol-selectbox-item-text', res);
    res.$close = SelectBox_$('.absol-selectbox-item-close', res);
    res.$close.on('click', res.eventHandler.clickClose);
    return res;
};

SelectBoxItem.eventHandler = {};
SelectBoxItem.eventHandler.clickClose = function (event) {
    this.emit('close', event);
};

SelectBoxItem.property = {};

SelectBoxItem.property.data = {
    set: function (value) {
        this._data = value;
        this.$text.clearChild();
        this.$text.addChild(SelectBox_('<span>' + this.text + '</span>'));
    },
    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;
    }
};


ACore["a" /* default */].creator.selectbox = SelectBox;
ACore["a" /* default */].creator.selectboxitem = SelectBoxItem;
/* harmony default export */ var js_SelectBox = (SelectBox);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/radio.css
var css_radio = __webpack_require__(49);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RadioButton.js




var RadioButton_ = ACore["a" /* default */]._;
var RadioButton_$ = ACore["a" /* default */].$;

function RadioButton() {
    var res = RadioButton_(
        `<div class="absol-radio">
            <input type="radio" />
            <svg class="absol-radio-icon absol-radio-icon-left" 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>
        </div>`
    );

    res.$attachHook = RadioButton_('attachhook').addTo(res);
    res.defineEvent('change');
    res.defineEvent('uncheck');
    res.$input = RadioButton_$('input', res);
    OOP["a" /* default */].drillProperty(res, res.$input, 'value');

    res.on('click', function (event) {
        if (!res.checked) {
            if (!this.disabled) {
                res.checked = true;
                res.emit('change', event, res);
            }
        }
    });

    res.$attachHook.on('error', function () {
        res.checked = res.checked;
    });
    return res;
}

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 = {
    checked: {
        set: function (value) {
            this.$input.checked = !!value;
            if (this.checked) {
                this.addClass('checked');
                var _this = this;
                setTimeout(function () {
                    function finish(event) {
                        if (!_this.checked) {
                            _this.removeClass('checked')
                            document.body.removeEventListener('click', finish, false);
                            _this.emit('uncheck', { target: _this }, _this);
                        }
                    }
                    document.body.addEventListener('click', finish, false);
                }, 100);
            }
            else {
                this.removeClass('checked');
            }
        },
        get: function () {
            return this.$input.checked;
        }
    },
    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 = 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;
};



RadioButton.initAfterLoad = function () {
    return Dom["a" /* default */].documentReady.then(function () {
        Array.apply(null,document.getElementsByTagName('input')).filter(function (e) {
            return e.getAttribute('type') == 'radio' && e.classList.contains('absol-radio');
        }).forEach(function (radio) {
            RadioButton_$(radio);
            radio.removeClass('absol-radio');
            var classes = radio.attr('class').trim().split(/\s+/);
            var res = RadioButton_(`<div class="absol-radio  standar-alone">
                <svg class="absol-radio-icon absol-radio-icon-left" 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>
            </div>`);
            
            radio.selfReplace(res);
            res.addChild(radio);
            for (var i = 0; i < classes.length; ++i) {
                if (classes[i])
                res.addClass(classes[i]);
            }
            res.defineEvent('change');
            res.defineEvent('uncheck');
            res.$input = radio;
            OOP["a" /* default */].drillProperty(res, res.$input, 'value');
            
            res.on('click', function (event) {
                if (!res.checked) {
                    if (!this.disabled) {
                        res.checked = true;
                        res.emit('change', event, res);
                    }
                }
            });
            
            res.defineAttributes(RadioButton.attribute);
            Object.defineProperties(res,RadioButton.property);
            Object.assign(res, RadioButton.prototype);
            if (radio.checked) res.attr('checked', 'true');
            res.$input.on('change', function(){
                res.checked = this.checked;
            }); 
        });
    });
}

ACore["a" /* default */].install('RadioButton'.toLowerCase(), RadioButton);

/* harmony default export */ var js_RadioButton = (RadioButton);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Radio.js





var Radio_ = ACore["a" /* default */]._;
var Radio_$ = ACore["a" /* default */].$;

function Radio_Radio() {
    var res = Radio_(
        '<div class="absol-radio">' +
        '    <input type="radio" />' +
        '    <svg class="absol-radio-icon absol-radio-icon-left" 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>' +
        '    <label style="display:none"></label>' +
        '    <svg class="absol-radio-icon absol-radio-icon-right" 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>' +
        '</div>'
    );
    res.defineEvent('change');
    res.$input = Radio_$('input', res);
    res.$label = Radio_$('label', res);

    OOP["a" /* default */].drillProperty(res, res.$input, 'value');

    res.on('click', function (event) {
        if (!res.checked) {
            if (!this.disabled) {
                res.checked = true;
                res.emit('change', event, res);
            }
        }
    });

    res.sync = res.afterAttached().then(function () {
        res.checked = res.checked;
    });

    return res;
};

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


Radio_Radio.prototype.attribute = js_RadioButton;

Radio_Radio.property = {
    checked: {
        set: function (value) {
            this.$input.checked = !!value;
            if (this.checked) {
                this.addClass('checked');
                var _this = this;
                setTimeout(function () {
                    function finish(event) {
                        if (!_this.checked) {
                            _this.removeClass('checked')
                            document.body.removeEventListener('click', finish, false);
                        }
                    }
                    document.body.addEventListener('click', finish, false);
                }, 100);
            }
            else {
                this.removeClass('checked');
            }
        },
        get: function () {
            return this.$input.checked;
        }
    },
    name: {
        set: function (name) {
            this.$input.setAttribute('name', name);

        },
        get: function () {
            return this.$input.getAttribute('name');
        }
    },
    text: {
        set: function (value) {
            value = (value || '').trim();
            this.$label.innerHTML = value;
            if (value.length == 0) this.$label.addStyle('display', 'none');
            else this.$label.removeStyle('display');
        },
        get: function () {
            return this.$label.innerHTML;
        }
    },
    disabled: {
        set: function (value) {
            this.$input.disabled = !!value;
            if (value) {
                this.addClass('disabled');
            }
            else {
                this.removeClass('disabled');
            }
        },
        get: function () {
            return this.$input.disabled;
        }
    }
};

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

Radio_Radio.getValueByName = function (name) {
    var inputs = Radio_Radio.getAllByName(name);
    var res = null;
    var input;
    for (var i = 0; i < inputs.length; ++i) {
        input = inputs[i];
        if (input.checked) {
            res = input.value;
        }
    }
    return res;
};


ACore["a" /* default */].creator.radio = Radio_Radio;

/* harmony default export */ var js_Radio = (Radio_Radio);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/switch.css
var css_switch = __webpack_require__(51);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Switch.js



var Switch_ = ACore["a" /* default */]._;
var Switch_$ = ACore["a" /* default */].$;


function Switch() {
    var res = Switch_({
        tag: 'label',
        class: 'absol-switch',
        extendEvent: 'change',
        child: [
            'input[type="checkbox"]',
            'span.absol-switch-slider'
        ]
    });
    res.$input = Switch_$('input', res);
    res.on('click', function (event) {
        res.emit('change', event, res);
    });
    OOP["a" /* default */].drillProperty(res, res.$input, 'checked');
    OOP["a" /* default */].drillProperty(res, res.$input, 'isOn', 'checked');
    return res;
}




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

ACore["a" /* default */].install('switch', Switch);

/* harmony default export */ var js_Switch = (Switch);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/checkbox.css
var css_checkbox = __webpack_require__(53);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckBox.js


var CheckBox_ = ACore["a" /* default */]._;
var CheckBox_$ = ACore["a" /* default */].$;


function CheckBox() {

    var svgIcon = function (pos) {
        return CheckBox_([
            '<svg class="absol-checkbox-icon absol-checkbox-icon-' + pos + '" width="18mm" height="18mm" 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;"/>',
            '  <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"/>',
            ' </g>',
            '</svg>'].join(''));
    }

    var res = CheckBox_({
        class: ['absol-checkbox'],
        child: [
            '<input type="checkbox" />',
            svgIcon('left'),
            '<label style="display:none"></label>',
            svgIcon('right')
        ]
    });
    res.defineEvent('change');
    res.$input = CheckBox_$('input', res);
    res.$label = CheckBox_$('label', res);

    res.on('click', function (event) {
        event.preventDefault();
        if (!this.disabled) {
            res.checked = !res.checked;
            res.emit('change', event, res);
        }

    });
    return res;
};

//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) {
            if (value == 'false' || value == null) {
                this.disabled = false;
            }
            else {
                this.disabled = true;
            }

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

CheckBox.property = {
    checked: {
        set: function (value) {
            this.$input.checked = !!value;
            if (this.checked) {
                this.addClass('checked');
            }
            else {
                this.removeClass('checked');
            }
        },
        get: function () {
            return this.$input.checked;
        }
    },

    text: {
        set: function (value) {
            value = (value || '').trim();
            this.$label.innerHTML = value;
            if (value.length == 0) this.$label.addStyle('display', 'none');
            else this.$label.removeStyle('display');
        },
        get: function () {
            return this.$label.innerHTML;
        }
    },
    disabled: {
        set: function (value) {
            this.$input.disabled = !!value;
            if (value) {
                this.addClass('disabled');
            }
            else {
                this.removeClass('disabled');
            }
        },
        get: function () {
            return this.$input.disabled;
        }
    }
};

ACore["a" /* default */].creator.checkbox = CheckBox;
/* harmony default export */ var js_CheckBox = (CheckBox);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CheckboxButton.js



var CheckboxButton_ = ACore["a" /* default */]._;
var CheckboxButton_$ = ACore["a" /* default */].$;


function CheckBoxButton() {

    var svgIcon = function (pos) {
        return CheckboxButton_([
            '<svg class="absol-checkbox-icon absol-checkbox-icon-' + pos + '" width="18mm" height="18mm" 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;"/>',
            '  <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"/>',
            ' </g>',
            '</svg>'].join(''));
    }

    var res = CheckboxButton_({
        class: ['absol-checkbox'],
        child: [
            '<input type="checkbox" />',
            svgIcon('left')
        ]
    });
    res.defineEvent('change');
    res.$input = CheckboxButton_$('input', res);
    res.$label = CheckboxButton_$('label', res);

    res.on('click', function (event) {
        event.preventDefault();
        if (!this.disabled) {
            res.checked = !res.checked;
            res.emit('change', event, res);
        }
    });
    return res;
};


CheckBoxButton.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;
        }
    }
};

CheckBoxButton.property = {
    checked: {
        set: function (value) {
            this.$input.checked = !!value;
            if (this.checked) {
                this.addClass('checked');
            }
            else {
                this.removeClass('checked');
            }
        },
        get: function () {
            return this.$input.checked;
        }
    },
    disabled: {
        set: function (value) {
            this.$input.disabled = !!value;
            if (value) {
                this.addClass('disabled');
            }
            else {
                this.removeClass('disabled');
            }
        },
        get: function () {
            return this.$input.disabled;
        }
    }
};




CheckBoxButton.initAfterLoad = function () {
    return Dom["a" /* default */].documentReady.then(function () {
        Array.apply(null, document.getElementsByTagName('input')).filter(function (e) {
            return e.getAttribute('type') == 'checkbox' && e.classList.contains('absol-checkbox');
        }).forEach(function (checkbox) {
            CheckboxButton_$(checkbox);
            checkbox.removeClass('absol-radio');
            var classes = checkbox.attr('class').trim().split(/\s+/);


            var svgIcon = function (pos) {
                return CheckboxButton_([
                    '<svg class="absol-checkbox-icon absol-checkbox-icon-' + pos + '" width="18mm" height="18mm" 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;"/>',
                    '  <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"/>',
                    ' </g>',
                    '</svg>'].join(''));
            }

            var res = CheckboxButton_({
                class: ['absol-checkbox'],
                child: [
                    svgIcon('left')
                ]
            });
         
         
            checkbox.selfReplace(res);
            res.addChild(checkbox);
            for (var i = 0; i < classes.length; ++i) {
                if (classes[i])
                    res.addClass(classes[i]);
            }
            res.defineEvent('change');
            res.$input = CheckboxButton_$('input', res);
            res.$label = CheckboxButton_$('label', res);

            res.$input = checkbox;
            

            res.on('click', function (event) {
                if (event.target == checkbox){
                    if (checkbox.checked) {
                        this.addClass('checked');
                    }
                    else {
                        this.removeClass('checked');
                    }
                    res.emit('change', event, res);
                }
                else{
                    event.preventDefault();
                    if (!this.disabled) {
                        res.checked = !res.checked;
                        res.emit('change', event, res);
                    }
                }
            });

            res.defineAttributes(CheckBoxButton.attribute);
            Object.defineProperties(res, CheckBoxButton.property);
            Object.assign(res, CheckBoxButton.prototype);
            if (checkbox.checked) res.attr('checked', 'true');
            if (checkbox.disabled) res.attr('disabled', 'true');
        });
    });
}

ACore["a" /* default */].install('CheckBoxButton'.toLowerCase(), CheckBoxButton);
/* harmony default export */ var CheckboxButton = (CheckBoxButton);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TextClipboard.js


var TextClipboard_ = ACore["a" /* default */]._;
var TextClipboard_$ = ACore["a" /* default */].$;

function TextClipboard() {
    
    var res = TextClipboard_({
        style: {
            positon: 'fixed',
            opacity: 0,
            width: '1px',
            height: '1px',
            top: 0,
            left: 0
        }
    });

    res.$textarea = TextClipboard_('<textarea class="absol-text-clipboard" wrap="off" autocorrect="off"' +
        ' autocapitalize="off" spellcheck="false"></textarea>').addTo(res);
    return res;
};

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["a" /* default */].creator.textclipboard = TextClipboard;

/* harmony default export */ var js_TextClipboard = (TextClipboard);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/editabletext.css
var editabletext = __webpack_require__(55);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/EditableText.js



var EditableText_ = ACore["a" /* default */]._;
var EditableText_$ = ACore["a" /* default */].$;


function EditableText() {
    var res = EditableText_({
        class: 'absol-editabe-text',
        extendEvent: ['blur', 'focus', 'change', 'modify'], 
        child: [
            {
                class: 'absol-editabe-text-higne',
                child: '<input type="text">'
            },
            'span'
        ]
    });
    res.$span = EditableText_$('span', res);
    res.$text = document.createTextNode('');
    res.$span.addChild(res.$text);

    res.$higne = EditableText_$('.absol-editabe-text-higne', res);
    res.$input = EditableText_$('input', res);

    OOP["a" /* default */].drillProperty(res, res.$input, ['selectionStart', 'selectionEnd']);
    res.eventHanler = OOP["a" /* default */].bindFunctions(res, EditableText.eventHanler);
    res.sync = res.afterAttached();

    res.$input.on('keydown', res.eventHanler.inputKeyDown, true);
    res.$input.on('change', res.eventHanler.inputChange);
    res.$input.on('blur', res.eventHanler.inputBlur);
    return res;
};


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.eventHanler = {};

EditableText.eventHanler.inputKeyDown = function (event) {
    requestAnimationFrame(function () {
        this.text = this.$input.value;
        this._update();
        event.text = this.text;
        this.emit('modify', event);
    }.bind(this));
};


EditableText.eventHanler.inputChange = function (event) {
    this.editing = false;
    this.emit('change', event);
};

EditableText.eventHanler.inputBlur = function (event) {
    this.editing = false;
    this.emit('blur', event);
};

ACore["a" /* default */].creator.editabletext = EditableText;

/* harmony default export */ var js_EditableText = (EditableText);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/widthheightresizer.css
var widthheightresizer = __webpack_require__(57);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Draggable.js


function Draggable(element) {
    if (!element) element = ACore["a" /* default */]._('div');
    else ACore["a" /* default */].$(element);
    element.defineEvent(['predrag', 'drag', 'begindrag', 'enddrag']);
    var body = ACore["a" /* default */].$('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 */ var js_Draggable = (Draggable);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/WidthHeightSizer.js





var WidthHeightSizer_ = ACore["a" /* default */]._;
var WidthHeightSizer_$ = ACore["a" /* default */].$;

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["a" /* default */].bindFunctions(res, WidthHeightResizer.eventHandler);

    res.$anchorBotRight = WidthHeightSizer_$('.absol-width-height-resizer-anchor-bot-right', res);
    res.$anchorTopRight = WidthHeightSizer_$('.absol-width-height-resizer-anchor-top-right', res);

    res.$anchorBotLeft = WidthHeightSizer_$('.absol-width-height-resizer-anchor-bot-left', res);
    res.$anchorTopLeft = WidthHeightSizer_$('.absol-width-height-resizer-anchor-top-left', res);

    res.$content = WidthHeightSizer_$('.absol-width-height-resizer-content', res);

    js_Draggable(res.$anchorBotRight).on('drag', res.eventHandler.dragBotRight).on('predrag', res.eventHandler.preDrag);
    js_Draggable(res.$anchorTopRight).on('drag', res.eventHandler.dragTopRight).on('predrag', res.eventHandler.preDrag);
    js_Draggable(res.$anchorBotLeft).on('drag', res.eventHandler.dragBotLeft).on('predrag', res.eventHandler.preDrag);
    js_Draggable(res.$anchorTopLeft).on('drag', res.eventHandler.dragTopLeft).on('predrag', res.eventHandler.preDrag);
    return res;
}

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


WidthHeightResizer.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["a" /* default */].creator.widthheightresizer = WidthHeightResizer;

/* harmony default export */ var WidthHeightSizer = (WidthHeightResizer);
// CONCATENATED MODULE: ./node_modules/absol/src/Math/Vec2.js
function Vec2(x, y) {
    this.x = x;
    this.y = y;
}


Vec2.prototype.copy = function () {
    return new Vec2(this.x, this.y);
};

Vec2.prototype.toString = function () {
    return "(" + this.x + ", " + this.y + ")";
};

Vec2.prototype.abs = function () {
    return Math.sqrt(this.x * this.x + this.y * this.y);
};

Vec2.prototype.normalized = function () {
    var l = this.abs();
    if (l == 0) l = 1;
    return this.div(l);
};

Vec2.prototype.mult = function (h) {
    return new Vec2(this.x * h, this.y * h);
};

Vec2.prototype.div = function (h) {
    return new Vec2(this.x / h, this.y / h);
};


Vec2.prototype.dist = function (v) {
    var dx = v.x - this.x;
    var dy = v.y - this.y;
    return Math.sqrt(dx * dx + dy * dy);
};



Vec2.prototype.sub = function (v) {
    return new Vec2(this.x - v.x, this.y - v.y);
};
Vec2.prototype.add = function (v) {
    return new Vec2(this.x + v.x, this.y + v.y);
};

Vec2.prototype.inv = function () {
    return new Vec2(-this.x, -this.y);
};

Vec2.prototype.linear = function (v, h) {
    return new Vec2(this.x * (1 - h) + v.x * h, this.y * (1 - h) + v.y * h);
};

Vec2.prototype.dot = function (v1) {
    return this.x * v1.x + this.y * v1.y;
};

Vec2.prototype.direction = function () {
    return Math.atan2(this.y, this.x);
};


Vec2.fromDirection = function (angle) {
    return new Vec2(Math.cos(angle), Math.sin(angle));
};

Vec2.make = function (x, y) {
    if (x instanceof Array) {
        return new Vec2(x[0], x[1]);
    }
    else if (x instanceof Vec2) {
        return x.copy();
    } else
        return new Vec2(x, y);
};

/* harmony default export */ var Math_Vec2 = (Vec2);
// CONCATENATED MODULE: ./node_modules/absol/src/Math/Rectangle.js


/**
 * 
 * @param {Number} x 
 * @param {Number} y 
 * @param {Number} width 
 * @param {Number} height 
 */
function Rectangle(x, y, width, height) {
    this.width = width;
    this.height = height;
    this.x = x;
    this.y = y;


}

Rectangle.prototype.A = function () {
    return new Math_Vec2(this.x, this.y);
};

Rectangle.prototype.B = function () {
    return new Math_Vec2(this.x + this.width, this.y);
};

Rectangle.prototype.C = function () {
    return new Math_Vec2(this.x + this.width, this.y + this.height);
};

Rectangle.prototype.D = function () {
    return new Math_Vec2(this.x, this.y + this.height);
};


Rectangle.prototype.square = function () {
    return this.width * this.height;
};


Rectangle.prototype.nearestPoint = function (arg0, arg1) {
    if (arg1) arg0 = Math_Vec2.make(arg0, arg1);
    var res = this.A();
    var mind = res.dist(arg0);
    var d = this.B().dist(arg0);
    if (d < mind) {
        mind = d;
        res = this.B();
    }
    d = this.C().dist(arg0);
    if (d < mind) {
        mind = d;
        res = this.C();
    }
    d = this.D().dist(arg0);
    if (d < mind) {
        mind = d;
        res = this.D();
    }
    return res;
};

Rectangle.prototype.centerPoint = function () {
    return new Math_Vec2(this.x + this.width / 2, this.y + this.height / 2);
};

Rectangle.prototype.isCollapse = function (r, margin) {
    if (!margin) margin = 0;
    if (this.x > r.x + r.width + margin) return false;
    if (this.y > r.y + r.height + margin) return false;

    if (r.x > this.x + this.width + margin) return false;
    if (r.y > this.y + this.height + margin) return false;
    return true;
};

Rectangle.prototype.collapsedSquare = function (r) {
    var margin = 0;
    var maxX, minX, maxY, minY;
    if (this.x > r.x + r.width + margin) return 0;
    if (this.y > r.y + r.height + margin) return 0;

    if (r.x > this.x + this.width + margin) return 0;
    if (r.y > this.y + this.height + margin) return 0;
    minX = this.x > r.x ? this.x : r.x;
    minY = this.y > r.y ? this.y : r.y;
    maxX = this.x + this.width < r.x + r.width ? this.x + this.width : r.x + r.width;
    maxY = this.y + this.height < r.y + r.height ? this.y + this.height : r.y + r.height;

    return (maxX - minX) * (maxY - minY);
};

Rectangle.prototype.collapsedRect = function (r) {
    var margin = 0;
    var maxX, minX, maxY, minY;
    if (this.x > r.x + r.width + margin) return null;
    if (this.y > r.y + r.height + margin) return null;

    if (r.x > this.x + this.width + margin) return null;
    if (r.y > this.y + this.height + margin) return null;
    minX = this.x > r.x ? this.x : r.x;
    minY = this.y > r.y ? this.y : r.y;
    maxX = this.x + this.width < r.x + r.width ? this.x + this.width : r.x + r.width;
    maxY = this.y + this.height < r.y + r.height ? this.y + this.height : r.y + r.height;

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

/**
 * @param {Rectangle} other
 * @returns {Rectangle}
 */
Rectangle.prototype.merge = function (other) {
    var left = Math.min(this.x, other.x);
    var top = Math.min(this.y, other.y);
    var right = Math.max(this.x + this.width, other.x + other.width);
    var bottom = Math.max(this.y + this.height, other.y + other.height);
    return new Rectangle(left, top, right - left, bottom - top);
};


/**
 * @returns {Rectangle}
 */
Rectangle.prototype.clone = function () {
    return new Rectangle(this.x, this.y, this.width, this.height);
};

/**
 * @param {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} clientRect
 * @returns {Rectangle}
 */
Rectangle.fromClientRect = function (clientRect) {
    return new Rectangle(clientRect.left, clientRect.top, clientRect.width, clientRect.height);
};

/* harmony default export */ var Math_Rectangle = (Rectangle);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Follower.js






var Follower_ = ACore["a" /* default */]._;
var Follower_$ = ACore["a" /* default */].$;


function Follower() {
    var res = Follower_({
        class: 'absol-follower',
        child: ['.absol-follower-content-container', 'attachhook'],
    });
    res.$attachHook = Follower_$('attachhook', res)
        .on('error', function () {
            res.updatePosition();
            this.updateSize = this.updateSize || res.updatePosition.bind(this);
            
            Dom["a" /* default */].addToResizeSystem(res);
        });
    res.$contentCtn = Follower_$('.absol-follower-content-container', res);

    res.$followTarget = undefined;
    res.$scrollTrackElts = [];
    res._scrollTrackEventHandler = undefined;
    res._anchor = Follower.ANCHOR_PRIORITY;

    return res;
}

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


/**
 * 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;
    var contentCtnBound = this.$contentCtn.getBoundingClientRect();
    var targetBound = this.$followTarget.getBoundingClientRect();
    var outRect = Math_Rectangle.fromClientRect(Dom["a" /* default */].traceOutBoundingClientRect(this));
    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] * contentCtnBound.width;
        y = targetBound.top + factor[2] * targetBound.height + factor[3] * contentCtnBound.height;
        newContentRect = new Math_Rectangle(x, y, contentCtnBound.width, contentCtnBound.height);
        score = newContentRect.collapsedSquare(outRect);
        if (score - 10 > bestScore) {
            bestAnchor = anchors[i];
            bestScore = score;
            bestX = x;
            bestY = y;
        }
    }

    this._lastAnchor = bestAnchor;
    bestX -= bound.left;
    bestY -= bound.top;
    this.$contentCtn.addStyle({
        left: bestX + 'px',
        top: bestY + 'px'
    });
};



Follower.prototype.refollow = function () {
    if (!this.$followTarget) return;
    this.addClass('following');

    if (this._scrollTrackEventHandler) this.unfollow();
    this._scrollTrackEventHandler = this.updatePosition.bind(this);
    this.$scrollTrackElts = [];

    var trackElt = this.$followTarget;
    while (trackElt) {
        if (trackElt.addEventListener)
            trackElt.addEventListener('scroll', this._scrollTrackEventHandler, false);
        else
            trackElt.attachEvent('onscroll', this._scrollTrackEventHandler, false);

        this.$scrollTrackElts.push(trackElt);
        trackElt = trackElt.parentElement;
    }
    if (document.addEventListener) {
        document.addEventListener('scroll', this._scrollTrackEventHandler, false);
    }
    else {
        document.attachEvent('onscroll', this._scrollTrackEventHandler, false);
    }
    this.$scrollTrackElts.push(document);
};

Follower.prototype.unfollow = function () {
    if (!this._scrollTrackEventHandler) return;// nothing to do
    this.removeClass('following');
    var trackElt;

    for (var i = 0; i < this.$scrollTrackElts.length; ++i) {
        trackElt = this.$scrollTrackElts[i];
        if (trackElt.removeEventListener)
            trackElt.removeEventListener('scroll', this._scrollTrackEventHandler, false);
        else
            trackElt.dettachEvent('onscroll', this._scrollTrackEventHandler, false);
    }
    this.$scrollTrackElts = [];
    this._scrollTrackEventHandler = undefined;
};


Follower.property = {};

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

        if (Dom["a" /* default */].isDomNode(elt)) {
            this.$followTarget = elt;
            this._lastAncho = undefined;
            this.refollow();
            this.updatePosition();
        }
        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["a" /* default */].install('follower', Follower);

/* harmony default export */ var js_Follower = (Follower);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/follower.css
var follower = __webpack_require__(59);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tooltip.css
var tooltip = __webpack_require__(61);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/Tooltip.js




var Tooltip_ = ACore["a" /* default */]._;
var Tooltip_$ = ACore["a" /* default */].$;

function ToolTip() {
    var res = Tooltip_({
        class: 'absol-tooltip',
        child: [
            { class: 'absol-tooltip-content', child: '<span>No</span>' },

            '.absol-tooltip-arrow'
        ]
    });

    res.$content = Tooltip_$('.absol-tooltip-content', res);
    res.$arrow = Tooltip_$('.absol-tooltip-arrow', res);
    return res;
}

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

ACore["a" /* default */].install('tooltip', ToolTip);


ToolTip.$root = Tooltip_('.absol-tooltip-root').addStyle('visibility', 'hidden');
ToolTip.$holder = Tooltip_('.absol-tooltip-root-holder').addTo(ToolTip.$root);
ToolTip.$tooltip = Tooltip_('tooltip.top').addTo(ToolTip.$holder);
ToolTip.$element = undefined;
ToolTip.$content = undefined;
ToolTip._orientation = 'top';
ToolTip._session = Math.random() * 10000000000 >> 0;

ToolTip.updatePosition = function () {
    var element = ToolTip.$element;
    if (!element) return;
    var orientation = ToolTip._orientation;

    var tBound = ToolTip.$tooltip.getBoundingClientRect();

    var rBound = ToolTip.$root.getBoundingClientRect();
    var ebound = element.getBoundingRecursiveRect();

    var dx, dy;

    if (orientation == 'top') {
        dy = ebound.top - rBound.top - tBound.height;
        dx = ebound.left + ebound.width / 2 - rBound.left - tBound.width / 2;
    }
    else if (orientation == 'left') {
        dy = ebound.top + ebound.height / 2 - rBound.top - tBound.height / 2;
        dx = ebound.left - rBound.left - tBound.width;
    }
    else if (orientation == 'right') {
        dy = ebound.top + ebound.height / 2 - rBound.top - tBound.height / 2;
        dx = ebound.right - rBound.left;
    }
    else if (orientation == 'bottom') {
        dy = ebound.bottom - rBound.top;
        dx = ebound.left + ebound.width / 2 - rBound.left - tBound.width / 2;

    }
    else {
        throw new Error("Invalid orientation, orientation:['left', 'right', 'top', 'bottom', 'auto'] ");
    }

    ToolTip.$holder.addStyle({
        top: dy + 'px',
        left: dx + 'px'
    });
};

ToolTip.$tooltip.$arrow.updateSize = ToolTip.updatePosition.bind(ToolTip);


ToolTip.show = function (element, content, orientation) {

    if (typeof content == 'string') {
        content = Tooltip_({
            tag: 'span',
            style: {
                'white-space': 'nowrap'
            },
            props: {
                innerHTML: content
            }
        });
    }

   
    Tooltip_$('', content, function (elt) {
        if (elt.tagName == "IMG" && elt.src) {
            Dom["a" /* default */].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.$root.addTo(document.body);
    Dom["a" /* default */].addToResizeSystem(ToolTip.$tooltip.$arrow);

    ToolTip.$element = element;
    ToolTip._session = currentSession;
    ToolTip.$content = content;
    ToolTip._orientation = orientation;

    ToolTip.$tooltip.clearChild().addChild(content);
    ToolTip.$root.removeStyle('visibility');
    ToolTip.$tooltip.removeClass('top').removeClass('left').removeClass('right').removeClass('bottom');
    ToolTip.$tooltip.addClass(orientation);
    ToolTip.updatePosition();
    return currentSession;
};

ToolTip.closeTooltip = function (session) {
    if (session === true || session === this._session) {
        ToolTip.$root.addStyle('visibility', 'hidden');
        ToolTip.$tooltip.clearChild();
        ToolTip.$holder.addStyle({
            top: false,
            left: false
        });
    }
}


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 (!EventEmitter["a" /* default */].hitElement(content, event)) {
                Tooltip_$(document.body).off('click', finish);
                ToolTip.closeTooltip(mSession);
                mSession = undefined;
            }
        };

        setTimeout(function () {
            Tooltip_$(document.body).on('click', finish);
        }, 100)
    });
};


/* harmony default export */ var Tooltip = (ToolTip);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tabview.css
var tabview = __webpack_require__(63);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabBar.js



var TabBar_ = ACore["a" /* default */]._;
var TabBar_$ = ACore["a" /* default */].$;


function TabBar() {
    var res = TabBar_('hscroller.absol-tabbar');
    res.defineEvent(['active', 'close']);
    res._tabs = [];
    return res;
};



TabBar.prototype.getAllTabButtons = function () {
    var buttons = [];
    TabBar_$('tabbutton', this, function (e) {
        buttons.push(e);
    });
    return buttons;
};


TabBar.eventHander = {};



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


    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();
                }
            }
        }
    }).addTo(this);
    if (value.id) tabButton.attr('id', 'tabbuton-' + value.id);
    this._tabs.push(tabButton);
    return tabButton;
};


TabBar.prototype.removeTab = function (id) {
    this._tabs = this._tabs.filter(function (value) {
        return value == id;
    });
    TabBar_$('#tabbuton-' + id, this).remove();
};


TabBar.prototype.activeTab = function (id) {
    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;
    }
};


ACore["a" /* default */].creator.tabbar = TabBar;

/* harmony default export */ var js_TabBar = (TabBar);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabButton.js



var TabButton_ = ACore["a" /* default */]._;
var TabButton_$ = ACore["a" /* default */].$;


function TabButton() {
    var res = TabButton_({
        tag: 'button',
        class: 'absol-tabbar-button',
        extendEvent: ['close', 'active'],
        id: randomIdent(20),
        child: [{
            class: 'absol-tabbar-button-text',
        },
        {
            tag:'span', 
            class: ['absol-tabbar-button-close', 'mdi', 'mdi-close'],
            attr: { title: 'Close' },
            on: {
                click: function (event) {
                    event.tabButtonEventName = 'delete';
                    res.emit('close', event);
                }
            }
        }],
        on: {
            click: function (event) {
                if (event.tabButtonEventName) return;
                event.tabButtonEventName = 'active';
                res.emit('active', event);
            }
        }
    });

    res.$textView = TabButton_$('.absol-tabbar-button-text', res);
    return res;
};


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

ACore["a" /* default */].creator.tabbutton = TabButton;
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabFrame.js


function TabFrame() {
    return ACore["a" /* default */]._({
        class: 'absol-tab-frame',
        extendEvent: ['attached', 'detached']
    });
}


TabFrame.prototype.preInit = function () {
    this.$parent = null;
};

TabFrame.prototype.notifyAttached = function (parentElt) {
    this.$parent = parentElt;
    this.emit('attached', { target: this, parent: parentElt }, this);
};

TabFrame.prototype.notifyDetach = function () {
    this.emit('attached', { target: this, parent: this.$parent }, this);
    this.$parent = undefined;
};

TabFrame.prototype.selfRemove = function () {
    if (this.$parent)
        this.$parent.removeChild(this);
};

TabFrame.prototype.getParent = function () {
    return this.$parent;
};



TabFrame.prototype.init = function () {
    this.super.apply(this, arguments);
};


TabFrame.property = {};

TabFrame.property.name = {
    set: function (value) {
        
        if (typeof name == "undefined") {
            this._name = undefined;
        }
        else {
            this._name = value + '';
        }
        //todo: change name from parent
        if (this.$parent) {
            this.$parent.notifyUpdateName(this);
        }
    },
    get: function () {
        return this._name;
    }
}

TabFrame.property.desc = {
    set: function (value) {
        if (typeof value == "undefined") {
            this._desc = undefined;
        }
        else {
            this._desc = value + '';
        }
        //todo: change name from parent
        if (this.$parent) {
            this.$parent.notifyUpdateDesc(this);
        }

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

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



ACore["a" /* default */].install('tabframe', TabFrame);
/* harmony default export */ var js_TabFrame = (TabFrame);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TabView.js


var TabView_ = ACore["a" /* default */]._;
var TabView_$ = ACore["a" /* default */].$;


function TabView() {
    var res = TabView_({
        class: 'absol-tabview',
        extendEvent: ['activetab', 'removetab'],
        child: [
            'tabbar',

        ]
    });
    res.$tabbar = TabView_$('tabbar', res);
    res.$tabbar.on({
        close: TabView.eventHandler.closeTab.bind(res),
        active: TabView.eventHandler.activeTab.bind(res)
    });
    res._frameHolders = [];
    res._history = [];
    return res;
};

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;
    this._frameHolders.forEach(function (holder) {
        if (holder.id == id) {
            self._history.push(id);
            holder.containterElt.removeClass('absol-tabview-container-hidden');
            var eventData = {
                id: id,
                userActive: !!userActive,
                target: self,
                tabFrame: holder.tabFrame,
                tabButton: holder.tabButton,
                holder: holder,
                __promise__: Promise.resolve(),
                waitFor: function (promise) {
                    this.__promise__ = promise;
                }
            };
            self.emit('activetab', eventData, self);
            eventData.__promise__.then(function () {
                //if ok
                self.$tabbar.activeTab(holder.id);
            }, function () {
                //if reject
            });
        }
        else {
            holder.containterElt.addClass('absol-tabview-container-hidden');
        }
    });
};

TabView.prototype.removeTab = function (id, userActive) {
    var self = this;
    this._frameHolders.forEach(function (holder) {
        if (holder.id == id) {
            var eventData = {
                id: id,
                userActive: !!userActive,
                target: self,
                tabFrame: holder.tabFrame,
                tabButton: holder.tabButton,
                holder: holder,
                __promise__: Promise.resolve(),
                waitFor: function (promise) {
                    this.__promise__ = promise;
                }
            };
            self.emit('removetab', eventData, self);
            eventData.__promise__.then(function () {
                //if ok
                this._frameHolders = this._frameHolders.filter(function (x) { return x.id != holder.id; })
                holder.tabFrame.notifyDetach();
                self.$tabbar.removeTab(holder.id);
                holder.containterElt.remove();
            }, function () {
                //if reject
            });

        }
        else {
            holder.containterElt.addClass('absol-tabview-container-hidden');
        }
    });
};



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.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.notifyDetach) {
            throw new Error('element is not a tabframe');
        }
        var containterElt = TabView_('.absol-tabview-container');
        self.appendChild(containterElt);//origin function
        elt.selfRemove();
        var id = elt.attr('id') || randomIdent(16);
        var desc = elt.attr('desc') || undefined;
        var name = elt.attr('name') || 'NoName';

        var tabButton = self.$tabbar.addTab({ name: name, id: id, desc: desc });
        containterElt.addChild(elt);
        elt.notifyAttached(self);
        self._frameHolders.push({
            name: name,
            id: id,
            desc: desc,
            tabButton: tabButton,
            tabFrame: elt,
            containterElt: containterElt
        });
        self.activeTab(id);
    });
};

TabView.prototype.activeLastTab = function () {
    // var dict = this._frameHolders.reduce(function (ac, holder) {
    //     ac[holder.id] = true;
    //     return ac;
    // }, {});
    //todo
};

TabView.prototype.getChildAt = function () {
    //todo
};

TabView.prototype.getAll = function () {
    //todo
};


ACore["a" /* default */].install('tabview', TabView);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/pageselector.css
var pageselector = __webpack_require__(65);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/PageSelector.js



var PageSelector_ = ACore["a" /* default */]._;
var PageSelector_$ = ACore["a" /* default */].$;

function PageSelector() {
    var res = PageSelector_({
        class: ['absol-page-selector'],
        extendEvent: ['change'],
        child:
            [
                {
                    class: 'page-number-input',
                    child: [{
                        tag: 'label',
                        child: { text: "Page" }
                    },
                    {
                        tag:'input',
                        attr:{
                            type:'text'
                        }
                    }]
                },

                {
                    tag: 'ul',
                    class: 'page-number-buttons',
                    child: [
                        ` <li class="page-first">
                        <a href="#" aria-controls="dtBasicExample" data-dt-idx="0" tabindex="0" class="page-link">First</a>
                    </li>`,
                        ` <li class="page-previous">
                        <a href="#" aria-controls="dtBasicExample" data-dt-idx="0" tabindex="0" class="page-link">Previous</a>
                    </li>`,

                        `<li class="page-next" >
                        <a href="#" aria-controls="dtBasicExample" data-dt-idx="7" tabindex="0" class="page-link">Next</a>
                    </li>`,
                        ` <li class="page-last">
                        <a href="#" aria-controls="dtBasicExample" data-dt-idx="0" tabindex="0" class="page-link">Last</a>
                    </li>`,
                    ]
                }
            ]
    });



    res.$pageInput = PageSelector_$('.page-number-input input', res);
    res.$pageInput.on('keyup', PageSelector.eventHandler.pressEnterKey.bind(res));
    res.$prevBtn = PageSelector_$('li.page-previous', res);
    res.$nextBtn = PageSelector_$('li.page-next', res);
    res.$firstBtn = PageSelector_$('li.page-first', res);
    res.$lastBtn = PageSelector_$('li.page-last', res);
    res.$nextBtn.on('click', PageSelector.eventHandler.clickNext.bind(res));
    res.$prevBtn.on('click', PageSelector.eventHandler.clickPrev.bind(res));
    res.$firstBtn.on('click', PageSelector.eventHandler.clickFirst.bind(res));
    res.$lastBtn.on('click', PageSelector.eventHandler.clickLast.bind(res));
    res.$buttonContainer = PageSelector_$('.page-number-buttons', res);
    res._buttons = [];
    res._pageOffset = 1;
    res._selectedIndex = 1;
    res._pageCount = 1;
    res._pageRange = 1;
    res.$pageInput.value = res._selectedIndex;

    return res;
};


PageSelector.eventHandler = {};

PageSelector.eventHandler.pressEnterKey = function(event){
    if (event.keyCode != 13) return;
    var index = parseInt(this.$pageInput.value.trim(), 10);
    if ((index < 1) || (index > this._pageCount)) {
        this.$pageInput.value = this._selectedIndex;
        return;
    }
    this.selectPage(index, true);
}

PageSelector.eventHandler.clickLast = function (event) {
    this.selectPage(this._pageCount, true);
};

PageSelector.eventHandler.clickFirst = function (event) {
    this.selectPage(1, true);
};

PageSelector.eventHandler.clickNext = function (event) {
    if (this._selectedIndex == this._pageCount) return;
    this.selectPage(this._selectedIndex + 1, true);
};

PageSelector.eventHandler.clickPrev = function (event) {
    if (this._selectedIndex == 1) return;
    this.selectPage(this._selectedIndex - 1, true);
}


PageSelector.eventHandler.clickIndex = function (index, event) {
    this.selectPage(index + this._pageOffset, true);
};

PageSelector.prototype._createButton = function (index) {
    var button = PageSelector_({
        tag: 'li',
        class: 'page-number',
        child: {
            tag: 'a',
            attr: { href: '#', 'data-index': index },
            child: { text: '' + index }
        },
        on: {
            click: PageSelector.eventHandler.clickIndex.bind(this, index)
        }
    });
    this.$buttonContainer.addChildBefore(button, this.$nextBtn);
    return button;
};

PageSelector.prototype.setPageRange = function (pageCount) {
    this._pageRange = pageCount;
    if (this._buttons.length > 0) throw new Error("Not implement change pageCount");
    while (this._buttons.length < pageCount) {
        this._buttons.push(this._createButton(this._buttons.length));
    }
};

PageSelector.prototype.setStartPage = function (index) {
    this._buttons.forEach(function (e, i) {
        e.childNodes[0].innerHTML = i + index + '';
    });
    this._pageOffset = index;
};

PageSelector.prototype.selectPage = function (index, userActive) {
    if (index == this._selectedIndex) this.setStartPage(index - parseInt(this._pageRange / 2));
    if (index > this._selectedIndex){
        if (index == (this._pageOffset + this._pageRange - 1)) this.setStartPage(index - parseInt(this._pageRange / 2));
    }
    if (index < this._selectedIndex){
        if (index == this._pageOffset) this.setStartPage(index - parseInt(this._pageRange / 2));
    }

    if (index > (this._pageCount - parseInt(this._pageRange / 2))) this.setStartPage(this._pageCount - this._pageRange + 1);
    if (index <= (parseInt(this._pageRange / 2))) this.setStartPage(1);

    var pageOffset = this._pageOffset;
    this._buttons.forEach(function (e, i) {
        if (i + pageOffset == index) {
            e.addClass('active');
        }
        else {
            e.removeClass('active');
        }
    });
    if (this._selectedIndex != index) {
        this._selectedIndex = index;
        this.$pageInput.value = index;
        this.emit('change', { target: this, selectedIndex: index, userActive: !!userActive }, this);
    }
};

PageSelector.prototype.getSelectedPage = function () {
    return this._selectedIndex;
}

PageSelector.prototype.setPageCount = function (count) {
    this._pageCount = count;
};

PageSelector.property = {};

PageSelector.prototype.init = function (props) {
    props = props || {};
    props.pageOffset = props.pageOffset || 1;
    props.pageRange = props.pageRange || 5;
    props.pageCount = props.pageCount || 15;
    props.selectedIndex = typeof (props.selectedIndex) == "number" ? props.selectedIndex : props.pageOffset;
    if (props.pageCount < props.pageRange) props.pageRange = props.pageCount;
    this.setPageCount(props.pageCount);
    this.setPageRange(props.pageRange);
    this.setStartPage(props.pageOffset);
    this.selectPage(props.selectedIndex);
};


ACore["a" /* default */].install('pageselector', PageSelector);

/* harmony default export */ var js_PageSelector = (PageSelector);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/bscroller.css
var bscroller = __webpack_require__(67);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/searchlist.css
var searchlist = __webpack_require__(69);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/adapter/SearchListAdapter.js
function SearchListAdapter() {
    this.searchList = null;
}

SearchListAdapter.prototype.onAttach = function (searchList) {
    this.searchList = searchList;
};

SearchListAdapter.prototype.getItemText = function (item, index) {
    return item.text;
};
SearchListAdapter.prototype.getItemValue = function (item, index) {
    return item.value;
};
SearchListAdapter.prototype.getItemIcon = function (item, index) {
    return item.icon;
};


SearchListAdapter.prototype.getItemView = function (item, index, _, $, query, reuseItem, refParent) {
    var list = [];
    var isFirst = false;
    var marginLeft = "";
    for (var i in item) {
        marginLeft = ""
        if (isFirst)
            marginLeft = "10px"
        isFirst = true;
        if (i === "icon") {
            list.push({
                tag: 'i',
                class: 'material-icons',
                style: {
                    verticalAlign: "middle",
                    marginLeft: marginLeft,
                },
                props: {
                    innerHTML: this.getItemIcon(item)
                }
            })
        }
        else
            if (i === "text") {
                list.push({
                    tag: 'span',
                    style: {
                        verticalAlign: "middle",
                        marginLeft: marginLeft,
                    },
                    props: {
                        innerHTML: this.getItemText(item)
                    }
                });
            }
            else
                if (i === "value") {

                }
    }
    if (reuseItem) {
        return reuseItem.clearChild().addChild(
            _({
                tag: 'div',
                child: list
            })
        );
    }
    else {
        return _({
            tag: 'div',
            child: list
        })
    }
};

SearchListAdapter.prototype.queryItems = function (self, query, mInput) {
    var query = query.toLowerCase();
    return self.items.map(function (item) {
        var start = item.text.toLowerCase().indexOf(query);
        if (start >= 0) {
            var hightlightedText = item.text.substr(0, start) + '<strong style="color:red">' + item.text.substr(start, query.length) + '</strong>' + item.text.substr(start + query.length);
            return {
                item: item,
                hightlightedText: hightlightedText
            }
        }
        else return null;
    }).filter(function (it) { return it !== null; })
};


/* harmony default export */ var adapter_SearchListAdapter = (SearchListAdapter);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/SearchList.js





var SearchList_ = ACore["a" /* default */]._;
var SearchList_$ = ACore["a" /* default */].$;

function SearchList() {
    var res = SearchList_({
        class: 'absol-search-list',
        style: {
            // height:'300px',
        },
        child: [
            {
                class: 'absol-search-list-search-input-container',
                child: 'input[type="text"]'
            },
            {
                tag: 'bscroller',
                class: 'absol-search-list-contents',
            }
        ]
    });
    res._pool = [];
    res.eventHandler = OOP["a" /* default */].bindFunctions(res, SearchList.eventHandler);
    res.$dropdown = SearchList_$('.absol-search-list-contents', res).on('click', res.eventHandler.clickContent);
    res.$dropdown.addStyle('display', 'none');
    res.$vscroller = SearchList_$('bscroller', res).on('click', res.eventHandler.vscrollerClick);
    res.$input = SearchList_$('.absol-search-list-search-input-container input[type="text"]', res)
        .on('keydown', res.eventHandler.keydown)
        .on('keyup', res.eventHandler.keyup);
    res._cache = {};
    res.$poolItems = [];
    res._currentData = [];
    res._sessionIndex = 0;
    res._updatedSession = -1;
    return res;
}


SearchList.eventHandler = {};

SearchList.eventHandler.clickContent = function (event) {
    var item = this._findItem(event.target);
    if (item) {
        this._value = this.adapter.getItemValue(item.__data__.item);
        this.$input.value = item.__data__.item.text;
        this.updateSelectedItem();
        this.$dropdown.addStyle('display', 'none');
    }
    else {

    }
};

SearchList.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);
    }

};

SearchList.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);
    }

};

SearchList.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];
        }
    }
}

SearchList.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;
};

SearchList.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;
    }
    var result;
    if (this.disableCache) {
        var onReciveData = function (data) {
            cacheHolder.data = data;
            this.pushData(data, currentSession, query);//sessionIndex may be change
        }.bind(this);
        result = this.adapter.queryItems(this, 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);
            result = this.adapter.queryItems(this, query);
            if (typeof result.then == 'function')
                result.then(onReciveData);
            else onReciveData(result)

            this._cache[query] = cacheHolder;
        }
    }
};

SearchList.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["a" /* default */].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.adapter.getItemView(item.item, i, SearchList_, SearchList_$, query, reuseItem, this);
                    newView.addClass('absol-search-list-item');
                    newView.__data__ = item;
                    newView.__index__ = 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());
    }
};

SearchList.adapter = {
    DEFAULT: adapter_SearchListAdapter
}

SearchList.property = {};
SearchList.property.adapter = {
    set: function (value) {
        if (typeof value == 'string' || typeof value == 'number') {
            if (value in SearchList.adapter) {
                this._adapter = new SearchList.adapter[value]();
            }
            else {
                throw new Error("Unknown build-in adapter name")
            }
        }
        else
            if (typeof value == 'object') {
                if (value instanceof Array) {
                    if (value[0] == 'SearchStringArray') {
                        this._adapter = new SearchStringArrayAdapter(value[1], value[2]);
                    }
                    else if (value[0] == 'SearchObjectArray') {
                        this._adapter = new SearchObjectArrayAdapter(value[1], value[2]);
                    }
                    else {
                        throw new Error("Unknown adapter type name");
                    }
                }
                else {
                    this._adapter = Object.assign(new adapter_SearchListAdapter(), value)
                }
                if (this.adapter && this.adapter.onAttached) {
                    this.adapter.onAttached(this);
                }
            }
            else {
                if (value) {
                    if ((value.queryItems && value.getItemView && value.getItemText) || (value.extend && (value.extend in SearchList.adapter))) {
                        if (value.extend && (value.extend in SearchList.adapter)) {
                            this.adapter = Object.assign(new SearchList.adapter[value.extend](), value)
                        }
                        else {
                            this._adapter = value;
                        }
                    }
                    else {
                        throw new Error("Invalid adapter");
                    }
                }
                else {
                    this._adapter = new SearchList.adapter.DEFAULT();
                }
            }
    },
    get: function () {
        return this._adapter;
    }
};

SearchList.property.items = {
    set: function (value) {
        this._items = value;
        if (this._verifyParams()) {
            this.updateItems();
        }
    },
    get: function () {
        return this._items;
    }
};

SearchList.prototype._findItem = function (elt) {
    while (elt) {
        if (elt.containsClass && elt.containsClass('absol-search-list-item')) {
            return elt;
        }
        else {
            elt = elt.parentNode;
        }
        if (elt == this) return;
    }
    return undefined;
};

SearchList.prototype.updateItems = function () {
    this.removeAllToPool();
    var self = this;
    var reusedItem;
    var query = '';
    this.itemEltsDict = {};
    this.itemEltArr = [];
    this.items.forEach(function (item, index) {
        if (!reusedItem) reusedItem = self.getOneFromPool();
        var itemView = self.adapter.getItemView(item, index, SearchList_, SearchList_$, query, reusedItem, self.$dropdown);
        var valueKey = JSON.stringify(self.adapter.getItemValue(item))
        self.itemEltsDict[valueKey] = itemView;
        self.itemEltArr.push(itemView);
        SearchList_$(itemView).addClass('absol-search-list-item');
        itemView.__data__ = item;// item wil hold  the data of itself
        itemView.__index__ = index;// item wil hold  the data of itself

        self.$dropdown.addChild(itemView);
        if (itemView == reusedItem) reusedItem = undefined;
    });
};

SearchList.prototype.updateSelectedItem = function () {
    var key = JSON.stringify(this._value);
    if (this.activeItemElt) {
        this.activeItemElt.removeClass('active');
    }

    this.activeItemElt = this.itemEltsDict[key];

    if (this.activeItemElt) {
        this.activeItemElt.addClass('active');
    }
};

SearchList.prototype.getPrevItem = function () {
    var index = this.activeItemElt ? this.__index__ : 0;
};


SearchList.prototype.removeAllToPool = function () {
    while (this.$dropdown.childNodes.length > 0) {
        this._pool.push(this.$dropdown.childNodes[0]);
        this.$dropdown.childNodes[0].remove();
    }
};

SearchList.prototype.getOneFromPool = function () {
    if (this._pool.length > 0) {
        return this._pool.pop();
    }
    else return undefined;
};


SearchList.prototype.clearPool = function () {
    this._pool = [];
};

SearchList.prototype._verifyParams = function () {
    if (this.items && this.adapter) return true;
    return false;
};

SearchList.prototype.init = function (props) {
    this.ready = false;
    var myProps = Object.assign({}, props || {});
    if ('adapter' in myProps) {
        //todo: 
        this.adapter = myProps.adapter;
        delete myProps.adapter;
    }
    else {
        this.adapter = 'DEFAULT';
    }

    if ('items' in myProps) {
        this.items = myProps.items;
        delete myProps.items
    }
    else {

    }

    Object.assign(this, myProps);
    if (this.adapter) {
        this.ready = true;
        //this.adapter.onAttach(this);
    }
};

ACore["a" /* default */].install('SearchList'.toLowerCase(), SearchList);
/* harmony default export */ var js_SearchList = (SearchList);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/statictabbar.css
var statictabbar = __webpack_require__(71);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/StaticTabbar.js




var StaticTabbar_$ = ACore["a" /* default */].$;
var StaticTabbar_ = ACore["a" /* default */]._;


function StaticTabbar() {
    var res = StaticTabbar_({
        class: 'absol-static-tabbar',
        extendEvent: 'change',
        child: [
            {
                class: 'absol-static-tabbar-active-box',
                child: '.absol-static-tabbar-hline'
            },
        ]
    });

    res.$activeBox = StaticTabbar_$('.absol-static-tabbar-active-box', res)
    res.$hline = StaticTabbar_$('.absol-static-tabbar-hline', res);
    res.$buttons = [];
    res._btDict = {};
    res._activedButton = undefined;
    res.sync = new Promise(function (resolve) {
        StaticTabbar_('attachhook').on('error', function () {
            this.remove();
            resolve();
        })
    });
    return res;
}

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 || 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["a" /* default */].install('statictabbar', StaticTabbar);

/* harmony default export */ var js_StaticTabbar = (StaticTabbar);



// CONCATENATED MODULE: ./node_modules/absol/src/Network/XHR.js

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

        request.onerror = function () {
            rj(new Error("Network Error!"));
        };
    });
};


XHR.postRepquest = function (url, payload, props, headers, success, failure) {
    return new Promise(function (rs, rj) {
        var method = "POST";
        var shouldBeAsync = true;

        var request = new XMLHttpRequest();

        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 () {
            var error = new Error("Network Error!");
            if (failure) failure(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(payload);
    });
};



/* harmony default export */ var Network_XHR = (XHR);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/RemoteSvg.js



var RemoteSvg_ = ACore["a" /* default */]._;
var RemoteSvg_$ = ACore["a" /* default */].$;



function RemoteSvg() {
    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] = Network_XHR.getRequest(path, 'text').then(function (result) {
            RemoteSvg.__div_parser__.innerHTML = result;

            var svgElt = RemoteSvg_$('svg', RemoteSvg.__div_parser__);
            var res = {
                attr: {},
                props: {}
            };
            if (svgElt) {
                Array.prototype.forEach.call(svgElt.attributes, function (attribute) {
                    res.attr[attribute.name] = attribute.value;
                });
                res.props.innerHTML = svgElt.innerHTML;
            }
            return res;

        }, function () {
            return {};
        });
        return RemoteSvg.__cache__[path] ;
    }

};


ACore["a" /* default */].install('remotesvg', RemoteSvg);


/* harmony default export */ var js_RemoteSvg = (RemoteSvg);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/exptree.css
var exptree = __webpack_require__(73);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/utils.js
function insertTextAtCursor(text) {
    var sel, range;
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.deleteContents();
            range.insertNode(document.createTextNode(text));
        }
    } else if (document.selection && document.selection.createRange) {
        document.selection.createRange().text = text;
    }
}


function contenteditableTextOnly(element, processText) {
    if (element.__contenteditableTextOnly__) return;
    element.__contenteditableTextOnly__ = true;
    element.addEventListener("paste", function (e) {
        e.preventDefault();
        if (e.clipboardData && e.clipboardData.getData) {
            var text = e.clipboardData.getData("text/plain");
            if (processText) text = processText(text)
            document.execCommand("insertHTML", false, text);
        } else if (window.clipboardData && window.clipboardData.getData) {
            var text = window.clipboardData.getData("Text");
            if (processText) text = processText(text)
            insertTextAtCursor(text);
        }
    });
}

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ExpTree.js






var ExpTree_ = ACore["a" /* default */]._;
var ExpTree_$ = ACore["a" /* default */].$;



ACore["a" /* default */].install('toggler-ico', function () {
    var res = ExpTree_(
        '<svg class="toggler-ico" width="14" height="14" version="1.1" viewBox="0 0 3.7042 3.7042" xmlns="http://www.w3.org/2000/svg" >' +
        '    <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["a" /* default */].install('remove-ico', function () {
    return ExpTree_('<svg class="remove-ico" width="24" height="24" viewBox="0 0 24 24">\
                <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>');
});



function ExpNode() {
    var res = ExpTree_({
        tag: 'button',
        extendEvent: ['pressremove', 'press'],
        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'
        ]
    });

    res.$level = ExpTree_$('.absol-exp-node-level', res);
    res.$removeIcon = ExpTree_$('remove-ico', res)
        .on('click', function (event) {
            this.emit('pressremove', { target: res, type: 'pressremove' }, this);
        });

    res.on('click', function (event) {
        if (!EventEmitter["a" /* default */].hitElement(res.$removeIcon, event))
            res.emit('press', { target: res, type: 'press' }, this);
    })

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


ExpNode.property = {};

ExpNode.property.icon = {
    set: function (value) {
        if (this.$iconP) {
            this.$iconP.remove();
            this.$iconP = undefined;
        }
        if (value && value != null) {
            var newE;
            if (!Dom["a" /* default */].isDomNode(value)) {
                newE = ExpTree_(value);
            }

            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 * 4);
        }
    },
    get: function () {
        return this._level || 0;
    }
};




ExpNode.property.name = {
    set: function (value) {
        this._name = value + '';
        this.$name.clearChild();
        if (this.name && this.name.length > 0)
            this.$name.addChild(ExpTree_({ text: this._name }))
    },
    get: function () {
        return this._name || '';
    }
};
ExpNode.property.desc = {
    set: function (value) {
        this._desc = value + '';
        this.$desc.clearChild();
        this.$desc.addChild(ExpTree_({ 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('active');
        else
            this.removeClass('active');

    },
    get: function () {
        return this.containsClass('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);
        }

    }
    function blurEventHandle(event) {
        finish();
        var curentName = span.innerHTML.replace(/[\\\/\|\?\:\<\>\*\r\n]/, '').trim();
        if (curentName == lastName) {
            rejectCallback && rejectCallback();
        }
        else {
            if (curentName.length == 0) {
                span.innerHTML = lastName;
                rejectCallback && rejectCallback();
            }
            else {
                var res = resolveCallback && resolveCallback(curentName);
                if (res === false) {
                    span.innerHTML = lastName;
                }
                else if (res && res.then) {
                    res.then(function (result) {
                        if (result === false) {
                            span.innerHTML = lastName;
                            //faile
                        }
                        else {
                            //success
                        }
                    }, function () {
                        //reject value
                        span.innerHTML = lastName;

                    })
                } else {
                    //success
                }
            }
        }
    }

    function finish() {
        span.off('keydown', keydowEventHandle);
        span.off('blur', blurEventHandle);
        ExpTree_$(document.body).once('click', function () {
            setTimeout(function () {
                span.attr('contenteditable', undefined);
            }, 2);
        });

    }
    span.on('keydown', keydowEventHandle);
    span.on('blur', blurEventHandle);
}


function ExpTree() {
    var res = ExpTree_({
        class: 'absol-exp-tree',
        extendEvent: 'press',
        child: [
            'expnode',
            '.absol-exp-items'
        ]
    });
    res.$node = ExpTree_$('expnode', res)
        .on('press', function (event) {
            res.emit('press', { target: res, node: this, type: 'press' }, res)
        });
    // console.log(res.$node);

    res.$itemsContainer = ExpTree_$('.absol-exp-items', res);
    OOP["a" /* default */].drillProperty(res, res.$node, ['desc', 'name', 'title', 'extSrc', 'active', 'icon']);
    res.__isExpTree__ = true;
    res._level = 0;
    return res;
}

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


ExpTree.prototype.getParent = function () {
    var current = this.parentNode;
    while (current) {
        if (current.__isExpTree__)
            break;
        current = current.parentNode;
    }
    return current;
};


ExpTree.prototype.getNode = function () {
    return this.$node;
};

ExpTree.prototype.getChildren = function () {
    return Array.apply(null, this.$itemsContainer.childNodes);
};

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



ACore["a" /* default */].install('expnode', ExpNode);
ACore["a" /* default */].install('exptree', ExpTree);


// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tablevscroller.css
var tablevscroller = __webpack_require__(75);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableVScroller.js



var TableVScroller_ = ACore["a" /* default */]._;
var TableVScroller_$ = ACore["a" /* default */].$;

function TableVScroller() {
    var res = TableVScroller_(
        {
            class: 'absol-table-vscroller',
            child: [
                'bscroller.absol-table-vscroller-viewport',
                'table.absol-table-vscroller-head',
                '.absol-table-vscroller-head-line',
            ]
        }
    );
    res.$attachHook = TableVScroller_('attachhook').addTo(res);

    res.sync = new Promise(function (rs) {
        res.$attachHook.on('error', rs)
    });
    res.$viewport = TableVScroller_$('bscroller.absol-table-vscroller-viewport', res);

    res.$attachHook.on('error', function () {
        Dom["a" /* default */].addToResizeSystem(res.$attachHook);
    });
    res.$topTable = TableVScroller_$('.absol-table-vscroller-head', res);
    res.$headLine = TableVScroller_$('.absol-table-vscroller-head-line', res);
    return res;
}

TableVScroller.prototype.clearChild = function () {
    this.$viewport.clearChild();
    this.$topTable.clearChild();
};

TableVScroller.prototype.addChild = function (elt) {
    if (this.$viewport.childNodes.length == 0) {
        if (elt.tagName && elt.tagName.toLowerCase() == 'table') {
            this.$viewport.addChild(elt);
            this.$table = TableVScroller_$(elt);
            this.$thead = TableVScroller_$('thead', elt);
            this.$tr = TableVScroller_$('tr', this.$thead);
            this.$topThead = this.$thead.cloneNode(true);
            this.$topTr = TableVScroller_$('tr', this.$topThead);
            this.$topTable.addChild(this.$topThead).addStyle('display', 'none');
        }
        else {
            throw new Error('Element must be a table!');
        }
    }
    else {
        throw new Error("Only 1 table accepted!");
    }
};

TableVScroller.prototype._trackBackgroundColor = function (element) {
    var current = this.$thead;
    var res;
    while (current && !res && res != 'rgba(0, 0, 0, 0)') {
        res = window.getComputedStyle(element).getPropertyValue('background-color');
        current = current.parentNode;

    }
    if (res == 'rgba(0, 0, 0, 0)') return 'white';
    return res;
}

TableVScroller.prototype.updateStyle = function () {
    if (!this.$thead) return;
    var clazz = this.$table.attr('class');
    if (clazz) {
        clazz = clazz.trim().split(/\s+/);
        for (var i = 0; i < clazz.length; ++i) {
            this.$topTable.addClass(clazz[i]);
        }
    }
    var bgColor = this._trackBackgroundColor(this.$thead);
    this.$topTable.addStyle('background-color', bgColor);
};


TableVScroller.prototype.updateSize = function () {
    var theadBound = this.$thead.getBoundingClientRect();
    var tableBound = this.$table.getBoundingClientRect();
    this.$topTable.addStyle({
        width: tableBound.width + 'px',
        height: theadBound.height + 'px'
    });
    this.$headLine.addStyle({
        top: theadBound.height + 'px',
        maxWidth: tableBound.width + 'px'
    });
    
    if (this.$viewport.clientHeight < this.$viewport.scrollHeight ){
        this.addClass('scroll-v');
    }
    else{
        this.removeClass('scroll-v');
    }
    var realNodes = this.$tr.childNodes;
    var topNodes = this.$topTr.childNodes;

    for (var i = 0; i < realNodes.length; ++i) {
        if (!realNodes[i].tagName) continue;
        var wstyle = window.getComputedStyle(TableVScroller_$(realNodes[i])).getPropertyValue('width');
        TableVScroller_$(topNodes[i]).attr('style', realNodes[i].attr('style')).addStyle('width', wstyle);
    }
    this.$topTable.removeStyle('display');
}


TableVScroller.prototype.update = function () {
    if (!this.$thead) return;
    this.updateStyle();
    this.updateSize();

};

TableVScroller.prototype.init = function (props) {
    this.super(props);
    this.sync.then(this.update.bind(this));
    this.$attachHook.updateSize = this.update.bind(this);
};

ACore["a" /* default */].install('tablevscroller', TableVScroller);

/* harmony default export */ var js_TableVScroller = (TableVScroller);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/tablescroller.css
var tablescroller = __webpack_require__(77);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/TableScroller.js





var TableScroller_$ = ACore["a" /* default */].$;
var TableScroller_ = ACore["a" /* default */]._;

function TableScroller() {
    var res = TableScroller_({
        class: 'absol-table-scroller',
        child: [
            'bscroller.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'
        ]
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, TableScroller.eventHandler);

    res.$content = undefined;
    res.$fixedViewport = TableScroller_$('.absol-table-scroller-fixed-viewport', res);

    res.$leftScroller = TableScroller_$('.absol-table-scroller-left-vscroller', res);
    res.$leftViewport = TableScroller_$('.absol-table-scroller-left-vscroller-viewport', res)
        .on('scroll', res.eventHandler.scrollLeftScrollerViewport);;

    res.$headScroller = TableScroller_$('.absol-table-scroller-header-hscroller', res);
    res.$headScrollerViewport = TableScroller_$('.absol-table-scroller-header-hscroller-viewport', res)
        .on('scroll', res.eventHandler.scrollHeadScrollerViewport);

    res.$attachHook = TableScroller_('attachhook').addTo(res);
    res.$attachHook.on('error', function () {
        Dom["a" /* default */].addToResizeSystem(res.$attachHook);
        res.$attachHook.updateSize = res._updateContentSize.bind(res);

    });

    res.sync = new Promise(function (rs) {
        res.$attachHook.on('error', rs)
    });

    res.$viewport = TableScroller_$('bscroller.absol-table-scroller-viewport', res)
        .on('scroll', res.eventHandler.scrollViewport);

    res.$leftLine = TableScroller_$('.absol-table-scroller-left-line', res);
    res.$headLine = TableScroller_$('.absol-table-scroller-head-line', res);
    return res;
}

TableScroller.eventHandler = {};
TableScroller.eventHandler.scrollViewport = function (event) {
    if (!this.__scrollingElement__ || this.__scrollingElement__ == this.$viewport) {
        this.__scrollingElement__ = this.$viewport;
        this.$headScrollerViewport.scrollLeft = this.$viewport.scrollLeft;
        this.$leftViewport.scrollTop = this.$viewport.scrollTop;

        if (this.__scrollTimer__ > 0) {
            clearTimeout(this.__scrollTimer__);
        }
        this.__scrollTimer__ = setTimeout(function () {
            this.__scrollingElement__ = undefined;
            this.__scrollTimer__ = -1;
        }.bind(this), 300);
    }
};

TableScroller.eventHandler.scrollHeadScrollerViewport = function (event) {
    if (!this.__scrollingElement__ || this.__scrollingElement__ == this.$headScrollerViewport) {
        this.__scrollingElement__ = this.$headScrollerViewport;
        this.$viewport.scrollLeft = this.$headScrollerViewport.scrollLeft;
        if (this.__scrollTimer__ > 0) {
            clearTimeout(this.__scrollTimer__);
        }
        this.__scrollTimer__ = setTimeout(function () {
            this.__scrollingElement__ = undefined;
            this.__scrollTimer__ = -1;
        }.bind(this), 100);
    }
};


TableScroller.eventHandler.scrollLeftScrollerViewport = function () {
    if (!this.__scrollingElement__ || this.__scrollingElement__ == this.$leftViewport) {
        this.__scrollingElement__ = this.$leftViewport;
        this.$viewport.scrollTop = this.$leftViewport.scrollTop;
        if (this.__scrollTimer__ > 0) {
            clearTimeout(this.__scrollTimer__);
        }
        this.__scrollTimer__ = setTimeout(function () {
            this.__scrollingElement__ = undefined;
            this.__scrollTimer__ = -1;
        }.bind(this), 100);
    }
}

TableScroller.prototype.clearChild = function () {
    this.$viewport.clearChild();
    this.$topTable.clearChild();
    this.$content = null;
};

TableScroller.prototype.addChild = function (elt) {
    if (this.$viewport.childNodes.length == 0) {
        if (elt.tagName && elt.tagName.toLowerCase() == 'table') {
            this.$viewport.addChild(elt);
            this.$content = elt;
            this._updateContent();
            this.sync.then(this._updateContentSize.bind(this)).then(function () {
                setTimeout(this._updateContentSize.bind(this), 30)
            }.bind(this));
        }
        else {
            throw new Error('Element must be a table!');
        }
    }
    else {
        throw new Error("Only 1 table accepted!");
    }
};


TableScroller.prototype._updateFixedTable = function () {
    var fixedCol = this.fixedCol;

    this.$fixedViewport.clearChild();
    this.$fixedTable = TableScroller_$(this.$content.cloneNode(false)).addClass('absol-table-scroller-fixed-table').addTo(this.$fixedViewport);
    this.$fixedTableThead = TableScroller_$(this.$contentThead.cloneNode(false)).addTo(this.$fixedTable);

    this.$fixedTableThead.clearChild();
    this._fixedTableThsVisible = [];
    var self = this;
    this._fixedTableTr = Array.prototype.filter.call(this.$contentThead.childNodes, function (elt) {
        return elt.tagName == "TR";
    }).map(function (tr) {
        var cloneTr = TableScroller_$(tr.cloneNode(false));
        cloneTr.__originElement__ = tr;
        self.$fixedTableThead.appendChild(cloneTr);
        return cloneTr;
    });

    this._fixedTableThs = this._fixedTableTr.map(function (tr) {
        return Array.prototype.filter.call(tr.__originElement__.childNodes, function (elt1) {
            return elt1.tagName == "TH";
        }).reduce(function (ac, th) {
            var colspan = th.getAttribute('colspan');
            if (colspan) {
                colspan = parseInt(colspan);
            }
            else {
                colspan = 1;
            }
            ac.colspanSum += colspan;
            var cloneTh = TableScroller_$(th.cloneNode(true));
            tr.appendChild(cloneTh);
            cloneTh.__originElement__ = th;
            ac.result.push(cloneTh);
            if (ac.colspanSum <= fixedCol) {
                self._fixedTableThsVisible.push(th);
            }
            return ac;
        }, { result: [], colspanSum: 0 }).result;
    });
};


TableScroller.prototype._updateHeaderScroller = function () {
    var self = this;
    this.$headScrollerViewport.clearChild();
    this.$headScrollerTable = TableScroller_$(this.$content.cloneNode(false))
        .addTo(this.$headScrollerViewport);
    this.$headScrollerThead = TableScroller_$(this.$contentThead.cloneNode(false))
        .addTo(this.$headScrollerTable);

    this._headScrollerTr = Array.prototype.filter.call(this.$contentThead.childNodes, function (elt) {
        return elt.tagName == "TR";
    }).map(function (tr) {
        var cloneTr = TableScroller_$(tr.cloneNode(false));
        cloneTr.__originElement__ = tr;
        self.$headScrollerThead.appendChild(cloneTr);
        return cloneTr;
    });

    this._headScrollerTds = this._headScrollerTr.map(function (tr) {
        return Array.prototype.filter.call(tr.__originElement__.childNodes, function (elt1) {
            return elt1.tagName == "TH";
        }).map(function (th) {
            var cloneTh = TableScroller_$(th.cloneNode(true)).addTo(tr);
            cloneTh.__originElement__ = th;
            return cloneTh;
        });

    });
};


TableScroller.prototype._updateLeftTable = function () {
    this.$leftTable = TableScroller_$(this.$content.cloneNode(true)).addTo(this.$leftViewport);


};


TableScroller.prototype._updateContent = function () {
    this.$contentThead = TableScroller_$('thead', this.$content);
    this._updateFixedTable();
    this._updateHeaderScroller();
    this._updateLeftTable();
};

TableScroller.prototype._updateFixedTableSize = function () {
    var l = 1000;
    var r = -1000;
    this._fixedTableThsVisible.forEach(function (elt) {
        var b = elt.getBoundingClientRect();
        l = Math.min(l, b.left);
        r = Math.max(r, b.right);
    });

    this._leftWidth = r - l;
    this.$fixedViewport.addStyle('width', this._leftWidth + 2 + 'px');

    this._fixedTableTr.forEach(function (elt) {
        var styleHeight = Element["a" /* default */].prototype.getComputedStyleValue.call(elt.__originElement__, 'height');
        elt.addStyle('height', styleHeight);
    });

    this._fixedTableThs.forEach(function (row) {
        row.forEach(function (elt) {
            var styleWidth = Element["a" /* default */].prototype.getComputedStyleValue.call(elt.__originElement__, 'width');

            elt.addStyle('width', styleWidth);
        });

    });
    this.$fixedTable.addStyle({
        height: this.$contentThead.getComputedStyleValue('height')
    });
};


TableScroller.prototype._updateHeaderScrollerSize = function () {
    var headHeight = Element["a" /* default */].prototype.getComputedStyleValue.call(this.$contentThead, 'height');
    this.$headScrollerTable.addStyle('height', headHeight);
    this.$headScroller.addStyle('height', headHeight);
    this._headScrollerTr.forEach(function (elt) {

        var styleHeight = Element["a" /* default */].prototype.getComputedStyleValue.call(elt.__originElement__, 'height');
        elt.addStyle('height', styleHeight);
    });

    this._headScrollerTds.forEach(function (row) {
        row.forEach(function (elt) {
            var styleWidth = Element["a" /* default */].prototype.getComputedStyleValue.call(elt.__originElement__, 'width');
            elt.addStyle('width', styleWidth);
        });
    });
};

TableScroller.prototype._updateLeftTableSize = function () {
    if (!this.$leftTable.style.width) {
        this.$leftTable.addStyle('width', this.$content.getComputedStyleValue('width'));
    }
    if (!this.$leftTable.style.height) {
        this.$leftTable.addStyle('height', this.$content.getComputedStyleValue('height'));
    }

    // console.log(this._leftWidth);

    this.$leftScroller.addStyle('width', this._leftWidth + 2 + 'px');
};

TableScroller.prototype._updateLinesSize = function () {
    if (this.$viewport.clientHeight < this.$viewport.scrollHeight ){
        this.addClass('scroll-v');
    }
    else{
        this.removeClass('scroll-v');
    }
    
    if (this.$viewport.clientWidth < this.$viewport.scrollWidth ){
        this.addClass('scroll-h');
    }
    else{
        this.removeClass('scroll-h');
    }

    this.$leftLine.addStyle({
        maxHeight: this.$content.getComputedStyleValue('height'),
        left: this._leftWidth + 'px'
    });
    this.$headLine.addStyle({
        top: this.$contentThead.getComputedStyleValue('height'),
        maxWidth: this.$content.getComputedStyleValue('width')
    });
};

TableScroller.prototype._updateContentSize = function () {
    this._updateFixedTableSize();
    this._updateHeaderScrollerSize();
    this._updateLeftTableSize();
    this._updateLinesSize();
};

TableScroller.property = {};

TableScroller.property.fixedCol = {
    set: function (value) {
        value = value || 0;
        this._fixedCol = value;
        if (this.$content) {
            this._updateContent();
            this.sync.then(this._updateContentSize.bind(this)).then(function () {
                setTimeout(this._updateContentSize.bind(this), 30)
            }.bind(this));
        }
    },
    get: function () {
        return this._fixedCol || 0;
    }
};




ACore["a" /* default */].install('TableScroller'.toLowerCase(), TableScroller);

/* harmony default export */ var js_TableScroller = (TableScroller);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/quickpath.css
var quickpath = __webpack_require__(79);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickPath.js




var QuickPath_ = ACore["a" /* default */]._;
var QuickPath_$ = ACore["a" /* default */].$;

function QuickPath() {
    var res = QuickPath_({
        class: 'absol-quick-path',
        extendEvent: ['change', 'press']
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, QuickPath.eventHandler);
    res._itemSeq = [];
    res.on('click', res.eventHandler.click);
    return res;
}


QuickPath.eventHandler = {};

QuickPath.eventHandler.click = function (event) {
    var button = this._fileButton(event.target)
    if (button) this.pressButton(button);

};


QuickPath.prototype.pressButton = function (button) {
    var index = parseInt(button.attr('data-index'));
    this.emit('press', { target: this, button: button, isActive: button.containsClass('toggle'), index: index, pathElement: this.path[index] }, this);
    if (button.containsClass('toggle')) return;
    if (!this.path[index].items || this.path[index].items.length == 0) return;// don't display dropdown
    var self = this;
    button.addClass('toggle');
    var buttonBound = button.getBoundingClientRect();
    var rootBound = this.getBoundingClientRect();
    var outBound = Dom["a" /* default */].traceOutBoundingClientRect(this);
    var atop = rootBound.top - outBound.top - 5;
    var abot = outBound.bottom - buttonBound.bottom - 10;
    var dx = buttonBound.left - rootBound.left;


    var dropdown = QuickPath_({
        class: 'absol-quick-path-dropdown',
        style: {
            left: dx + 'px',
            'min-width': buttonBound.width + 'px'
        },
        tag: 'bscroller',
        child: 'vmenu'
    }).addTo(this);
    var menu = QuickPath_$('vmenu', dropdown).on('press', function (event) {
        var text = event.menuItem.text;
        var iconSrc = event.menuItem.iconSrc;
        self.path[index].text = text;
        button.$text.clearChild().addChild(QuickPath_({ text: text }));
        if (iconSrc) {
            button.$iconImg.attr('src', iconSrc);
        }
        else {
            button.$iconImg.attr('src', undefined);
        }

        self.emit('change', { type: 'change', target: self, text: text, index: index, iconSrc: iconSrc });
    });

    var items = this.path[index].items;
    if (atop > abot) {
        menu.items = items;
        dropdown.addStyle({
            'max-height': atop + 'px',
            bottom: '100%'
        });
        var dropdownBound = dropdown.getBoundingClientRect();
        if (dropdownBound.height < abot) {
            dropdown.addStyle({
                'max-height': abot + 'px',
                top: '100%',
                overflow: 'visible'
            }).removeStyle('bottom');
        }
        else if (dropdownBound.height < atop) {
            dropdown.addStyle('overflow', 'visible')
        }
    }
    else {
        menu.items = items;
        dropdown.addStyle({
            'max-height': abot + 'px',
            top: '100%'
        });
        var dropdownBound = dropdown.getBoundingClientRect();
        if (dropdownBound.height < abot) {
            dropdown.addStyle('overflow', 'visible')
        }
    }
    setTimeout(function () {
        QuickPath_$(document.body).once('click', function () {
            dropdown.remove();
            button.removeClass('toggle');
        });
    }, 100);
};

QuickPath.prototype._fileButton = function (elt) {
    while (elt != this && elt) {
        if (elt.tagName == 'BUTTON' && elt.containsClass && elt.containsClass('absol-quick-path-btn')) {
            return elt;
        }
        elt = elt.parentNode;
    }
    return false;
};


QuickPath.prototype.updatePath = function () {
    this.clearChild();
    var self = this;
    this.path.forEach(function (data, index) {
        var buttom = self._createButton(data, index);
        self.addChild(buttom);
    });

};

QuickPath.prototype._createButton = function (data, index) {
    var buttom = QuickPath_({
        tag: 'button',
        class: 'absol-quick-path-btn',
        attr: {
            'data-index': '' + index
        },
        child: [
            'toggler-ico',
            {
                tag: 'img',
                class: "absol-quick-path-btn-ext-ico",

            },
            {
                tag: 'span',
                child: { text: data.text }
            }
        ]
    });

    buttom.$iconImg = QuickPath_$('.absol-quick-path-btn-ext-ico', buttom);
    if (data.iconSrc) {
        buttom.$iconImg.src = data.iconSrc;
    }
    buttom.$text = QuickPath_$('span', buttom);
    return buttom;
}

QuickPath.prototype.push = function (item) {
    this.path.push(item);
    var buttom = this._createButton(item, this.path.length - 1);
    this.addChild(buttom);
};

QuickPath.prototype.clear = function () {
    this.path = [];
}



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 {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 () {

    }
};

ACore["a" /* default */].install('quickpath', QuickPath);

/* harmony default export */ var js_QuickPath = (QuickPath);







// CONCATENATED MODULE: ./node_modules/absol-acomp/js/QuickMenu.js






var QuickMenu_ = ACore["a" /* default */]._;
var QuickMenu_$ = ACore["a" /* default */].$;

function QuickMenu() {
    //like context menu without right-click
    var res = QuickMenu_({
        extendEvent: 'requestcontextmenu',
        class: ['absol-context-hinge'],
        child: {
            tag: 'vmenu',
            class: [
                'absol-context-menu', 'absol-bscroller'
            ],
            style: {
                'overflow-y': 'auto',
                'box-sizing': 'border-box'
            }
        }
    });

    res.$contextMenu = QuickMenu_$('vmenu.absol-context-menu', res);

    res._contextMenuSync = Promise.resolve();

    return res;
};

// QuickMenu.prototype.show = function(element, menuProps, anchor){
//     var elementBound = element.getBoundingClientRect();

// };

ACore["a" /* default */].install('quickmenu', QuickMenu);
QuickMenu.PRIORITY_ANCHORS = [0, 3, 7, 4, 1, 2, 6, 5];
QuickMenu.DEFAULT_ANCHOR = 0;

QuickMenu.$ctn = QuickMenu_('.absol-context-hinge-fixed-container');
QuickMenu.$elt = QuickMenu_('quickmenu').addTo(QuickMenu.$ctn);
QuickMenu.$element = undefined;
QuickMenu._acceptAnchors = 0;
QuickMenu._previewAnchor = QuickMenu.DEFAULT_ANCHOR;
QuickMenu._session = Math.random() * 10000000000 >> 0;
QuickMenu._menuListener = undefined;

QuickMenu.$elt.$contextMenu.on('press', function (event) {
    if (QuickMenu._menuListener) QuickMenu._menuListener(event.menuItem);
});



QuickMenu.updatePosition = function () {

    if (!QuickMenu.$element) return;

    var qmenu = QuickMenu.$elt;
    var menu = qmenu.$contextMenu;
    var ebound = QuickMenu.$element.getBoundingClientRect();
    var menuBound = menu.getBoundingRecursiveRect(3);
    var qBound = qmenu.getBoundingClientRect();
    var outBound = Dom["a" /* default */].traceOutBoundingClientRect(qmenu);
    //padding
    outBound.left += 2;
    outBound.top += 2;
    outBound.bottom -= 2;
    outBound.right -= 2;
    outBound.height -= 4;
    outBound.width -= 4;

    var getPos = function (anchor) {
        anchor = anchor % 8;
        var x = 0;
        var y = 0;
        if (anchor == 0 || anchor == 3) {
            y = ebound.top;
        }

        if (anchor == 0 || anchor == 7) {
            x = ebound.right;
        }

        if (anchor == 1 || anchor == 6) {
            x = ebound.left;
        }

        if (anchor == 1 || anchor == 2) {
            y = ebound.bottom;
        }

        if (anchor == 2 || anchor == 5) {
            x = ebound.right - menuBound.width;
        }

        if (anchor == 3 || anchor == 4) {
            x = ebound.left - menuBound.width;
        }

        if (anchor == 4 || anchor == 7) {
            y = ebound.bottom - menuBound.height;
        }

        if (anchor == 5 || anchor == 6) {
            y = ebound.top - menuBound.height;
        }
        return { x: x, y: y };
    };

    var pos;

    var bestSquare = -1;
    var bestRect;
    var priority = [QuickMenu._previewAnchor].concat(QuickMenu._acceptAnchors);

    var cAnchor;
    var outRect = new Math_Rectangle(outBound.left, outBound.top, outBound.width, outBound.height);

    var menuRect;
    var viewSquare;
    var cPos;
    for (var i = 0; i < priority.length; ++i) {
        cAnchor = priority[i];
        cPos = getPos(cAnchor);
        menuRect = new Math_Rectangle(cPos.x, cPos.y, menuBound.width, menuBound.height);
        viewSquare = outRect.collapsedSquare(menuRect);

        if (viewSquare - 0.01 > bestSquare) {
            bestSquare = viewSquare;
            pos = cPos;
            QuickMenu._previewAnchor = cAnchor;
            bestRect = outRect.collapsedRect(menuRect);
        }
    }

    if (bestRect && pos.y < ebound.bottom) {
        pos.y += menuBound.height - Math.min(menuBound.height, bestRect.height - 5);
    }

    pos.x -= qBound.left;
    pos.y -= qBound.top;

    menu.addStyle({
        left: pos.x + 'px',
        top: pos.y + 'px'
    });

    if (bestRect) {
        menu.addStyle('max-height', bestRect.height + 'px');
    }
    else {
        menu.removeStyle('max-height');
    }

};

QuickMenu._scrollEventHandler = QuickMenu.updatePosition.bind(QuickMenu);
QuickMenu.$scrollTrackElements = [];


QuickMenu.show = function (element, menuProps, anchor, menuListener, darkTheme) {
    //untrack all element
    QuickMenu.$scrollTrackElements.forEach(function (e) {
        if (e.removeEventListener)
            e.removeEventListener('scroll', QuickMenu._scrollEventHandler, false);
        else
            e.dettachEvent('onscroll', QuickMenu._scrollEventHandler, false);

    });
    QuickMenu.$scrollTrackElements = [];
    if (typeof anchor == 'number') {
        QuickMenu._acceptAnchors = [anchor];
    }
    else if (anchor instanceof Array) {
        QuickMenu._acceptAnchors = anchor;
    }
    else {
        QuickMenu._acceptAnchors = QuickMenu.PRIORITY_ANCHORS;
    }

    QuickMenu._previewAnchor = QuickMenu._acceptAnchors[0];

    QuickMenu._session = Math.random() * 10000000000 >> 0;
    QuickMenu.$ctn.addTo(document.body);
    Dom["a" /* default */].addToResizeSystem(QuickMenu.$ctn);

    QuickMenu.$ctn.updateSize = QuickMenu.updatePosition.bind(QuickMenu);
    QuickMenu.$element = element;
    QuickMenu._menuListener = menuListener;
    var qmenu = QuickMenu.$elt;
    var menu = qmenu.$contextMenu;
    Object.assign(menu, menuProps);
    if (darkTheme) qmenu.addClass('dark');
    else qmenu.removeClass('dark');
    menu.removeStyle('visibility');//for prevent size change blink
    QuickMenu.updatePosition();
    setTimeout(function () {
        menu.addStyle('visibility', 'visible');
    }, 2);

    //track element
    var trackElt = element.parentElement;
    while (trackElt) {
        // trackElt.addEventListener('scroll', QuickMenu._scrollEventHandler, false);
        if (trackElt.addEventListener)
            trackElt.addEventListener('scroll', QuickMenu._scrollEventHandler, false);
        else
            trackElt.attachEvent('onscroll', QuickMenu._scrollEventHandler, false);

        QuickMenu.$scrollTrackElements.push(trackElt);
        trackElt = trackElt.parentElement;
    }
    if (document.addEventListener) {
        document.addEventListener('scroll', QuickMenu._scrollEventHandler, false);
    }
    else {
        document.attachEvent('onscroll', QuickMenu._scrollEventHandler, false);
    }
    QuickMenu.$scrollTrackElements.push(document);

    return QuickMenu._session;
};

QuickMenu.close = function (session) {
    if (session !== true && session != QuickMenu._session) return;
    QuickMenu.$element = undefined;
    QuickMenu._menuListener = undefined;
    QuickMenu._previewAnchor = QuickMenu.DEFAULT_ANCHOR;

    //untrack all element
    QuickMenu.$scrollTrackElements.forEach(function (e) {
        e.removeEventListener('scroll', QuickMenu._scrollEventHandler, false);
    });
    QuickMenu.$scrollTrackElements = [];
    var qmenu = QuickMenu.$elt;
    var menu = qmenu.$contextMenu;
    menu.removeStyle('visibility');//for prevent size change blink
    menu.removeStyle({
        left: true,
        top: true
    });
    QuickMenu.$ctn.remove();
};


QuickMenu.showWhenClick = function (element, menuProps, anchor, menuListener, darkTheme) {
    var res = {
        menuProps: menuProps,
        anchor: anchor,
        currentSession: undefined,
        element: element,
        menuListener: menuListener,
        darkTheme: darkTheme
    };

    var clickHandler = function () {
        if (QuickMenu._session == res.currentSession) return;

        res.currentSession = QuickMenu.show(res.element, res.menuProps, res.anchor, res.menuListener, res.darkTheme);

        var finish = function () {
            document.body.removeEventListener('click', finish, false);
            QuickMenu.close(res.currentSession);
            res.currentSession = undefined;
        };

        setTimeout(function () {
            document.body.addEventListener('click', finish, false);
        }, 10)
    };

    res.remove = function () {
        element.removeEventListener('click', clickHandler, false);
    };

    element.addEventListener('click', clickHandler, false);
    return res;
};


/* harmony default export */ var js_QuickMenu = (QuickMenu);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/droppanel.css
var droppanel = __webpack_require__(81);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanel.js





var DropPanel_ = ACore["a" /* default */]._;
var DropPanel_$ = ACore["a" /* default */].$;



function DropPanel() {
    var res = DropPanel_({
        class: 'absol-drop-panel',
        extendEvent: ['toggle'],
        child: [
            {
                class: 'absol-drop-panel-head',
                child: [
                    'toggler-ico',
                    {
                        tag: 'span',
                        class: "absol-drop-panel-name"
                    }
                ]

            },
            {
                class: ['absol-drop-panel-body', 'absol-bscroller']
            }
        ]
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, DropPanel.eventHandler);
    res.$body = DropPanel_$('.absol-drop-panel-body', res);
    res.$head = DropPanel_$('.absol-drop-panel-head', res)
        .on('click', res.eventHandler.clickHead);

    res.$name = DropPanel_$('.absol-drop-panel-name', res);
    OOP["a" /* default */].drillProperty(res, res.$name, 'name', 'innerHTML');
    return res;
}


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.containsClass('show');
    }
};


ACore["a" /* default */].install('DropPanel'.toLowerCase(), DropPanel);

/* harmony default export */ var js_DropPanel = (DropPanel);
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DropPanelStack.js



var DropPanelStack_ = ACore["a" /* default */]._;
var DropPanelStack_$ = ACore["a" /* default */].$;
function DropPannelStack() {
    var res = DropPanelStack_({
        class: 'absol-drop-pannel-stack'
    });
    res.$attachHook = DropPanelStack_('attachhook').addTo(res).on('error', function () {
        Dom["a" /* default */].addToResizeSystem(this);
        this.updateSize = res.updateSize.bind(res);
    });
    res.sync = new Promise(function (rs) {
        res.$attachHook.once('error', rs);
    });
    return res;
}

DropPannelStack.prototype.updateSize = function () {
};

DropPannelStack.prototype.getFreeHeight = function () {
    var childNodes = this.childNodes;
    var sumHeight = 0;
    var bound = this.getBoundingClientRect();
    var childBound;
    for (var i = 0; i < childNodes.length; ++i) {
        var child = childNodes[i];
        if (child.containsClass && child.containsClass('absol-drop-panel')) {
            childBound = child.getBoundingClientRect();
            sumHeight += childBound.height;
        }
    }
    return bound.height - sumHeight;
};


DropPannelStack.prototype.addChild = function (child) {
    var self = this;
    if (child.containsClass('absol-drop-panel')) {
        //remove last event listener off other parent
        if (child.__drop_panel_toggle_listener__) {
            child.off('toggle', child.__drop_panel_toggle_listener__);
        }
        child.__drop_panel_toggle_listener__ = function (event) {
            event.preventDefault();
            self.sync = self.sync.then(function () {
                if (event.isShowed) {
                    setTimeout(function () {
                        child.removeStyle('max-height');
                    }, 200);
                    child.toggle();
                }
                else {
                    var headBound = child.$head.getBoundingClientRect();
                    var vailableHeight = self.getFreeHeight();
                    if (vailableHeight > 3) {
                        child.addStyle('max-height', self.getFreeHeight() + headBound.height + 'px');
                        child.toggle();
                    }
                }

                return new Promise(function (rs) {
                    setTimeout(rs, 200);
                });
            })
        };
        child.on('toggle', child.__drop_panel_toggle_listener__);
        this.super(child);
    }
    else {
        throw new Error('Child element must be a DropPanel');
    }
};

ACore["a" /* default */].install('droppanelstack', DropPannelStack);

/* harmony default export */ var DropPanelStack = (DropPannelStack);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/draggablevstack.css
var draggablevstack = __webpack_require__(83);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/DraggableVStack.js




var DraggableVStack_ = ACore["a" /* default */]._;
var DraggableVStack_$ = ACore["a" /* default */].$;

function DraggableVStack() {
    var res = DraggableVStack_({
        extendEvent: 'change',
        class: 'absol-draggable-vstack'
    });

    res.eventHandler = OOP["a" /* default */].bindFunctions(res, DraggableVStack.eventHandler);
    res.$cloneContainer = DraggableVStack_('.absol-draggable-vstack-clone-container');
    res.$destLine = DraggableVStack_('.absol-draggable-vstack-dest-line');
    res.on('mousedown', res.eventHandler.mouseDown);

    return res;
}



DraggableVStack.eventHandler = {};
DraggableVStack.eventHandler.mouseDown = function (event) {
    var dragzone = this._findDragzone(event.target);
    var self = this;
    if (dragzone) {
        //save mouse position, use it for other event
        this._mouseClientX = event.clientX;
        this._mouseClientY = event.clientY;

        var bound = this.getBoundingClientRect();
        var element = this._findDirectChild(event.target);
        element.classList.add('dragging');
        this.$draggingElt = element;

        this._dragginEltIndex = 0;
        this._childrentInfo = Array.prototype.map.call(this.childNodes, function (child, index) {
            var childBound = child.getBoundingClientRect();
            if (child == element) self._dragginEltIndex = index;
            return {
                index: index,
                elt: child,
                bound: childBound,
                top: childBound.top - bound.top
            }
        });


        this.$cloneContainer.addTo(this);
        this.$destLine.addTo(this);


        var containerBound = element.getBoundingClientRect();
        this._initBound = bound;
        this._currentBound = bound;

        this._initTop = containerBound.top - bound.top;
        this._crTop = this._initTop;
        this._initHeight = containerBound.height;
        this._pressX = event.clientX - containerBound.left;
        this._pressY = event.clientY - containerBound.top;
        this.$cloneContainer.addStyle({
            top: this._initTop + 'px',
            height: this._initHeight + 'px'
        }).addChild(element.cloneNode(true));

        this.$destLine.addStyle('top', this._initTop + 'px');

        DraggableVStack_$(document.body).on('mousemove', this.eventHandler.mouseMove);
        DraggableVStack_$(document.body).on('mouseleave', this.eventHandler.mouseFinish);
        DraggableVStack_$(document.body).on('mouseup', this.eventHandler.mouseFinish);

        this.$scrollTrackElements = [];
        var trackElt = this.parentElement;
        while (trackElt) {
            if (trackElt.addEventListener)
                trackElt.addEventListener('scroll', this.eventHandler.scroll, false);
            else
                trackElt.attachEvent('onscroll', this.eventHandler.scroll, false);

            this.$scrollTrackElements.push(trackElt);
            trackElt = trackElt.parentElement;
        }
        if (document.addEventListener) {
            document.addEventListener('scroll', this.eventHandler.scroll, false);
        }
        else {
            document.attachEvent('onscroll', this.eventHandler.scroll, false);
        }
        this.$scrollTrackElements.push(document);
        this._updateDragginPosition();
    }
};


DraggableVStack.eventHandler.mouseMove = function (event) {
    event.preventDefault();
    //save mouse position 
    this._mouseClientX = event.clientX;
    this._mouseClientY = event.clientY;
    this._updateDragginPosition();
};



DraggableVStack.eventHandler.scroll = function (event) {
    this._updateDragginPosition();
};

DraggableVStack.eventHandler.mouseFinish = function (event) {
    var self = this;
    DraggableVStack_$(document.body).off('mouseleave', this.eventHandler.mouseFinish);
    DraggableVStack_$(document.body).off('mouseup', this.eventHandler.mouseFinish);
    DraggableVStack_$(document.body).off('mousemove', this.eventHandler.mouseMove);
    this.$scrollTrackElements.forEach(function (e) {
        if (e.removeEventListener)
            e.removeEventListener('scroll', self.eventHandler.scroll, false);
        else
            e.dettachEvent('onscroll', self.eventHandler.scroll, false);
    });


    if ((this._dragginEltIndex == this._childrentInfo.length - 1 && !this._destRecord)
        || (this._destRecord && (this._destRecord.index == this._dragginEltIndex || this._destRecord.index == this._dragginEltIndex + 1))) {
        //nothing to change, view animation
        this.$cloneContainer.addClass('home-going');
        setTimeout(function () {
            self.$cloneContainer.addStyle({
                top: self._initTop + 'px'
            });
        }, 0);
        setTimeout(function () {
            self.$cloneContainer.clearChild().removeClass('home-going').remove();
            self.$destLine.removeStyle({ top: '' }).remove();
            self.$draggingElt.classList.remove('dragging');
            self.$draggingElt = undefined;
        }, 200);
    }
    else {
        this.$draggingElt.remove();
        this.$destLine.removeStyle({ top: '' }).remove();
        this.$cloneContainer.clearChild().remove();
        this.$draggingElt.classList.remove('dragging');
        if (this._destRecord) {
            this.addChildBefore(this.$draggingElt, this._destRecord.elt);
            this.emit('change', {
                type: 'change', target: this, action: "BEFORE", at: this._destRecord.elt,
                sourceIndex: this._dragginEltIndex, destIndex: this._destIndex, elt: this.$draggingElt
            }, this);
        }
        else {
            this.addChild(this.$draggingElt);
            this.emit('change', { type: 'change', target: this, action: "END", elt: this.$draggingElt, sourceIndex: this._dragginEltIndex }, this);
        }
    }
};


DraggableVStack.prototype._updateDragginPosition = function () {
    //update cloneContainer
    var bound = this.getBoundingClientRect();
    //style top of cloneContainer
    this._crTop = this._mouseClientY - bound.top - this._pressY;
    this.$cloneContainer.addStyle({
        top: this._crTop + 'px'
    });

    //update destLine
    var centerY = this._crTop + this._initHeight / 2;
    var nearestRecord;
    var nearestDistance = Math.abs(centerY - bound.height);//end of stack
    var cDist;
    var nearestIndex = this._childrentInfo.length;
    for (var i = 0; i < this._childrentInfo.length; ++i) {
        cDist = Math.abs(centerY - this._childrentInfo[i].top);
        if (cDist < nearestDistance) {
            nearestRecord = this._childrentInfo[i];
            nearestDistance = cDist;
            nearestIndex = i;
        }
    }
    if (nearestRecord) {
        this.$destLine.addStyle('top', nearestRecord.top + 'px');
    }
    else {
        this.$destLine.addStyle('top', bound.height + 'px');
    }
    if (nearestIndex == this._dragginEltIndex || nearestIndex == this._dragginEltIndex + 1) {
        this.$destLine.addStyle('visibility', 'hidden');
    }
    else {
        this.$destLine.removeStyle('visibility', 'hidden');

    }
    this._destRecord = nearestRecord;
    this._destIndex = nearestIndex;
    // setTimeout(this._autoScrollParentIfNeed.bind(this, 10), 33);
};


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["a" /* default */].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-vstack')) {
                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.prototype._findChild = function (elt) {
    while (elt && elt != this) {
        if (elt.parentNode == this) return elt;
        elt = elt.parentNode;
    }
    return undefined;
};


ACore["a" /* default */].install('DraggableVStack'.toLowerCase(), DraggableVStack);

/* harmony default export */ var js_DraggableVStack = (DraggableVStack);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/chromecalendar.css
var chromecalendar = __webpack_require__(85);

// CONCATENATED MODULE: ./node_modules/absol/src/Time/datetime.js
var MILLIS_PER_DAY = 24 * 3600000;
var MILLIS_PER_HOUR = 3600000;
var MILLIS_PER_MINUTE = 60000;

/**
 * 
 * @param {Date} date 
 * @returns {String}
 */
function ddmmyyyy(date) {
    var mm = date.getMonth() + 1; // getMonth() is zero-based
    var dd = date.getDate();

    return [(dd > 9 ? '' : '0') + dd,
    (mm > 9 ? '' : '0') + mm,
    date.getFullYear()
    ].join('/');
};



/**
 * 
 * @param {Date} date
 * @returns {String} 
 */
function yyymmdd(date) {
    var mm = date.getMonth() + 1; // getMonth() is zero-based
    var dd = date.getDate();

    return [
        date.getFullYear(),
        (mm > 9 ? '' : '0') + mm,
        (dd > 9 ? '' : '0') + dd
    ].join('/');
};





var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var shortDayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var monthNames = ["January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
];

var shortMonthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];



//more https://www.myonlinetraininghub.com/excel-date-and-time-formatting
var formatTokenRegex = /([a-zA-Z]|[^\s\-$-/:-?{-~!"^_`\[\]])+/g;//more

/**
 * 
 * @param {Date} date 
 * @param {String} format 
 * @returns {String}
 */
function formartDateString(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;
        }
    });
};




/**
 * @param {Date} date
 * @return {Date}  
 */
function prevDate(date) {
    return new Date(date.getTime() - 86400000);
};

/**
 * @param {Date} date
 * @return {Date}  
 */
function nextDate(date) {
    return new Date(date.getTime() + 86400000);
};



/**
 * @param {Date} date
 * @return {Date} date at 00:00 
 */
function beginOfHour(date) {
    var res = new Date(date.getTime());
    res.setMilliseconds(0);
    res.setSeconds(0);
    res.setMinutes(0);
    return res;
};


/**
 * @param {Date} date
 * @param {Boolean} gmt default:false
 * @return {Date} date at 00:00 
 */
function beginOfDay(date, gmt) {
    var res = new Date(date.getTime());
    res.setMilliseconds(0);
    res.setSeconds(0);
    res.setMinutes(0);
    if (gmt)
        res.setUTCHours(0);
    else res.setHours(0);
    return res;
};


/**
 * @param {Date} date
 * @param {Boolean} gmt default:false
 * @return {Date} date at 00:00 
 */
function beginOfWeek(date, gmt, begin) {
    begin = begin || 0;
    var res = beginOfDay(date, gmt);
    while ((gmt ? res.getUTCDay() : res.getDay()) != begin) {
        res = prevDate(res);
    }
    return res;
};

/**
 * @param {Date} date
 * @param {Boolean} gmt default:false
 * @return {Date} date at 00:00 AM 
 */
function datetime_beginOfMonth(date, gmt) {
    gmt = !!gmt;
    var d = gmt ? date.getUTCDate() : date.getDate();
    var m = gmt ? date.getUTCMonth() : date.getMonth();
    var y = gmt ? date.getUTCFullYear() : date.getFullYear();
    var res = new Date();
    if (gmt)
        res.setUTCFullYear(y, m, 1);
    else
        res.setFullYear(y, m, 1);
    return beginOfDay(res, gmt);
};

/**
 * @param {Date} date
 * @param {Boolean} gmt default:false
 * @return {Date} date at 00:00 AM 
 */
function beginOfYear(date, gmt) {
    gmt = !!gmt;
    var d = gmt ? date.getUTCDate() : date.getDate();
    var m = gmt ? date.getUTCMonth() : date.getMonth();
    var y = gmt ? date.getUTCFullYear() : date.getFullYear();
    var res = new Date();
    if (gmt)
        res.setUTCFullYear(y, 0, 1);
    else
        res.setFullYear(y, 0, 1);
    return beginOfDay(res, gmt);
};


/**
 * @param {Date} date0
 * @param {Date} date1
 * @param {Boolean} gmt default:false
 * @return {number} 
 */
function compareDate(date0, date1, gmt) {
    var date0 = beginOfDay(date0, !!gmt);
    var date1 = beginOfDay(date1, !!gmt);
    return (date0.getTime() - date1.getTime()) / (86400000);
};



/**
 * @param {Date} date0
 * @param {Date} date1
 * @param {Boolean} gmt default:false
 * @return {number} 
 */

function compareMonth(date0, date1, gmt) {
    gmt = !!gmt;
    var m0 = gmt ? date0.getUTCMonth() : date0.getMonth();
    var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear();

    var m1 = gmt ? date1.getUTCMonth() : date1.getMonth();
    var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear();

    return (y0 - y1) * 12 + (m0 - m1);
};

function compareYear(date0, date1, gmt) {
    gmt = !!gmt;
    var y0 = gmt ? date0.getUTCFullYear() : date0.getFullYear();
    var y1 = gmt ? date1.getUTCFullYear() : date1.getFullYear();
    return y0 - y1;
};



/**
 * 
 * @param {Date} date
 * @returns {Date} 
 */
function nextMonth(date) {
    var m = date.getMonth();
    var y = date.getFullYear();
    if (m == 11) {
        return new Date(y + 1, 0, 1, 0, 0, 0, 0);
    }
    else {
        return new Date(y, m + 1, 1, 0, 0, 0, 0);
    }
}

/**
 * 
 * @param {Date} date
 * @returns {Date} 
 */
function prevMonth(date) {
    var m = date.getMonth();
    var y = date.getFullYear();
    if (m == 0) {
        return new Date(y - 1, 11, 1, 0, 0, 0, 0);
    }
    else {
        return new Date(y, m - 1, 1, 0, 0, 0, 0);
    }
}
// CONCATENATED MODULE: ./node_modules/absol-acomp/js/ChromeCalendar.js






var ChromeCalendar_ = ACore["a" /* default */]._;
var ChromeCalendar_$ = ACore["a" /* default */].$;



function ChromeCalendar() {
    var res = ChromeCalendar_({
        class: 'absol-chrome-calendar',
        extendEvent: 'pick',
        child: [
            {
                class: 'absol-chrome-calendar-header',
                child: [
                    {
                        class: 'absol-chrome-calendar-title',
                        child: [
                            {
                                tag: 'span',
                                class: 'title-time',
                                child: { text: 'Septemper, 2019' }
                            },
                            {
                                tag: 'span',
                                child: { text: '\u25bc' }
                            }
                        ]
                    },
                    {
                        class: 'absol-chrome-calendar-header-buttons',
                        child: [
                            {
                                tag: 'button',
                                class: 'prev-btn',
                                child: 'span.mdi.mdi-menu-left',
                                attr: {
                                    title: 'Previous Month'
                                }
                            },
                            {
                                tag: 'button',
                                class: 'today-btn',
                                child: 'span.mdi.mdi-circle-medium',
                                attr: {
                                    title: 'Today'
                                }
                            },
                            {
                                tag: 'button',
                                class: 'next-btn',
                                child: 'span.mdi.mdi-menu-right',
                                attr: {
                                    title: 'Next Month'
                                }
                            }
                        ]

                    }
                ]
            },
            {
                class: 'absol-chrome-calendar-instance',
                child: [
                    {
                        class: 'absol-chrome-calendar-dayofweek',
                        child: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'].map(function (text) {
                            return {
                                child: { text: text }
                            }
                        })
                    },
                    {

                        class: 'absol-chrome-calendar-month',
                        child: Array(6).fill(0).map(function (u, i) {
                            return {
                                class: 'absol-chrome-calendar-week-in-mounth',
                                child: Array(7).fill(0).map(function (v, j) {
                                    return {
                                        child: { text: i * 7 + j + '' }
                                    }
                                })
                            }
                        })

                    },
                    {
                        tag: 'vscroller',
                        class: 'absol-chrome-calendar-years',
                        child: {
                            child: Array(200).fill(0).map(function (u, i) {
                                return {
                                    class: 'absol-chrome-calendar-year',
                                    child: [
                                        {
                                            class: 'absol-chrome-calendar-year-head',
                                            child: { text: i + 1890 + '' },
                                        }
                                    ],
                                    props: {
                                        __year__: i + 1890
                                    },
                                    on: {
                                        click: function () {

                                            res.expandYear(this.__year__);
                                        }
                                    }
                                };
                            })
                        }
                    }
                ]
            }
        ]
    });


    res.$title = ChromeCalendar_$('.absol-chrome-calendar-title', res)
        .on('click', function () {
            res.viewYear();
        });
    res.$titleTime = ChromeCalendar_$('.absol-chrome-calendar-title > .title-time', res);

    res.$instance = ChromeCalendar_$('.absol-chrome-calendar-instance', res);

    res.$month = ChromeCalendar_$('.absol-chrome-calendar-month', res);
    res._minLimitDate = new Date(1890, 0, 1, 0, 0, 0, 0, 0);
    res._maxLimitDate = new Date(2090, 0, 1, 0, 0, 0, 0, 0);

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

    res.$prevBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.prev-btn', res)
        .on('click', function () {
            res.viewPrevMonth();
        });
    res.$todayBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.today-btn', res)
        .on('click', function () {
            res.viewToday();
            res.pickDate(new Date());
        });
    res.$nextBtn = ChromeCalendar_$('.absol-chrome-calendar-header-buttons > button.next-btn', res)
        .on('click', function () {
            res.viewNexMounth();
        });

    res.$yearScroller = ChromeCalendar_$('vscroller.absol-chrome-calendar-years', res);
    res.$yearItems = [];

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

    res.$attachHook = ChromeCalendar_('attachhook').addTo(res).on('error', function () {
        // res.updateSize();
        res.$yearScroller.requestUpdateSize();
        res.expandYear(res._viewDate.getFullYear());
    });

    res.sync = new Promise(function (rs) {
        res.$attachHook.on('error', rs);
    });

    return res;
}


/**
 * @param {Date} date
 * @returns {Boolean}
 */
ChromeCalendar.prototype._isSelectedDate = function (date) {
    for (var i = 0; i < this._selectedDates.length; ++i) {
        if (compareDate(date, this._selectedDates[i]) == 0) return true;
    }
    return false;
};
/**
 * @param {Date} date
 * @returns {Boolean}
 */
ChromeCalendar.prototype._isSelectedMonth = function (date) {
    for (var i = 0; i < this._selectedDates.length; ++i) {
        if (compareMonth(date, this._selectedDates[i]) == 0) return true;
    }
    return false;
};


ChromeCalendar.prototype.pickDate = function (date, event) {
    this._selectedDates = [date];
    this._updateMonth(this.$month);
    if (this.$lastOpenYearItem) this.$lastOpenYearItem.$months.updateActiveMonth();


    this.emit('pick', {
        type: 'pick', value: date,
        isTrusted: event && event.isTrusted,
        originEvent: event,
        selectedDates: this.selectedDates
    });
};

/**
 * @param {Element} monthElt
 * @param {Date} date
 */
ChromeCalendar.prototype._fillMonth = function (monthElt, date) {
    var self = this;
    if (monthElt.$cells === undefined) {//for faster, attach event to element 
        monthElt.$cells = [];
        ChromeCalendar_$('.absol-chrome-calendar-week-in-mounth > div', this.$month, function (elt) {
            monthElt.$cells.push(elt);
            elt.on('click', function (event) {
                self.pickDate(this.__date__, event);
                if (elt.containsClass('absol-chrome-calendar-not-in-month')) {
                    if (this.__date__.getDate() < 15) {
                        self.viewNexMounth();
                    }
                    else {
                        self.viewPrevMonth();
                    }
                }
            });
        });
    }

    var currentDate = beginOfWeek(datetime_beginOfMonth(date));
    var d;
    var cell;
    for (var i = 0; i < monthElt.$cells.length; ++i) {
        var cell = monthElt.$cells[i];
        d = currentDate.getDate();
        cell.innerHTML = '' + d;
        cell.__date__ = beginOfDay(currentDate);
        currentDate = nextDate(currentDate);
    }
};

ChromeCalendar.prototype._updateMonth = function (monthElt) {
    if (!monthElt.$cells) return; // days weren't filled
    var now = new Date();
    var viewM = this._viewDate.getMonth();
    var m;
    var cell;
    var currentDate;
    for (var i = 0; i < monthElt.$cells.length; ++i) {
        cell = monthElt.$cells[i];
        currentDate = cell.__date__;
        m = currentDate.getMonth();
        if (m != viewM)
            cell.addClass('absol-chrome-calendar-not-in-month');
        else
            cell.removeClass('absol-chrome-calendar-not-in-month');
        if (compareDate(currentDate, now) == 0)
            cell.addClass('absol-chrome-calendar-today');
        else
            cell.removeClass('absol-chrome-calendar-today');

        if (this._isSelectedDate(currentDate))
            cell.addClass('absol-chrome-calendar-selected');
        else
            cell.removeClass('absol-chrome-calendar-selected');

        if (compareDate(this._minLimitDate, currentDate) > 0 || compareDate(currentDate, this._maxLimitDate) > 0) {
            cell.addClass('absol-chrome-calendar-date-disabled');
        }
        else {
            cell.removeClass('absol-chrome-calendar-date-disabled');
        }
    }
};

ChromeCalendar.prototype.viewNexMounth = function () {
    var self = this;
    this.sync = this.sync.then(function () {
        return new Promise(function (rs) {
            var oldBound = self.$month.getBoundingClientRect();
            var oldMonth = self.$month.cloneNode(true);
            var instanceBound = self.$instance.getBoundingClientRect();
            if (self.$lastAnimationCtn) {
                self.$lastAnimationCtn.removeClass('new').addClass('old');
            }
            var oldMonthCnt = ChromeCalendar_({
                class: ['absol-chrome-calendar-month-animation-container', 'old'],
                style: {
                    top: oldBound.top - instanceBound.top + 'px',
                    height: oldBound.height + 'px',
                    width: oldBound.width + 'px'
                },
                child: oldMonth
            }).addTo(self.$instance);

            self._viewDate = nextMonth(self._viewDate);
            self.viewMonth();

            var newMonth = self.$month.cloneNode(true);
            var overlap = 0;
            var j = 41;
            while (j >= 0 && self.$month.$cells[j].containsClass('absol-chrome-calendar-not-in-month')) {
                overlap += oldBound.height / 6;
                j -= 7;
            }

            var newMonthCtn = ChromeCalendar_({
                class: ['absol-chrome-calendar-month-animation-container', 'new'],
                style: {
                    top: oldBound.top + oldBound.height - instanceBound.top - overlap + 'px',
                    height: oldBound.height + 'px',
                    width: oldBound.width + 'px'
                },
                child: newMonth
            }).addTo(self.$instance);

            self.$lastAnimationCtn = newMonthCtn;
            setTimeout(function () {
                oldMonthCnt.addStyle('top', oldBound.top - oldBound.height + overlap - instanceBound.top + 'px');
                newMonthCtn.addStyle('top', oldBound.top - instanceBound.top + 'px');
            }, 20);
            setTimeout(function () {
                self.$lastAnimationCtn = undefined;
                oldMonthCnt.remove();
                newMonthCtn.remove();
            }, 220);
            setTimeout(rs, 22);
        });
    });
    return this.sync;
};

ChromeCalendar.prototype.viewPrevMonth = function () {
    var self = this;
    this.sync = this.sync.then(function () {
        return new Promise(function (rs) {
            var oldBound = self.$month.getBoundingClientRect();
            var oldMonth = self.$month.cloneNode(true);
            var instanceBound = self.$instance.getBoundingClientRect();
            if (self.$lastAnimationCtn) {
                self.$lastAnimationCtn.removeClass('new').addClass('old');
            }
            var oldMonthCnt = ChromeCalendar_({
                class: ['absol-chrome-calendar-month-animation-container', 'old'],
                style: {
                    top: oldBound.top - instanceBound.top + 'px',
                    height: oldBound.height + 'px',
                    width: oldBound.width + 'px'
                },
                child: oldMonth
            }).addTo(self.$instance);
            self._viewDate = prevMonth(self._viewDate);
            self.viewMonth();
            var newMonth = self.$month.cloneNode(true);
            var overlap = 0;
            var j = 0;
            while (j < 42 && self.$month.$cells[j].containsClass('absol-chrome-calendar-not-in-month')) {
                overlap += oldBound.height / 6;
                j += 7;
            }

            var newMonthCtn = ChromeCalendar_({
                class: ['absol-chrome-calendar-month-animation-container', 'new'],
                style: {
                    top: oldBound.top - oldBound.height + overlap - instanceBound.top + 'px',
                    height: oldBound.height + 'px',
                    width: oldBound.width + 'px'
                },
                child: newMonth
            }).addTo(self.$instance);

            self.$lastAnimationCtn = newMonthCtn;
            setTimeout(function () {
                oldMonthCnt.addStyle('top', oldBound.top + oldBound.height - overlap - instanceBound.top + 'px');
                newMonthCtn.addStyle('top', oldBound.top - instanceBound.top + 'px');
            }, 20);
            setTimeout(function () {
                self.$lastAnimationCtn = undefined;
                oldMonthCnt.remove();
                newMonthCtn.remove();
            }, 220);
            setTimeout(rs, 22);
        })
    });
    return this.sync;
};


ChromeCalendar.prototype.viewToday = function () {
    this._viewDate = new Date();
    this.viewMonth();
};

ChromeCalendar.prototype.viewMonth = function () {
    this._updateButtons();
    this.removeClass('view-year').addClass('view-month');
    this._fillMonth(this.$month, this._viewDate);
    this._updateMonth(this.$month);
    this.$titleTime.innerHTML = formartDateString(this._viewDate, 'mmmm, yyyy');
};


ChromeCalendar.prototype.viewYear = function () {
    this.removeClass('view-month')
        .addClass('view-year');
    this.expandYear(this._viewDate.getFullYear());
    this.$yearScroller.requestUpdateSize();
};

ChromeCalendar.prototype.expandYear = function (year) {
    var fontSize = this.getFontSize();

    var self = this;
    var lastItemElt = this.$lastOpenYearItem;

    var itemElt = this.$yearItems[year - 1890];
    var lastYear = 100000000;
    if (lastItemElt && lastItemElt.__year__ != year) {
        lastYear = lastItemElt.__year__;
        lastItemElt.addClass('start-closing');
        setTimeout(function () {
            lastItemElt.removeClass('start-closing').addClass('closing');
        }, 0);
        setTimeout(function () {
            lastItemElt.removeClass('closing');
            lastItemElt.$months.remove();
            lastItemElt.$months = undefined;
        }, 100);
    }

    if (lastItemElt != itemElt) {
        if (!itemElt.$months) {
            itemElt.$months = this._createMonths(year).addTo(itemElt);
            itemElt.addClass('start-opening');

            setTimeout(function () {
                itemElt.removeClass('start-opening').addClass('opening');
            }, 1);
            setTimeout(function () {
                itemElt.removeClass('opening');
            }, 100);
        }
    }
    var dy = itemElt.getBoundingClientRect().top - self.$yearScroller.getBoundingClientRect().top - fontSize * 0.45;
    if (itemElt.__year__ > lastYear) {
        dy -= 6 * fontSize;
    }

    self.$yearScroller.scrollBy(dy, 100);
    this.$lastOpenYearItem = itemElt;
    itemElt.$months.updateActiveMonth();

};


ChromeCalendar.prototype._updateButtons = function () {
    var endOfPrevMonth = prevDate(datetime_beginOfMonth(this._viewDate));

    if (compareDate(endOfPrevMonth, this._minLimitDate) < 0) {
        this.$prevBtn.addClass('absol-chrome-calendar-button-disabled');
    }
    else {
        this.$prevBtn.removeClass('absol-chrome-calendar-button-disabled');
    }

    var beginOfNextMonth = nextMonth(this._viewDate);

    if (compareDate(beginOfNextMonth, this._maxLimitDate) > 0) {
        this.$nextBtn.addClass('absol-chrome-calendar-button-disabled');
    }
    else {
        this.$nextBtn.removeClass('absol-chrome-calendar-button-disabled');
    }
    var now = new Date();
    if (compareDate(now, this._maxLimitDate) > 0 || compareDate(now, this._minLimitDate) < 0) {
        this.$todayBtn.addClass('absol-chrome-calendar-button-disabled');
    }
    else {
        this.$todayBtn.removeClass('absol-chrome-calendar-button-disabled');
    }
};

ChromeCalendar.prototype._createMonths = function (year) {
    var now = new Date();
    var self = this;
    var res = ChromeCalendar_({
        class: 'absol-chrome-calendar-year-mounths',
        child: Array(3).fill('').map(function (u, i) {
            return {
                class: 'absol-chrome-calendar-year-row-months',
                child: Array(4).fill(0).map(function (v, j) {
                    var date = new Date(year, i * 4 + j, 1, 0, 0, 0, 0, 0);
                    return {
                        class: ['absol-chrome-calendar-year-month']
                            .concat((year == now.getFullYear() && now.getMonth() == i * 4 + j) ? ['absol-chrome-calendar-today'] : [])
                            .concat(self._isSelectedMonth(date) ? ['absol-chrome-calendar-selected'] : [])
                        ,
                        child: { text: monthNames[i * 4 + j].substr(0, 3) },
                        on: {
                            click: function () {
                                self._viewDate = date;
                                self.viewMonth();
                            }
                        },
                        props: {
                            __date__: date
                        }
                    }
                })
            }
        })
    });
    res.$monthList = [];
    ChromeCalendar_$('.absol-chrome-calendar-year-month', res, function (e) {
        res.$monthList.push(e);
    });

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

            if (self._isSelectedMonth(e.__date__)) {
                e.addClass('absol-chrome-calendar-selected');
            }
            else {
                e.removeClass('absol-chrome-calendar-selected');

            }
            var beginOfMonth = datetime_beginOfMonth(e.__date__);
            var endOfMonth = prevDate(nextMonth(e.__date__));
            if (compareDate(self._minLimitDate, endOfMonth) > 0 || compareDate(beginOfMonth, self._maxLimitDate) > 0) {
                e.addClass('absol-chrome-calendar-date-disabled');
            }
            else {
                e.removeClass('absol-chrome-calendar-date-disabled');
            }
        });
    }
    return res;
};



ChromeCalendar.prototype.init = function (props) {
    props = props || {};
    this.super(props);
    this.viewToday();
};

ChromeCalendar.property = {};

ChromeCalendar.property.selectedDates = {
    set: function (value) {
        value = value || [];
        if (value instanceof Date) value = [value];
        this._selectedDates = value;
        this.sync = this.sync.then(function () {
            this._viewDate = this._selectedDates[0] || new Date();//default is today
            this.viewMonth();
        }.bind(this));
    },
    get: function () {
        return this._selectedDates;
    }
};


ChromeCalendar.property.minLimitDate = {
    set: function (value) {
        if (!value) value = new Date(1890, 0, 1, 0, 0, 0, 0, 0);
        if (typeof value == 'number') value = new Date(value);
        this._minLimitDate = value;
        //todo
        this._updateButtons();
        this.sync = this.sync.then(function () {
            this._updateMonth(this.$month);
            if (this.$lastOpenYearItem) {
                this.$lastOpenYearItem.$months.updateActiveMonth();
            }
        }.bind(this));
    },
    get: function () {
        return this._minLimitDate;
    }
};

ChromeCalendar.property.maxLimitDate = {
    set: function (value) {
        if (!value) value = new Date(2090, 0, 1, 0, 0, 0, 0, 0);
        if (typeof value == 'number') value = new Date(value);
        this._maxLimitDate = value;
        this._updateButtons();
        this.sync = this.sync.then(function () {
            this._updateMonth(this.$month);
            if (this.$lastOpenYearItem) {
                this.$lastOpenYearItem.$months.updateActiveMonth();
            }
        }.bind(this));
    },
    get: function () {
        return this._minLimitDate;
    }
};


ChromeCalendar.property.minDateLimit = ChromeCalendar.property.minLimitDate;
ChromeCalendar.property.maxDateLimit = ChromeCalendar.property.maxLimitDate;


ChromeCalendar.property.multiSelect = {
    set: function (value) {
        throw new Error('Not support yet!')
        var lastValue = this.multiSelect;
        value = !!value;
        if (lastValue != value) {
            if (value) {
                this.addClass('multi-select')
            }
            else {
                this.removeClass('multi-select');
            }
            this._updateMonth(this.$month);
        }
    },
    get: function () {
        return this.containsClass('multi-select');
    }
};

ACore["a" /* default */].install('chromecalendar', ChromeCalendar);




ChromeCalendar._session = Math.random() * 10000000000 >> 0;
ChromeCalendar._listener = undefined;


ChromeCalendar.showWhenClick = function (element, calendarProps, anchor, calendarPickListener, darkTheme) {
    var res = {
        calendarProps: calendarProps,
        anchor: anchor,
        currentSession: undefined,
        element: element,
        calendarPickListener: calendarPickListener,
        darkTheme: darkTheme,
        setDateValue: function (value) {
            if (this.currentSession == ChromeCalendar._session) {
                ChromeCalendar.$calendar.selectedDates = [value];
            }
        },
        cancel: function () { }
    };

    var clickHandler = function () {

        if (ChromeCalendar._session == res.currentSession) return;

        res.currentSession = ChromeCalendar.show(res.element, res.calendarProps, res.anchor, res.calendarPickListener, res.darkTheme);

        var finish = function (event) {
            if (event && event.target && EventEmitter["a" /* default */].hitElement(ChromeCalendar.$calendar, event)) return;
            document.body.removeEventListener('click', finish, false);
            ChromeCalendar.close(res.currentSession);
            ChromeCalendar.$calendar.off('pick', finish);

            res.currentSession = undefined;
            res.cancel = function () { };
        };

        setTimeout(function () {
            document.body.addEventListener('click', finish, false);
            ChromeCalendar.$calendar.on('pick', finish);
            res.cancel = finish;
        }, 10)
    };

    res.remove = function () {
        element.removeEventListener('click', clickHandler, false);
    };

    element.addEventListener('click', clickHandler, false);
    return res;
};


ChromeCalendar.show = function (element, calendarProps, anchor, calendarPickListener, darkTheme) {
    ChromeCalendar._session = Math.random() * 10000000000 >> 0;
    function exec() {
        if (!ChromeCalendar.$ctn) {
            ChromeCalendar.$ctn = ChromeCalendar_('.absol-context-hinge-fixed-container');
            ChromeCalendar.$follower = ChromeCalendar_('follower').addTo(ChromeCalendar.$ctn);

            ChromeCalendar.$calendar = ChromeCalendar_('chromecalendar')
                .on('pick', function (event) {
                    if (typeof ChromeCalendar._listener == 'function') {
                        ChromeCalendar._listener(event.value);
                    }
                }).addTo(ChromeCalendar.$follower);
        }
        
        ChromeCalendar.$ctn.addTo(document.body);
        // only one value need
        if (calendarProps instanceof Date) calendarProps = { selectedDates: [calendarProps] };
        if (calendarProps instanceof Array) calendarProps = { selectedDates: calendarProps };

        Object.assign(ChromeCalendar.$calendar, calendarProps);
        if (darkTheme) ChromeCalendar.$ctn.addClass('dark');
        else ChromeCalendar.$ctn.removeClass('dark');
        ChromeCalendar.$follower.followTarget = element;
        ChromeCalendar.$follower.anchor = anchor;
        ChromeCalendar.$calendar.addStyle('visibility', 'hidden');//for prevent size change blink
        ChromeCalendar._listener = calendarPickListener;
        setTimeout(function () {
            ChromeCalendar.$follower.updatePosition();
            ChromeCalendar.$calendar.removeStyle('visibility');
        }, 2);
    }
    if (document.body)
        exec();
    else
        Dom["a" /* default */].documentReady.then(exec);

    return ChromeCalendar._session;
};


ChromeCalendar.close = function (session) {
    if (session !== true && session != ChromeCalendar._session) return;
    function exec() {
        ChromeCalendar.followTarget = undefined;
        ChromeCalendar._listener = undefined;
        ChromeCalendar.$ctn.remove();
    }
    if (document.body) exec();
    else Dom["a" /* default */].documentReady.then(exec);

};



/* harmony default export */ var js_ChromeCalendar = (ChromeCalendar);
// EXTERNAL MODULE: ./node_modules/absol-acomp/css/calendarinput.css
var calendarinput = __webpack_require__(87);

// CONCATENATED MODULE: ./node_modules/absol-acomp/js/CalendarInput.js





var CalendarInput_ = ACore["a" /* default */]._;
var CalendarInput_$ = ACore["a" /* default */].$;




function CalendarInput() {
    var res = CalendarInput_({
        extendEvent: ['change'],
        class: 'absol-calendar-input',
        child: 'input[type="text"][readonly="true"][value="dd/mm/yyyy"]'
    });

    res.$input = CalendarInput_$('input', res);
    res._value = beginOfDay(new Date());

    res._quickOption = js_ChromeCalendar.showWhenClick(res, {
        minLimitDate: res.minLimitDate || res.minDateLimit,
        maxLimitDate: res.maxLimitDate || res.maxDateLimit,
        selectedDates: [res._value]
    }, 'auto', function (value) {
        res._value = value;
        res.$input.value = res.formartDateString(value);
        res._quickOption.calendarProps.selectedDates = [value];//change new option
        res.emit('change', { target: res, value: value }, res);
    });

    OOP["a" /* default */].drillProperty(res, res._quickOption.calendarProps, ['minLimitDate', 'maxLimitDate', 'minDateLimit', 'maxDateLimit']);

    return res;
}

CalendarInput.property = {};

CalendarInput.property.value = {
    set: function (value) {
        if (value === null || value === undefined) {
            this.$input.value = this.formartDateString(value);
            this._quickOption.calendarProps.selectedDates = [];
            this._value = value;
        }
        else {
            if (typeof value == 'number') value = new Date(value);
            this._value = value;
            this.$input.value = this.formartDateString(value);
            this._quickOption.calendarProps.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.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.formartDateString(this.value);
    },
    get: function () {
        return this._dateToString;
    }
};

CalendarInput.prototype.formartDateString = function (date) {
    if (!date) {
        console.log(typeof this.dateToString);
        return { 'undefined': 'dd/mm/yyyy', 'function': '--/--/--', 'object': 'dd/mm/yyyy', 'string': typeof this.dateToString }[typeof this.dateToString] || '--/--/--';
    }
    if (!this.dateToString) {
        return formartDateString(date);
    }
    else if (typeof this.dateToString == 'string') {
        return formartDateString(date, this.dateToString);
    }
    else if (typeof this.dateToString == 'function') {
        return this.dateToString(date);
    }
};

ACore["a" /* default */].install('calendarinput', CalendarInput);


// for older code
ACore["a" /* default */].install('calendar-input', function (data) {

    return CalendarInput_({
        tag: 'calendarinput',
        extendEvent: 'changed',
        props: data,
        on: {
            change: function (ev) {
                this.emit('changed', ev.value);
            }
        }
    });
});


/* harmony default export */ var js_CalendarInput = (CalendarInput);

// EXTERNAL MODULE: ./node_modules/absol-acomp/js/DebugTask.js
var DebugTask = __webpack_require__(9);

// EXTERNAL MODULE: ./node_modules/absol-acomp/css/debugtask.css
var debugtask = __webpack_require__(89);

// CONCATENATED MODULE: ./node_modules/absol-acomp/AComp.js














// import './js/SelectTable2';
// import './css/selecttable2.css';

































































// import './js/TextArea2';
// import './css/textarea2.css';



































// import './css/quickpath.css';





















var AComp = {
    core: ACore["a" /* default */],
    $: ACore["a" /* default */].$,
    _: ACore["a" /* default */]._,
    creator: ACore["a" /* default */].creator,
    buildDom: ACore["a" /* default */].buildDom,
    runDebugTask: DebugTask["a" /* default */].start.bind(DebugTask["a" /* default */])
};

window.runDebugTask = DebugTask["a" /* default */].start.bind(DebugTask["a" /* default */]);

/* harmony default export */ var absol_acomp_AComp = (AComp);
// CONCATENATED MODULE: ./js/core/FCore.js


var Fcore = new Dom["a" /* default */]();
Fcore.install(absol_acomp_AComp.core);
/* harmony default export */ var FCore = (Fcore);
// CONCATENATED MODULE: ./js/anchors/RelativeAnchor.js

var RelativeAnchor_ = FCore._;
var RelativeAnchor_$ = FCore.$;
/**
 * AnchorBox only has on child node
 */

function RelativeAnchor() {
  this.hAlign = this.HALIGN_VALUE[0];
  this.vAlign = this.VALIGN_VALUE[0];
  this.viewBinding = {};
  this.childNode = null;
  this.view = this.render();
  this.created();
}

RelativeAnchor.prototype.created = function () {
  for (var key in this.viewBinding) {
    this[key] = RelativeAnchor_$(this.viewBinding[key], this.view);
  }
};

RelativeAnchor.prototype.VALIGN_VALUE = ['top', 'bottom', 'center', 'fixed'];
RelativeAnchor.prototype.HALIGN_VALUE = ['left', 'right', 'center'];
RelativeAnchor.prototype.hAlign = RelativeAnchor.prototype.HALIGN_VALUE[0];
RelativeAnchor.prototype.vAlign = RelativeAnchor.prototype.VALIGN_VALUE[0];
RelativeAnchor.prototype.left = 0;
RelativeAnchor.prototype.right = 0;
RelativeAnchor.prototype.top = 0;
RelativeAnchor.prototype.bottom = 0;
RelativeAnchor.prototype.width = 0;
RelativeAnchor.prototype.height = 0;
RelativeAnchor.prototype.HALIGN_CLASS_NAMES = {
  left: 'as-halign-left',
  right: 'as-halign-right',
  center: 'as-halign-center',
  fixed: 'as-halign-fixed'
};
RelativeAnchor.prototype.VALIGN_CLASS_NAMES = {
  top: 'as-valign-top',
  bottom: 'as-valign-bottom',
  center: 'as-valign-center',
  fixed: 'as-valign-fixed'
};
RelativeAnchor.prototype.HALIGN_ACEPT_STYLE_NAMES = {
  left: {
    left: true,
    right: false
  },
  right: {
    left: false,
    right: true
  },
  center: {
    left: false,
    right: false
  },
  // component nedd set height
  fixed: {
    left: true,
    right: true
  }
};
RelativeAnchor.prototype.VALIGN_ACEPT_STYLE_NAMES = {
  top: {
    top: true,
    bottom: false
  },
  bottom: {
    top: false,
    bottom: true
  },
  center: {
    top: false,
    bottom: false
  },
  // component nedd set height
  fixed: {
    top: true,
    bottom: true
  }
};

RelativeAnchor.prototype.getAceptStyleNames = function () {
  return Object.assign({}, this.VALIGN_ACEPT_STYLE_NAMES[this.vAlign], this.HALIGN_ACEPT_STYLE_NAMES[this.hAlign]);
};

RelativeAnchor.prototype.TOP_CLASS_NAME = 'as-relative-anchor-box';

RelativeAnchor.prototype.render = function () {
  var layout = {
    "class": [this.TOP_CLASS_NAME, this.HALIGN_CLASS_NAMES[this.hAlign], this.VALIGN_CLASS_NAMES[this.vAlign]]
  };
  this.viewBinding.$containter = '.' + this.TOP_CLASS_NAME;

  if (this.vAlign == 'center') {
    layout.child = {
      "class": 'as-center-table',
      child: 'as-center-cell'
    };
    this.viewBinding.$containter = '.as-center-cell';
  }

  return RelativeAnchor_(layout);
};
/**
 * @param {BaseComponent} child
 */


RelativeAnchor.prototype.attachChild = function (child) {
  if (this.childNode) {
    this.childNode.view.remove();
    this.childNode = null;
    this.childNode._anchorBox = null;
  }

  if (child._anchorBox) throw new Error("Detach anchorBox first");
  this.childNode = child;
  child.anchor = this;
  this.$containter.addChild(child.view);
};

RelativeAnchor.prototype.detachChild = function () {
  if (this.childNode) {
    this.childNode.view.remove();
    this.childNode.anchor = null;
    this.childNode = null;
  } else throw new Error("Nothing to detach");
};

RelativeAnchor.prototype.setHAlign = function (value) {
  if (this.hAlign == value) return;
  this.view.removeClass(this.HALIGN_CLASS_NAMES[this.hAlign]);
  this.hAlign = value;
  this.view.addClass(this.HALIGN_CLASS_NAMES[this.hAlign]);
  this.updateHAlignStyle();
};

RelativeAnchor.prototype.setVAlign = function (value) {
  if (this.vAlign == value) return;
  this.view.removeClass(this.VALIGN_CLASS_NAMES[this.vAlign]);

  if (this.vAlign == 'center') {
    this.view.clearChild();
    this.viewBinding.$containter = '.' + this.TOP_CLASS_NAME;
    this.$containter = this.view;

    if (this.childNode) {
      this.$containter.addChild(this.childNode.view);
    }
  }

  this.vAlign = value;
  this.view.addClass(this.VALIGN_CLASS_NAMES[this.vAlign]);

  if (this.vAlign == 'center') {
    this.view.clearChild();
    this.view.addChild(RelativeAnchor_({
      "class": 'as-center-table',
      child: '.as-center-cell'
    }));
    this.viewBinding.$containter = '.as-center-cell';
    this.$containter = RelativeAnchor_$(this.viewBinding.$containter, this.view);

    if (this.childNode) {
      this.$containter.addChild(this.childNode.view);
    }
  }

  this.updateVAlignStyle();
};

RelativeAnchor.prototype.updateVAlignStyle = function () {
  for (var key in this.VALIGN_ACEPT_STYLE_NAMES[this.vAlign]) {
    if (this.VALIGN_ACEPT_STYLE_NAMES[this.vAlign][key]) {
      this.view.addStyle(key, this[key] + 'px');
    } else {
      this.view.removeStyle(key);
    }
  }
};

RelativeAnchor.prototype.updateHAlignStyle = function () {
  for (var key in this.HALIGN_ACEPT_STYLE_NAMES[this.hAlign]) {
    if (this.HALIGN_ACEPT_STYLE_NAMES[this.hAlign][key]) {
      this.view.addStyle(key, this[key] + 'px');
    } else {
      this.view.removeStyle(key);
    }
  }
};

RelativeAnchor.prototype.setLeft = function (value) {
  this.left = value;

  if (this.HALIGN_ACEPT_STYLE_NAMES[this.hAlign].left) {
    this.view.addStyle('left', value + 'px');
  }
};

RelativeAnchor.prototype.setRight = function (value) {
  this.right = value;

  if (this.HALIGN_ACEPT_STYLE_NAMES[this.hAlign].right) {
    this.view.addStyle('right', value + 'px');
  }
};

RelativeAnchor.prototype.setBottom = function (value) {
  this.bottom = value;

  if (this.VALIGN_ACEPT_STYLE_NAMES[this.vAlign].bottom) {
    this.view.addStyle('bottom', value + 'px');
  }
};

RelativeAnchor.prototype.setTop = function (value) {
  this.top = value;

  if (this.VALIGN_ACEPT_STYLE_NAMES[this.vAlign].top) {
    this.view.addStyle('top', value + 'px');
  }
};

RelativeAnchor.prototype.setWidth = function (value) {
  this.width = value; //must set width in component, not anchor
};

RelativeAnchor.prototype.setHeight = function (value) {
  this.height = value; //must set height in component, not anchor
};

/* harmony default export */ var anchors_RelativeAnchor = (RelativeAnchor);
// CONCATENATED MODULE: ./js/core/BaseComponent.js


function BaseComponent() {
  EventEmitter["a" /* default */].call(this);
  this.attributes = {};
  /**
   * @type {Array<BaseComponent}
   */

  this.children = []; // <> childData

  this.style = {};
  this.events = {};
  this.preInit();
  this.view = this.render();
  this.view.classList.add(this.BASE_COMPONENT_CLASS_NAME);
  this.onCreated();
}

Object.defineProperties(BaseComponent.prototype, Object.getOwnPropertyDescriptors(EventEmitter["a" /* default */].prototype));
BaseComponent.prototype.constructor = BaseComponent;
BaseComponent.prototype.tag = "BaseComponent";
BaseComponent.prototype.menuIcon = "span.mdi.mdi-package-variant-closed";
BaseComponent.prototype.BASE_COMPONENT_CLASS_NAME = 'as-base-component';
BaseComponent.prototype.anchor = null;
BaseComponent.prototype.parent = null;
BaseComponent.prototype.SUPPORT_STYLE_NAMES = [];

BaseComponent.prototype.preInit = function () {};

BaseComponent.prototype.onCreated = function () {
  for (var key in this.attributes) {
    this.handleAttribute(key, this.attributes[key]);
  }
};

BaseComponent.prototype.onAttached = function (parent) {
  //reset style after attach anchor
  for (var key in this.style) {
    this.handleStyle(key, this.style[key]);
  }
};

BaseComponent.prototype.onDetached = function (parent) {};

BaseComponent.prototype.render = function () {
  throw new Error("Not implement!");
};

BaseComponent.prototype.getData = function () {
  var self = this;
  var data = {
    tag: this.tag
  };
  var attributeKeys = Object.keys(this.attributes).filter(function (key) {
    return self.attributes[key] !== undefined || self.attributes[key] !== null;
  });

  if (attributeKeys.length > 0) {
    data.attributes = attributeKeys.reduce(function (ac, key) {
      ac[key] = self.attributes[key];
      return ac;
    }, {});
  }

  var styleKeys = Object.keys(this.style).filter(function (key) {
    return self.style[key] !== undefined || self.style[key] !== null;
  });

  if (styleKeys.length > 0) {
    data.style = styleKeys.reduce(function (ac, key) {
      ac[key] = self.style[key];
      return ac;
    }, {});
  }

  if (this.children.length > 0) {
    data.children = this.children.map(function (child) {
      return child.getData();
    });
  }

  return data;
};

BaseComponent.prototype.setAttribute = function (key, value) {
  this.attributes[key] = value;
  this.handleAttribute(key, value);
};

BaseComponent.prototype.getAttribute = function (key) {
  return this.attributes[key];
};

BaseComponent.prototype.removeAttribute = function (key) {
  this.attributes[key] = undefined;
  delete this.attributes[key];
  this.handleAttribute(key, undefined);
};

BaseComponent.prototype.handleAttribute = function (key, value) {
  var functionName = 'handleAttribute' + key.substr(0, 1).toUpperCase() + key.substr(1);
  if (this[functionName]) this[functionName](value);else throw new Error("Not implement this." + functionName + '(value)!');
};

BaseComponent.prototype.setStyle = function (key, value) {
  this.style[key] = value;
  this.handleStyle(key, value);
};

BaseComponent.prototype.getStyle = function (key) {
  return this.style[key];
};

BaseComponent.prototype.removeStyle = function (key) {
  delete this.style[key];
  this.handleStyle(key, undefined);
};
/**
 * @param {String} key
 * @param {string|Number} value 
 */


BaseComponent.prototype.handleStyle = function (key, value) {
  var functionName = 'handleStyle' + key.substr(0, 1).toUpperCase() + key.substr(1);
  if (this[functionName]) this[functionName](value);else throw new Error("Not implement this." + functionName + '(value)!');
};

BaseComponent.prototype.handleStyleVAlign = function (value) {
  if (this.anchor) this.anchor.setVAlign(value);
};

BaseComponent.prototype.handleStyleHAlign = function (value) {
  if (this.anchor) this.anchor.setHAlign(value);
};

BaseComponent.prototype.handleStyleLeft = function (value) {
  if (this.anchor) this.anchor.setLeft(value);
};

BaseComponent.prototype.handleStyleRight = function (value) {
  if (this.anchor) this.anchor.setRight(value);
};

BaseComponent.prototype.handleStyleTop = function (value) {
  if (this.anchor) this.anchor.setTop(value);
};

BaseComponent.prototype.handleStyleBottom = function (value) {
  if (this.anchor) this.anchor.setBottom(value);
};

BaseComponent.prototype.addChild = function (child) {
  if (child.parent) child.parent.removeChild(child);
  this.children.push(child);
  child.parent = this;
  this.handleAddChild(child, -1); //negative index for appending child

  child.onAttached(this);
};

BaseComponent.prototype.addChildBefore = function (child, existingChild) {
  if (child.parent) child.parent.removeChild(child);
  var existChildIndex = this.children.indexOf(existingChild);

  if (existChildIndex >= 0) {
    this.children.splice(existChildIndex, 0, child);
    child.parent = this;
    this.handleAddChild(child, existChildIndex);
    child.onAttached(this);
    return true;
  }

  return false;
};

BaseComponent.prototype.addChildAfter = function (child, existingChild) {
  if (child.parent) child.parent.removeChild(child);
  var existChildIndex = this.children.indexOf(existingChild);

  if (existChildIndex >= 0) {
    this.children.splice(existChildIndex + 1, 0, child);
    child.parent = this;
    this.handleAddChild(child, existChildIndex + 1);
    child.onAttached(this);
    return true;
  }

  return false;
};

BaseComponent.prototype.handleAddChild = function (child, index) {
  throw new Error("Not implement!");
};

BaseComponent.prototype.removeChild = function (child) {
  var childIndex = this.children.indexOf(child);
  if (childIndex < 0) return false;
  this.children.splice(childIndex, 1);
  this.handleRemoveChild(child, childIndex);
  child.parent = undefined;
  child.onDetached(this);
  return true;
};

BaseComponent.prototype.clearChild = function () {
  while (this.children.length > 0) {
    this.removeChild(this.children[0]);
  }
};

BaseComponent.prototype.handleRemoveChild = function (child, index) {
  throw new Error("Not implement!");
};

BaseComponent.prototype.setEvent = function (key, value) {
  this.events[key] = value;
  this.on(key, value);
};

BaseComponent.prototype.removeEvent = function (key) {
  this.events[key] = undefined;
  delete this.events[key];
  this.off(key, value);
};

/* harmony default export */ var core_BaseComponent = (BaseComponent);
// CONCATENATED MODULE: ./js/core/ScalableComponent.js


var ScalableComponent_ = FCore._;

function ScalableComponent() {
  core_BaseComponent.call(this);
}

Object.defineProperties(ScalableComponent.prototype, Object.getOwnPropertyDescriptors(core_BaseComponent.prototype));
ScalableComponent.prototype.constructor = ScalableComponent;
ScalableComponent.prototype.tag = "ScalableComponent";
ScalableComponent.prototype.SUPPORT_STYLE_NAMES = ['width', 'height', 'top', 'left', 'right', 'top', 'bottom'];

ScalableComponent.prototype.preInit = function () {
  this.hAlign = 'left';
  this.vAlign = 'top';
  this.style.left = 0;
  this.style.right = 0;
  this.style.top = 0;
  this.style.bottom = 0;
  this.style.height = 30;
  this.style.width = 69;
};

ScalableComponent.prototype.handleStyleWidth = function (value) {
  if (this.style.hAlign != 'fixed') this.view.addStyle('width', value + 'px');
};

ScalableComponent.prototype.handleStyleHeight = function (value) {
  if (this.style.vAlign != 'fixed') this.view.addStyle('height', value + 'px');
};

ScalableComponent.prototype.handleStyleHAlign = function (value) {
  core_BaseComponent.prototype.handleStyleHAlign.call(this, value);

  if (value != 'fixed') {
    this.view.addStyle('width', this.style.width + 'px');
  } else {
    this.view.removeStyle('width');
  }
};

ScalableComponent.prototype.handleStyleVAlign = function (value) {
  core_BaseComponent.prototype.handleStyleVAlign.call(this, value);

  if (value != 'fixed') {
    this.view.addStyle('height', this.style.height + 'px');
  } else {
    this.view.removeStyle('height');
  }
};

ScalableComponent.prototype.getAceptStyleNames = function () {
  var ac = this.anchor.getAceptStyleNames();
  if (this.style.vAlign != 'fixed') ac.height = true;
  if (this.style.hAlign != 'fixed') ac.width = true;
  return ac;
};

/* harmony default export */ var core_ScalableComponent = (ScalableComponent);
// EXTERNAL MODULE: ./css/component.css
var component = __webpack_require__(8);

// CONCATENATED MODULE: ./js/components/TextInput.js



var TextInput_ = FCore._;

function TextInput() {
  core_ScalableComponent.call(this);
}

Object.defineProperties(TextInput.prototype, Object.getOwnPropertyDescriptors(core_ScalableComponent.prototype));
TextInput.prototype.constructor = TextInput;
TextInput.prototype.tag = "TextInput";
TextInput.prototype.menuIcon = "span.mdi.mdi-textbox";
TextInput.prototype.SUPPORT_ATTRIBUTE_NAMES = ['value'];
TextInput.prototype.SUPPORT_EVENT_NAMES = ['change'];

TextInput.prototype.onCreated = function () {
  core_ScalableComponent.prototype.onCreated.call(this);
  var self = this;
  this.view.on('keyup', function () {
    var lastValue = self.attributes.value;

    if (this.value != lastValue) {
      self.attributes.value = this.value;
      self.emit('change', this.value, self);
    }
  });
};

TextInput.prototype.render = function () {
  return TextInput_('input[type="text"]');
};

TextInput.prototype.handleAttributeValue = function (value) {
  this.view.value = value;
};

/* harmony default export */ var components_TextInput = (TextInput);
// CONCATENATED MODULE: ./js/layouts/RelativeLayout.js



var RelativeLayout_ = FCore._;

function RelativeLayout() {
  core_ScalableComponent.call(this);
}

Object.defineProperties(RelativeLayout.prototype, Object.getOwnPropertyDescriptors(core_ScalableComponent.prototype));
RelativeLayout.prototype.constructor = RelativeLayout;
RelativeLayout.prototype.tag = 'RelativeLayout';
RelativeLayout.prototype.menuIcon = 'span.mdi.mdi-relative-scale';
RelativeLayout.prototype.TOP_CLASS_NAME = 'as-relative-layout';
RelativeLayout.prototype.SUPPORT_STYLE_NAMES = ['width', 'height']; //, 'left', 'right', 'top', 'bottom'];

RelativeLayout.prototype.preInit = function () {
  core_ScalableComponent.prototype.preInit.call(this);
  this.style.vAlign = 'fixed';
  this.style.hAlign = 'fixed';
};

RelativeLayout.prototype.getAnchorBoxConstructor = function () {
  return anchors_RelativeAnchor;
};

RelativeLayout.prototype.render = function () {
  return RelativeLayout_({
    "class": this.TOP_CLASS_NAME
  });
};

RelativeLayout.prototype.handleAddChild = function (child, index) {
  var anchor = new anchors_RelativeAnchor();
  this.view.addChild(anchor.view);
  anchor.attachChild(child);
};

RelativeLayout.prototype.handleRemoveChild = function (child, index) {
  var anchor = child.anchor;
  anchor.detachChild();
  anchor.view.remove();
};

/* harmony default export */ var layouts_RelativeLayout = (RelativeLayout);
// CONCATENATED MODULE: ./js/core/Assembler.js
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function Assembler() {
  this.constructors = {};
}

;

Assembler.prototype.build = function (data) {
  var construction = this.constructors[data.tag];
  if (construction == undefined) throw new Error("undefined construction " + data.tag);
  var res = new construction();
  var style = data.style;
  if (_typeof(style) == 'object') for (var styleName in style) {
    res.setStyle(styleName, style[styleName]);
  }
  var attributes = data.attributes;
  if (_typeof(attributes) == 'object') for (var attributeName in attributes) {
    res.setAttribute(attributeName, attributes[attributeName]);
  }
  var events = data.events;
  if (_typeof(events) == 'object') for (var eventName in events) {
    res.setEvent(eventName, events[eventName]);
  }
  var children = data.children;

  if (children && children.length > 0) {
    for (var i = 0; i < children.length; ++i) {
      var child = this.build(children[i]);
      res.addChild(child);
    }
  }

  return res;
};

Assembler.prototype.addConstructor = function (arg0, arg1) {
  if (typeof arg0 == 'function') {
    var name = arg0.prototype.tag || arg0.name;
    this.constructors[name] = arg0;
  } else if (typeof arg0 == 'string') {
    this.constructors[arg0] = arg1;
  } else {
    throw new Error('Invalid params');
  }
};

Assembler.prototype.removeConstructor = function (arg0, arg1) {
  if (typeof arg0 == 'function') {
    var name = arg0.prototype.tag || arg0.name;
    this.constructors[name] = undefined;
    delete this.constructors[name];
  } else if (typeof arg0 == 'string' && (this.constructors[arg0] == arg1 || arg1 == undefined)) {
    delete this.constructors[arg0];
  }
};

Assembler.prototype.addComponent = function (name, construction) {
  this.addConstructor(name, construction);
};

Assembler.prototype.removeComponent = function (name, construction) {
  this.removeConstructor(name, construction);
};

/* harmony default export */ var core_Assembler = (Assembler);
// CONCATENATED MODULE: ./js/components/DateInput.js


var DateInput_ = FCore._;

function DateInput() {
  core_ScalableComponent.call(this);
}

Object.defineProperties(DateInput.prototype, Object.getOwnPropertyDescriptors(core_ScalableComponent.prototype));
DateInput.prototype.constructor = DateInput;
DateInput.prototype.tag = "DateInput";
DateInput.prototype.menuIcon = "span.mdi.mdi-calendar-edit";
DateInput.prototype.SUPPORT_STYLE_NAMES = ['top', 'left', 'right', 'top', 'bottom', 'width', 'height'];
DateInput.prototype.SUPPORT_ATTRIBUTE_NAMES = ['value'];
DateInput.prototype.SUPPORT_EVENT_NAMES = ['change'];

DateInput.prototype.render = function () {
  return DateInput_('calendarinput');
};

DateInput.prototype.onCreated = function () {
  core_ScalableComponent.prototype.onCreated.call(this);
  var self = this;
  this.view.on('change', function (event) {
    self.emit('change', this.value, self);
  });
};

DateInput.prototype.handleAttributeValue = function (value) {
  if (value instanceof Date) this.view.value = value;else {
    this.attributes.value = new Date(value);
    this.view.value = this.attributes.value;
  }
};

/* harmony default export */ var components_DateInput = (DateInput);
// CONCATENATED MODULE: ./node_modules/absol/src/AppPattern/Context.js
function Context (){
    this.state = "CREATE";
    /**
     * @type {Context}
     */
    this.parent = null;
    this.children = [];
}

Context.prototype.appendChild = function(){
    for (var i = 0; i < arguments.length; ++i){
        this.children.push(arguments[i]);
    }
};

Context.prototype.removeChild = function(child){
    var temp = this.children;
    this.children = [];
    for (var i = 0; i< this.children.length; ++i){
        if (temp[i] == child){
        }
        else{
            this.children.push(temp[i]);
        }
    }
};

Context.prototype.getView = function () {
    throw new Error("Not Implement!");
};


/**
 * @returns {*}
 */
Context.prototype.getContext = function(key){
    return this.parent.getContextManager().get(key);
};

/**
 * @returns {ContextManager}
 */
Context.prototype.getContextManager = function(){
    return this.parent.getContextManager();
};

/**
 * @param {Application} 
 */
Context.prototype.attach = function (parent) {
    //stop before attach to new context
    this.stop();
    /**
     * @type {Application}
     */
    this.parent = parent;
    this.state = "ATTACHED";
    this.onAttached && this.onAttached();
};

Context.prototype.detach = function () {
    this.stop();
    this.state = "DETACHED";
    this.onDetached && this.onDetached();
    this.parent = null;
};

Context.prototype.pause = function () {
    if (this.state.match(/RUNNING/)) {
        this.state = "PAUSE";
        this.onPause && this.onPause();
    }
    else {
        console.warn(this, "NOT RUNNING");
    }
};
Context.prototype.resume = function () {
    if (!this.state.match(/STANDBY||PAUSE/)) {
        console.error(this, 'NOT READY!');
        return;
    }
    this.state = "RUNNING";
    this.onResume && this.onResume();
};

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

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

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

Context.prototype.stop = function () {
    if (this.state.match(/STOP|DIE|CREATE|ATTACHED|DETACHED/)) 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();
};



/* harmony default export */ var AppPattern_Context = (Context);
// EXTERNAL MODULE: ./css/resizebox.css
var resizebox = __webpack_require__(92);

// CONCATENATED MODULE: ./js/dom/ResizeBox.js



var ResizeBox_ = FCore._;
var ResizeBox_$ = FCore.$;

function ResizeBox() {
  var res = ResizeBox_({
    "class": 'as-resize-box',
    extendEvent: ['beginmove', 'endmove', 'moving'],
    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']
    }
  });

  res.eventHandler = OOP["a" /* default */].bindFunctions(res, ResizeBox.eventHandler);
  res.on('mousedown', res.eventHandler.mouseDownBody);
  res._lastOptionNames = undefined;
  return res;
}

ResizeBox.eventHandler = {};

ResizeBox.eventHandler.mouseDownBody = function (event) {
  event.preventDefault();
  this._optionNames = event.target.attr('class').match(/body|left|top|right|bottom/g);

  var option = this._optionNames.reduce(function (ac, key) {
    ac[key] = true;
    return ac;
  }, {});

  var beginMoveEvent = {
    clientX: event.clientX,
    clientY: event.clientY,
    target: this,
    originEvent: event,
    prevented: false,
    preventDefault: function preventDefault() {
      this.prevented = true;
    },
    option: option,
    type: 'beginmove'
  };
  this.emit('beginmove', beginMoveEvent);
  if (beginMoveEvent.prevented) return;
  ResizeBox_$(document.body).on('mousemove', this.eventHandler.mouseMoveBody).on('mouseup', this.eventHandler.mouseFinishBody).on('mouseleave', this.eventHandler.mouseFinishBody).addClass('as-resize-box-overiding').addClass(this._optionNames.join('-'));
};

ResizeBox.eventHandler.mouseMoveBody = function (event) {
  event.preventDefault();
  var beginMoveEvent = {
    clientX: event.clientX,
    clientY: event.clientY,
    target: this,
    originEvent: event,
    type: 'moving'
  };
  this.emit('moving', beginMoveEvent);
};

ResizeBox.eventHandler.mouseFinishBody = function (event) {
  event.preventDefault();
  ResizeBox_$(document.body).off('mousemove', this.eventHandler.mouseMoveBody).off('mouseup', this.eventHandler.mouseFinishBody).off('mouseleave', this.eventHandler.mouseFinishBody).removeClass('as-resize-box-overiding').removeClass(this._optionNames.join('-'));
  ;
  var endMoveEvent = {
    clientX: event.clientX,
    clientY: event.clientY,
    target: this,
    originEvent: event,
    type: 'endmove'
  };
  this.emit('endmove', endMoveEvent);
  this._optionNames = undefined;
};

FCore.install('resizebox', ResizeBox);
/* harmony default export */ var dom_ResizeBox = (ResizeBox);
// EXTERNAL MODULE: ./css/hline.css
var hline = __webpack_require__(94);

// CONCATENATED MODULE: ./js/dom/HLine.js


var HLine_$ = FCore.$;
var HLine_ = FCore._;

function HLine() {
  var res = HLine_({
    "class": 'as-hline',
    child: {
      "class": 'as-hline-body',
      child: ['.as-hline-dot.left', '.as-hline-dot.right']
    }
  });

  return res;
}

FCore.install('hline', HLine);
/* harmony default export */ var dom_HLine = (HLine);
// EXTERNAL MODULE: ./css/vline.css
var vline = __webpack_require__(96);

// CONCATENATED MODULE: ./js/dom/VLine.js


var VLine_$ = FCore.$;
var VLine_ = FCore._;

function VLine() {
  var res = VLine_({
    "class": 'as-vline',
    child: {
      "class": 'as-vline-body',
      child: ['.as-vline-dot.top', '.as-vline-dot.bottom']
    }
  });

  return res;
}

FCore.install('vline', VLine);
/* harmony default export */ var dom_VLine = (VLine);
// EXTERNAL MODULE: ./css/hruler.css
var hruler = __webpack_require__(98);

// CONCATENATED MODULE: ./js/dom/HRuler.js



var HRuler_ = FCore._;
var HRuler_$ = FCore.$;

function HRuler() {
  var res = HRuler_({
    "class": 'as-hruler'
  });

  res.$attachHook = HRuler_('attachhook').on('error', function () {
    this.updateSize = res.update.bind(res);
    Dom["a" /* default */].addToResizeSystem(this);
    this.updateSize();
  }).addTo(res);
  res.$lines = [];
  res.$numbers = [];
  res._viewingNumberCount = 0;
  res._viewingLineCount = 0;
  res._spacing = 10;
  res._major = 10;
  res.$mesureTarget = null;
  return res;
}

HRuler.prototype.mesureElement = function (elt) {
  if (typeof elt == "string") elt = HRuler_$(elt);
  this.$mesureTarget = elt;
};

HRuler.prototype.update = function () {
  var fontSize = this.getFontSize();
  var mesureBound;
  var bound = this.getBoundingClientRect();
  var contentBound = {
    left: bound.left + 1,
    right: bound.right - 1,
    top: bound.top + 1,
    bottom: bound.bottom - 1,
    width: bound.width - 2,
    height: bound.height - 2
  };

  if (this.$mesureTarget) {
    mesureBound = this.$mesureTarget.getBoundingClientRect();
  } else {
    mesureBound = contentBound;
  }

  var leftOfset = (mesureBound.left - contentBound.left) % this._spacing;
  if (leftOfset < 0) leftOfset += this._spacing;
  var lineIndexOfset = Math.round((contentBound.left - mesureBound.left + leftOfset) / this._spacing);
  var lineCount = Math.floor((contentBound.width - leftOfset) / this._spacing) + 1;

  while (this.$lines.length < lineCount) {
    this.$lines.push(HRuler_('.as-hruler-line'));
  }

  var i;
  var lineElt;

  for (i = 0; i < lineCount; ++i) {
    lineElt = this.$lines[i];

    if ((i + lineIndexOfset) % this._major == 0) {
      lineElt.addClass('major');
    } else {
      lineElt.removeClass('major');
    }

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

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

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

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

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

  var numberElt;
  var number;
  var majorLeftOfset = leftOfset;

  if (lineIndexOfset > 0) {
    majorLeftOfset += (this._major - lineIndexOfset % this._spacing) * this._spacing;
  }

  for (i = 0; i < numberCount; ++i) {
    number = (Math.ceil(lineIndexOfset / this._major) + i) * this._spacing * this._major;
    numberElt = this.$numbers[i];

    if (numberElt.__cacheNumber__ != number) {
      numberElt.__cacheNumber__ = number;
      numberElt.innerHTML = number + '';
    }

    numberElt.addStyle('left', majorLeftOfset + this._major * i * this._spacing - 0.7 * 2.5 * fontSize + 'px');
  }

  while (this._viewingNumberCount < numberCount) {
    this.$numbers[this._viewingNumberCount++].addTo(this);
  }

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

HRuler.property = {};
HRuler.property.major = {
  set: function set(value) {
    if (value > 0) {
      this._major = value;
      this.update();
    }
  },
  get: function get() {
    return this._major;
  }
};
HRuler.property.spacing = {
  set: function set(value) {
    if (value > 0) {
      this._spacing = value;
      this.update();
    }
  },
  get: function get() {
    return this._spacing;
  }
};
FCore.install('hruler', HRuler);
/* harmony default export */ var dom_HRuler = (HRuler);
// EXTERNAL MODULE: ./css/vruler.css
var vruler = __webpack_require__(100);

// CONCATENATED MODULE: ./js/dom/VRuler.js



var VRuler_ = FCore._;
var VRuler_$ = FCore.$;

function VRuler() {
  var res = VRuler_({
    "class": 'as-vruler'
  });

  res.$attachHook = VRuler_('attachhook').on('error', function () {
    this.updateSize = res.update.bind(res);
    Dom["a" /* default */].addToResizeSystem(this);
    this.updateSize();
  }).addTo(res);
  res.$lines = [];
  res.$numbers = [];
  this.$mesureTarget = undefined;
  res._viewingNumberCount = 0;
  res._viewingLineCount = 0;
  res._spacing = 10;
  res._major = 10;
  return res;
}

VRuler.prototype.mesureElement = function (elt) {
  if (typeof elt == "string") elt = VRuler_$(elt);
  this.$mesureTarget = elt;
};

VRuler.prototype.update = function () {
  var fontSize = this.getFontSize();
  var mesureBound;
  var bound = this.getBoundingClientRect();
  var contentBound = {
    left: bound.left + 1,
    right: bound.right - 1,
    top: bound.top + 1,
    bottom: bound.bottom - 1,
    width: bound.width - 2,
    height: bound.height - 2
  };

  if (this.$mesureTarget) {
    mesureBound = this.$mesureTarget.getBoundingClientRect();
  } else {
    mesureBound = contentBound;
  }

  var topOfset = (mesureBound.top - contentBound.top) % this._spacing;
  if (topOfset < 0) topOfset += this._spacing;
  var lineIndexOfset = Math.round((contentBound.top - mesureBound.top + topOfset) / this._spacing);
  var lineCount = Math.floor((contentBound.height - topOfset) / this._spacing) + 1;

  while (this.$lines.length < lineCount) {
    this.$lines.push(VRuler_('.as-vruler-line'));
  }

  var i;
  var lineElt;

  for (i = 0; i < lineCount; ++i) {
    lineElt = this.$lines[i];

    if ((i + lineIndexOfset) % this._major == 0) {
      lineElt.addClass('major');
    } else {
      lineElt.removeClass('major');
    }

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

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

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

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

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

  var numberElt;
  var number;
  var majorTopOfset = topOfset;

  if (lineIndexOfset > 0) {
    majorTopOfset += (this._major - lineIndexOfset % this._spacing) * this._spacing;
  }

  for (i = 0; i < numberCount; ++i) {
    number = (Math.ceil(lineIndexOfset / this._major) + i) * this._spacing * this._major;
    numberElt = this.$numbers[i];

    if (numberElt.__cacheNumber__ != number) {
      numberElt.__cacheNumber__ = number;
      numberElt.innerHTML = number + '';
    }

    numberElt.addStyle('top', majorTopOfset + this._major * i * this._spacing - 0.7 * 0.5 * fontSize + 'px');
  }

  while (this._viewingNumberCount < numberCount) {
    this.$numbers[this._viewingNumberCount++].addTo(this);
  }

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

VRuler.property = {};
VRuler.property.major = {
  set: function set(value) {
    if (value > 0) {
      this._major = value;
      this.update();
    }
  },
  get: function get() {
    return this._major;
  }
};
VRuler.property.spacing = {
  set: function set(value) {
    if (value > 0) {
      this._spacing = value;
      this.update();
    }
  },
  get: function get() {
    return this._spacing;
  }
};
FCore.install('vruler', VRuler);
/* harmony default export */ var dom_VRuler = (VRuler);
// CONCATENATED MODULE: ./js/editor/LayoutEditor.js
function LayoutEditor_typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { LayoutEditor_typeof = function _typeof(obj) { return typeof obj; }; } else { LayoutEditor_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return LayoutEditor_typeof(obj); }












var LayoutEditor_ = FCore._;
var LayoutEditor_$ = FCore.$;

function LayoutEditor() {
  AppPattern_Context.call(this);
  core_Assembler.call(this);
  EventEmitter["a" /* default */].call(this);
  this.addConstructor('RelativeLayout', layouts_RelativeLayout);
  this.rootLayout = null;
  this.snapshots = [];
  this.snapshotsIndex = 0;
  this._changeCommited = true;
  this.mode = 'design';
}

Object.defineProperties(LayoutEditor.prototype, Object.getOwnPropertyDescriptors(AppPattern_Context.prototype));
Object.defineProperties(LayoutEditor.prototype, Object.getOwnPropertyDescriptors(core_Assembler.prototype));
Object.defineProperties(LayoutEditor.prototype, Object.getOwnPropertyDescriptors(EventEmitter["a" /* default */].prototype));
LayoutEditor.prototype.constructor = LayoutEditor;
LayoutEditor.prototype.MODE_VALUE = ['design', 'interact'];
LayoutEditor.prototype.MODE_CLASS_NAMES = {
  design: 'mode-design',
  interact: 'mode-interact'
};

LayoutEditor.prototype.notifyChanged = function () {
  this._changeCommited = false;
};

LayoutEditor.prototype.commitChanged = function () {
  if (!this._changeCommited) {
    //todo something
    this.emit('change', {
      type: 'change',
      layoutEditor: this
    }, this);
  }
};

LayoutEditor.prototype.getView = function () {
  if (this.$view) return this.$view;
  this.$view = LayoutEditor_({
    "class": ['as-layout-editor'].concat([this.MODE_CLASS_NAMES[this.mode]]),
    child: [{
      "class": 'as-layout-editor-vrule-container',
      child: 'vruler'
    }, {
      "class": 'as-layout-editor-hrule-container',
      child: 'hruler'
    }, {
      "class": 'as-layout-editor-background-container'
    }, {
      "class": ["as-layout-editor-space-container", 'absol-bscroller'],
      child: {
        "class": 'as-layout-editor-space',
        child: [{
          "class": 'as-layout-editor-layout-container',
          extendEvent: 'contextmenu',
          on: {
            contextmenu: this.ev_contextMenuLayout.bind(this)
          }
        }, {
          "class": 'as-layout-editor-forceground-container',
          child: '.as-layout-editor-forceground',
          extendEvent: 'contextmenu',
          on: {
            contextmenu: this.ev_contextMenuForceGround.bind(this)
          }
        }]
      }
    }]
  });
  var self = this;
  this.$attachHook = LayoutEditor_('attachhook').on('error', function () {
    this.updateSize = self.updateSize.bind(self);
    Dom["a" /* default */].addToResizeSystem(this);
    self.updateSize();
  }).addTo(this.$view);
  this.$hruler = LayoutEditor_$('hruler', this.$view);
  this.$hruler.mesureElement(LayoutEditor_$('.as-relative-layout', this.$view));
  this.$spaceCtn = LayoutEditor_$('.as-layout-editor-space-container', this.$view).on('scroll', this.ev_layoutCtnScroll.bind(this));
  this.$vruler = LayoutEditor_$('vruler', this.$view);
  this.$vruler.mesureElement(LayoutEditor_$('.as-relative-layout', this.$view));
  this.$layoutCtn = LayoutEditor_$('.as-layout-editor-layout-container', this.$view);
  this.$contextCaptor = LayoutEditor_('contextcaptor').addTo(this.$view).attachTo(this.$view); // this.$componentMenuTrigger = $('.as-layout-editor-new-component-menu-trigger', this.$view)
  //     .on('click', this.getMenuComponentItems.bind(this), true);//to update
  // this._componentMenuOption = QuickMenu.showWhenClick(this.$componentMenuTrigger, {
  //     items: this.getMenuComponentItems()
  // }, 'auto', this.ev_menuComponent.bind(this));
  // this.$background = $('.as-layout-editor-background', this.$view);

  this.$forceground = LayoutEditor_$('.as-layout-editor-forceground', this.$view).on('click', this.ev_clickForceground.bind(this));
  this.$resizeBox = LayoutEditor_('resizebox').on('beginmove', this.ev_beginMove.bind(this)).on('moving', this.ev_moving.bind(this)).on('endmove', this.ev_endMoving.bind(this));
  this.$leftAlignLine = LayoutEditor_('hline');
  this.$rightAlignLine = LayoutEditor_('hline');
  this.$topAlignLine = LayoutEditor_('vline');
  this.$bottomAlignLine = LayoutEditor_('vline');
  return this.$view;
};

LayoutEditor.prototype.ev_layoutCtnScroll = function () {
  this.updateRuler();
};

LayoutEditor.prototype.ev_beginMove = function (event) {
  var bound = this.$forceground.getBoundingClientRect();
  this._movingStateData = {
    x0: event.clientX - bound.left,
    y0: event.clientY - bound.top,
    dx: 0,
    dy: 0,
    option: event.option,
    aceptStyleNames: this._activatedCompnent.getAceptStyleNames(),
    style0: Object.assign({}, this._activatedCompnent.style),
    comp: this._activatedCompnent
  };
};

LayoutEditor.prototype.ev_moving = function (event) {
  var movingData = this._movingStateData;
  var bound = this.$forceground.getBoundingClientRect();
  var x = event.clientX - bound.left;
  var y = event.clientY - bound.top;
  movingData.dx = x - movingData.x0;
  movingData.dy = y - movingData.y0; //TODO; size may be invalid

  if (movingData.aceptStyleNames.left && (movingData.option.left || movingData.option.body)) {
    movingData.comp.setStyle('left', movingData.style0.left + movingData.dx);
    this.notifyChanged();
  }

  if (movingData.aceptStyleNames.right && (movingData.option.right || movingData.option.body)) {
    movingData.comp.setStyle('right', movingData.style0.right - movingData.dx);
    this.notifyChanged();
  }

  if (movingData.aceptStyleNames.width) {
    if (movingData.option.left) {
      if (!movingData.aceptStyleNames.left && !movingData.aceptStyleNames.right) {
        movingData.comp.setStyle('width', Math.max(0, movingData.style0.width - movingData.dx * 2)); //center align
      } else {
        movingData.comp.setStyle('width', Math.max(movingData.style0.width - movingData.dx));
      }

      this.notifyChanged();
    }

    if (movingData.option.right) {
      if (!movingData.aceptStyleNames.left && !movingData.aceptStyleNames.right) {
        movingData.comp.setStyle('width', Math.max(0, movingData.style0.width + movingData.dx * 2)); //center align
      } else {
        movingData.comp.setStyle('width', Math.max(0, movingData.style0.width + movingData.dx));
      }

      this.notifyChanged();
    }
  }

  if (movingData.aceptStyleNames.top && (movingData.option.top || movingData.option.body)) {
    movingData.comp.setStyle('top', movingData.style0.top + movingData.dy);
    this.notifyChanged();
  }

  if (movingData.aceptStyleNames.bottom && (movingData.option.bottom || movingData.option.body)) {
    movingData.comp.setStyle('bottom', movingData.style0.bottom - movingData.dy);
    this.notifyChanged();
  }

  if (movingData.aceptStyleNames.height) {
    if (movingData.option.top) {
      if (!movingData.aceptStyleNames.top && !movingData.aceptStyleNames.bottom) {
        movingData.comp.setStyle('height', Math.max(0, movingData.style0.height - movingData.dy * 2));
      } else {
        movingData.comp.setStyle('height', Math.max(0, movingData.style0.height - movingData.dy));
      }

      this.notifyChanged();
    }

    if (movingData.option.bottom) {
      if (!movingData.aceptStyleNames.top && !movingData.aceptStyleNames.bottom) {
        movingData.comp.setStyle('height', Math.max(0, movingData.style0.height + movingData.dy * 2));
      } else {
        movingData.comp.setStyle('height', Math.max(0, movingData.style0.height + movingData.dy));
      }

      this.notifyChanged();
    }
  }

  this.updateAnchorPosition();
};

LayoutEditor.prototype.ev_endMoving = function (event) {
  this._movingStateData = undefined;
  this.commitChanged();
};

LayoutEditor.prototype.ev_clickForceground = function (event) {
  if (event.target != this.$forceground) return;
  var hitComponent;

  function visit(node) {
    var bound = node.view.getBoundingClientRect();

    if (bound.left <= event.clientX && bound.right >= event.clientX && bound.top <= event.clientY && bound.bottom >= event.clientY) {
      hitComponent = node;
    }

    if (node.children) node.children.forEach(visit);
  }

  visit(this.rootLayout);

  if (hitComponent) {
    this.activeComponent(hitComponent);
  }
};

LayoutEditor.prototype.ev_contextMenuForceGround = function (event) {
  this.ev_clickForceground(event);
  var self = this;
  var activatedComponent = this._activatedCompnent;

  if (activatedComponent) {
    if (activatedComponent == this.rootLayout) {
      event.showContextMenu({
        items: [{
          text: 'New',
          icon: 'span.mdi.mdi-plus',
          cmd: 'new' // items: self.getMenuComponentItems()

        }, {
          icon: 'span.mdi.mdi-eraser',
          text: 'Clear',
          cmd: 'clear'
        }, {
          text: "Interact Mode",
          cmd: 'interact',
          icon: "span.mdi.mdi-android-auto.mdi-rotate-90"
        }]
      }, function (menuEvent) {
        var cmd = menuEvent.menuItem.cmd;

        switch (cmd) {
          case 'clear':
            self.clearRootLayout();
            break;

          case 'new':
            setTimeout(self.$componentMenuTrigger.click.bind(self.$componentMenuTrigger), 10);
            break;

          case 'interact':
            self.setMode('interact');
            break;
        }
      });
    } else {
      event.showContextMenu({
        items: [{
          text: 'Edit Attributes',
          icon: 'span.mdi.mdi-table-edit',
          cmd: 'attributes-edit' // items: self.getMenuComponentItems()

        }, {
          text: 'Edit Style',
          icon: 'span.mdi.mdi-square-edit-outline',
          cmd: 'style-edit' // items: self.getMenuComponentItems()

        }, {
          icon: 'span.mdi.mdi-delete-variant',
          text: 'Delete',
          cmd: 'delete',
          extendStyle: {
            color: 'red'
          }
        }]
      }, function (menuEvent) {
        var cmd = menuEvent.menuItem.cmd;

        switch (cmd) {
          case 'delete':
            activatedComponent.parent.removeChild(activatedComponent);
            self.activeComponent(undefined);
            break;

          case 'attributes-edit':
            break;
        }
      });
    }
  }
};

LayoutEditor.prototype.ev_contextMenuLayout = function (event) {
  var self = this;
  event.showContextMenu({
    items: [{
      text: 'Design Mode',
      icon: 'span.mdi.mdi-pencil-box-multiple-outline',
      cmd: 'design'
    }]
  }, function (menuEvent) {
    var cmd = menuEvent.menuItem.cmd;

    switch (cmd) {
      case 'design':
        self.setMode('design');
        break;
    }
  });
};

LayoutEditor.prototype.ev_menuComponent = function (item) {
  var componentConstructor = item.componentConstructor;
  var newComponent = new componentConstructor();
  this.rootLayout.addChild(newComponent);
  this.activeComponent(newComponent);
};

LayoutEditor.prototype.clearRootLayout = function () {
  this._activatedCompnent = undefined;
  this.rootLayout.clearChild();
  this.updateAnchor();
};

LayoutEditor.prototype.activeComponent = function (comp) {
  this._activatedCompnent = comp;
  this.updateAnchor();
};

LayoutEditor.prototype.updateAnchor = function () {
  var comp = this._activatedCompnent;

  if (comp && comp != this.rootLayout) {
    this.$resizeBox.addTo(this.$forceground);
    var anchorAceptStyle = comp.anchor.getAceptStyleNames();

    if (anchorAceptStyle.top) {
      this.$topAlignLine.addTo(this.$forceground);
    } else {
      this.$topAlignLine.remove();
    }

    if (anchorAceptStyle.bottom) {
      this.$bottomAlignLine.addTo(this.$forceground);
    } else {
      this.$bottomAlignLine.remove();
    }

    if (anchorAceptStyle.left) {
      this.$leftAlignLine.addTo(this.$forceground);
    } else {
      this.$leftAlignLine.remove();
    }

    if (anchorAceptStyle.right) {
      this.$rightAlignLine.addTo(this.$forceground);
    } else {
      this.$rightAlignLine.remove();
    }
  } else {
    this.$resizeBox.remove();
    this.$leftAlignLine.remove();
    this.$rightAlignLine.remove();
    this.$topAlignLine.remove();
    this.$bottomAlignLine.remove();
  }

  this.updateAnchorPosition();
};

LayoutEditor.prototype.updateAnchorPosition = function () {
  var comp = this._activatedCompnent;

  if (comp && comp != this.rootLayout) {
    var bound = this.$forceground.getBoundingClientRect();
    var compBound = comp.view.getBoundingClientRect();
    this.$resizeBox.addStyle({
      left: compBound.left - bound.left + 'px',
      top: compBound.top - bound.top + 'px',
      width: compBound.width + 'px',
      height: compBound.height + 'px'
    }).addTo(this.$forceground);
    if (this.$leftAlignLine.parentNode) this.$leftAlignLine.addStyle({
      left: compBound.left - bound.left - comp.style.left + 'px',
      width: comp.style.left + 'px',
      top: compBound.top - bound.top + compBound.height / 2 + 'px'
    });
    if (this.$rightAlignLine.parentNode) this.$rightAlignLine.addStyle({
      left: compBound.right - bound.left + 'px',
      width: comp.style.right + 'px',
      top: compBound.top - bound.top + compBound.height / 2 + 'px'
    });
    if (this.$topAlignLine.parentNode) this.$topAlignLine.addStyle({
      top: compBound.top - bound.top - comp.style.top + 'px',
      height: comp.style.top + 'px',
      left: compBound.left - bound.left + compBound.width / 2 + 'px'
    });
    if (this.$bottomAlignLine.parentNode) this.$bottomAlignLine.addStyle({
      top: compBound.bottom - bound.top + 'px',
      height: comp.style.bottom + 'px',
      left: compBound.left - bound.left + compBound.width / 2 + 'px'
    });
  }
};

LayoutEditor.prototype.updateRuler = function () {
  this.$hruler.update();
  this.$vruler.update();
};

LayoutEditor.prototype.updateSize = function () {
  this.updateRuler(); // this.updateAnchorPosition();
};

LayoutEditor.prototype.setData = function (data) {
  var self = this;

  function visit(node) {
    var constructor = self.constructors[node.tag];
    if (!constructor) throw new Error(node.tag + ' constructor not found!');
    var comp = new constructor();
    var style = node.style;
    if (LayoutEditor_typeof(style) == 'object') for (var styleName in style) {
      comp.setStyle(styleName, style[styleName]);
    }
    var attributes = node.attributes;
    if (LayoutEditor_typeof(attributes) == 'object') for (var attributeName in attributes) {
      comp.setAttribute(attributeName, attributes[attributeName]);
    }

    if (node.children && node.children.length > 0) {
      node.children.forEach(function (cNode) {
        comp.addChild(visit(cNode));
      });
    }

    return comp;
  }

  this.rootLayout = visit(data);
  this.$layoutCtn.addChild(this.rootLayout.view);
  this.rootLayout.onAttached(this);
  this.$vruler.mesureElement(this.rootLayout.view);
  this.$hruler.mesureElement(this.rootLayout.view);
};

LayoutEditor.prototype.getData = function (data) {
  if (this.rootLayout) return this.rootLayout.getData();
  return null;
};

LayoutEditor.prototype.getMenuComponentItems = function () {
  var self = this;
  this._menuComponentItems = this._menuComponentItems || [];

  this._menuComponentItems.splice(0, this._menuComponentItems.length);

  var items = Object.keys(this.constructors).map(function (key) {
    var constructor = self.constructors[key];
    return {
      text: key,
      icon: constructor.prototype.menuIcon,
      cmd: 'component',
      componentConstructor: constructor,
      componentTag: key
    };
  });

  this._menuComponentItems.push.apply(this._menuComponentItems, items);

  return this._menuComponentItems;
};

LayoutEditor.prototype.setMode = function (mode) {
  if (this.MODE_VALUE.indexOf(mode) < 0 || this.mode == mode) return;

  if (this.$view) {
    this.$view.removeClass(this.MODE_CLASS_NAMES[this.mode]).addClass(this.MODE_CLASS_NAMES[mode]);
  }

  this.mode = mode;
};

/* harmony default export */ var editor_LayoutEditor = (LayoutEditor);
// EXTERNAL MODULE: ./css/formeditor.css
var formeditor = __webpack_require__(102);

// CONCATENATED MODULE: ./js/components/NumberInput.js


var NumberInput_ = FCore._;

function NumberInput() {
  core_ScalableComponent.call(this);
}

Object.defineProperties(NumberInput.prototype, Object.getOwnPropertyDescriptors(core_ScalableComponent.prototype));
NumberInput.prototype.constructor = NumberInput;
NumberInput.prototype.tag = "NumberInput";
NumberInput.prototype.menuIcon = ['<svg width="24" height="24" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">', '<path d = "m17 7h5v10h-5v2a1 1 0 0 0 1 1h2v2h-2.5c-0.55 0-1.5-0.45-1.5-1 0 0.55-0.95 1-1.5 1h-2.5v-2h2a1 1 0 0 0 1-1v-14a1 1 0 0 0-1-1h-2v-2h2.5c0.55 0 1.5 0.45 1.5 1 0-0.55 0.95-1 1.5-1h2.5v2h-2a1 1 0 0 0-1 1v2m-15 0h11v2h-9v6h9v2h-11v-10m18 8v-6h-3v6h3z" />', '<g style="fill-rule:evenodd;fill:#141414;stroke-linejoin:round" aria-label="00">', '<path d="m5.595 13.93 0.3453 0.3299q0.5831-0.6522 0.9782-1.477 0.445-0.9322 0.445-1.696 0-0.656-0.2148-1.366l-0.1956 0.02302q-0.6598 0.5678-1.036 1.68-0.3299 0.9744-0.3299 1.972 0 0.06138 0.00767 0.2647 0.00384 0.1688 0 0.2685zm1.02-4.853 0.4028 0.3031q0.2494-0.06905 0.4949-0.1419 0.3568-0.09974 0.4719-0.09974 0.1688 0 0.3299 0.5025 0.165 0.514 0.165 1.216 0 1.385-1.389 3.077-0.8209 1.001-1.254 1.001-0.2954 0-0.61-0.3376-0.7097-0.7596-0.7097-1.531 0-1.174 0.5409-2.279 0.5908-1.208 1.557-1.711z" style="fill:#141414;stroke-width:2.616" />', '<path d="m9.969 13.93 0.3453 0.3299q0.5831-0.6522 0.9782-1.477 0.445-0.9322 0.445-1.696 0-0.656-0.2148-1.366l-0.1956 0.02302q-0.6598 0.5678-1.036 1.68-0.3299 0.9744-0.3299 1.972 0 0.06138 0.00767 0.2647 0.00384 0.1688 0 0.2685zm1.02-4.853 0.4028 0.3031q0.2494-0.06905 0.4949-0.1419 0.3568-0.09974 0.4719-0.09974 0.1688 0 0.3299 0.5025 0.165 0.514 0.165 1.216 0 1.385-1.389 3.077-0.8209 1.001-1.254 1.001-0.2954 0-0.61-0.3376-0.7097-0.7596-0.7097-1.531 0-1.174 0.5409-2.279 0.5908-1.208 1.557-1.711z" style="fill:#141414;stroke-width:2.616" />', '</g>', '</svg>'].join('');
NumberInput.prototype.SUPPORT_ATTRIBUTE_NAMES = ['value'];
NumberInput.prototype.SUPPORT_EVENT_NAMES = ['change'];

NumberInput.prototype.onCreated = function () {
  core_ScalableComponent.prototype.onCreated.call(this);
  var self = this;
  this.view.on('keyup', function () {
    var lastValue = self.attributes.value;

    if (this.value != lastValue) {
      self.attributes.value = this.value;
      self.emit('change', this.value, self);
    }
  }).on("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];
    }
  }).on('keydown', function (event) {
    var key = event.key;

    if (key && key.length == 1) {
      if (key.match(/[0-9\.]/)) {
        if (key == '.' && this.value.indexOf('.') >= 0) event.preventDefault();
      } else event.preventDefault();
    }
  });
};

NumberInput.prototype.render = function () {
  return NumberInput_('input[type="number"]');
};

NumberInput.prototype.handleAttributeValue = function (value) {
  this.view.value = value;
};

/* harmony default export */ var components_NumberInput = (NumberInput);
// CONCATENATED MODULE: ./js/core/ContentScalelessComponent.js



var ContentScalelessComponent_ = FCore._;
var ContentScalelessComponent_$ = FCore.$;

function ContentScalelessComponent() {
  core_ScalableComponent.call(this);
}

Object.defineProperties(ContentScalelessComponent.prototype, Object.getOwnPropertyDescriptors(core_ScalableComponent.prototype));
ContentScalelessComponent.prototype.constructor = ContentScalelessComponent;
ContentScalelessComponent.prototype.tag = "ContentScalelessComponent";

ContentScalelessComponent.prototype.onCreated = function () {
  this.$cell = ContentScalelessComponent_$('.as-component-content-scaleless-cell', this.view);
  this.$content = this.$cell.childNodes[0];
  core_ScalableComponent.prototype.onCreated.call(this);
};

ContentScalelessComponent.prototype.render = function () {
  return ContentScalelessComponent_({
    "class": 'as-component-content-scaleless',
    child: {
      "class": 'as-component-content-scaleless-cell',
      child: this.renderContent()
    }
  });
};

ContentScalelessComponent.prototype.renderContent = function () {
  throw new Error('Not Implement!');
};

ContentScalelessComponent.prototype.handleStyleTextHAlign = function (value) {
  this.view.addStyle('text-align', value);
};

ContentScalelessComponent.prototype.handleStyleTextVAlign = function (value) {
  if (value == 'center') value = 'middle';
  this.$cell.addStyle('vertical-align', value);
};

/* harmony default export */ var core_ContentScalelessComponent = (ContentScalelessComponent);
// CONCATENATED MODULE: ./js/components/Label.js



var Label_ = FCore._;
var Label_$ = FCore.$;

function Label() {
  core_ContentScalelessComponent.call(this);
}

Object.defineProperties(Label.prototype, Object.getOwnPropertyDescriptors(core_ContentScalelessComponent.prototype));
Label.prototype.constructor = Label;
Label.prototype.tag = "Label";
Label.prototype.menuIcon = 'span.mdi.mdi-label-outline';
Label.prototype.SUPPORT_ATTRIBUTE_NAMES = ['value'];
Label.prototype.SUPPORT_EVENT_NAMES = ['change'];

Label.prototype.renderContent = function () {
  return Label_('label');
};

Label.prototype.handleAttributeText = function (value) {
  this.$content.clearChild().addChild(Label_({
    text: value
  }));
};

/* harmony default export */ var components_Label = (Label);
// CONCATENATED MODULE: ./js/components/TextArea.js


var TextArea_ = FCore._;

function TextArea() {
  components_TextInput.call(this);
}

Object.defineProperties(TextArea.prototype, Object.getOwnPropertyDescriptors(components_TextInput.prototype));
TextArea.prototype.constructor = TextArea;
TextArea.prototype.tag = "TextArea";
TextArea.prototype.menuIcon = "span.mdi.mdi-textarea";

TextArea.prototype.render = function () {
  return TextArea_('textarea.absol-bscroller');
};

/* harmony default export */ var components_TextArea = (TextArea);
// CONCATENATED MODULE: ./js/components/Checkbox.js



var Checkbox_ = FCore._;
var Checkbox_$ = FCore.$;

function Checkbox_CheckBox() {
  core_ContentScalelessComponent.call(this);
}

Object.defineProperties(Checkbox_CheckBox.prototype, Object.getOwnPropertyDescriptors(core_ContentScalelessComponent.prototype));
Checkbox_CheckBox.prototype.constructor = Checkbox_CheckBox;
Checkbox_CheckBox.prototype.tag = "CheckBox";
Checkbox_CheckBox.prototype.menuIcon = "span.mdi.mdi-check-box-outline";

Checkbox_CheckBox.prototype.preInit = function () {
  core_ContentScalelessComponent.prototype.preInit.call(this);
  this.style.width = 18;
  this.style.height = 18;
  this.style.vAlign = 'top';
  this.style.hAlign = 'left';
  this.style.textHAlign = 'center';
  this.style.textVAlign = 'center';
};

Checkbox_CheckBox.prototype.renderContent = function () {
  return Checkbox_('checkboxbutton');
};

Checkbox_CheckBox.prototype.handleAttributeChecked = function (value) {
  this.$content.checked = !!value;
};

Checkbox_CheckBox.prototype.handleStyleWidth = function (value) {
  this.style.width = value >= 18 ? value : 18;
  core_ContentScalelessComponent.prototype.handleStyleWidth.call(this, value);
};

Checkbox_CheckBox.prototype.handleStyleHeight = function (value) {
  this.style.height = value >= 18 ? value : 18;
  core_ContentScalelessComponent.prototype.handleStyleHeight.call(this, value);
};

/* harmony default export */ var Checkbox = (Checkbox_CheckBox);
// CONCATENATED MODULE: ./js/components/Radio.js



var components_Radio_ = FCore._;
var components_Radio_$ = FCore.$;

function components_Radio_Radio() {
  core_ContentScalelessComponent.call(this);
}

Object.defineProperties(components_Radio_Radio.prototype, Object.getOwnPropertyDescriptors(core_ContentScalelessComponent.prototype));
components_Radio_Radio.prototype.constructor = components_Radio_Radio;
components_Radio_Radio.prototype.tag = "Radio";
components_Radio_Radio.prototype.menuIcon = "span.mdi.mdi-radiobox-marked";

components_Radio_Radio.prototype.preInit = function () {
  core_ContentScalelessComponent.prototype.preInit.call(this);
  this.style.width = 18;
  this.style.height = 18;
  this.style.vAlign = 'top';
  this.style.hAlign = 'left';
  this.style.textHAlign = 'center';
  this.style.textVAlign = 'center';
};

components_Radio_Radio.prototype.renderContent = function () {
  return components_Radio_('radiobutton');
};

components_Radio_Radio.prototype.handleAttributeChecked = function (value) {
  this.$content.checked = !!value;
};

components_Radio_Radio.prototype.handleStyleWidth = function (value) {
  this.style.width = value >= 18 ? value : 18;
  core_ContentScalelessComponent.prototype.handleStyleWidth.call(this, value);
};

components_Radio_Radio.prototype.handleStyleHeight = function (value) {
  this.style.height = value >= 18 ? value : 18;
  core_ContentScalelessComponent.prototype.handleStyleHeight.call(this, value);
};

/* harmony default export */ var components_Radio = (components_Radio_Radio);
// CONCATENATED MODULE: ./js/components/ComboBox.js


var ComboBox_ = FCore._;

function ComboBox() {
  core_ScalableComponent.call(this);
}

Object.defineProperties(ComboBox.prototype, Object.getOwnPropertyDescriptors(core_ScalableComponent.prototype));
ComboBox.prototype.constructor = ComboBox;
ComboBox.prototype.tag = "ComboBox";
ComboBox.prototype.menuIcon = ['<svg width="24" height="24" viewBox="0 0 24 24">', '<path fill="#000000" d="M18,9V10.5L12,16.5L6,10.5V9H18M12,13.67L14.67,11H9.33L12,13.67Z" />', '<path fill="#000000" d="M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M5,5V19H19V5H5Z" />', '</svg>'].join('');

ComboBox.prototype.onCreated = function () {
  core_ScalableComponent.prototype.onCreated.call(this);
  var self = this;
  this.view.on('minwidthchange', function (event) {
    if (!(self.style.width > event.value)) {
      self.setStyle('width', event.value);
    }
  });
};

ComboBox.prototype.render = function () {
  return ComboBox_('selectmenu');
};

ComboBox.prototype.handleAttributeList = function (value) {
  this.view.items = value;
};

ComboBox.prototype.handleAttributeValue = function (value) {
  this.view.value = value;
};

/* harmony default export */ var components_ComboBox = (ComboBox);
// CONCATENATED MODULE: ./js/components/Text.js


var Text_ = FCore._;

function Text() {
  core_ScalableComponent.call(this);
}

Object.defineProperties(Text.prototype, Object.getOwnPropertyDescriptors(core_ScalableComponent.prototype));
Text.prototype.constructor = Text;
Text.prototype.tag = "Text";
Text.prototype.menuIcon = "span.mdi.mdi-textarea";

Text.prototype.render = function () {
  return Text_('div.absol-bscroller');
};

Text.prototype.handleAttributeText = function (value) {
  this.view.clearChild().addChild(Text_({
    text: value
  }));
};

/* harmony default export */ var components_Text = (Text);
// CONCATENATED MODULE: ./js/editor/FormEditor.js

















var FormEditor_ = FCore._;
var FormEditor_$ = FCore.$;

function FormEditor() {
  AppPattern_Context.call(this);
  EventEmitter["a" /* default */].call(this);
  var self = this;
  this.style = {
    leftSizeWidth: 16,
    //em
    leftSizeMinWidth: 10,
    rightSizeWidth: 16,
    //em
    rightSizeMinWidth: 10
  };
  this.mLayoutEditor = new editor_LayoutEditor();
  this.mLayoutEditor.addComponent(components_DateInput);
  this.mLayoutEditor.addComponent(components_TextInput);
  this.mLayoutEditor.addComponent(components_TextArea);
  this.mLayoutEditor.addComponent(layouts_RelativeLayout);
  this.mLayoutEditor.addComponent(components_NumberInput);
  this.mLayoutEditor.addComponent(components_Label);
  this.mLayoutEditor.addComponent(Checkbox);
  this.mLayoutEditor.addComponent(components_Radio);
  this.mLayoutEditor.addComponent(components_ComboBox);
  this.mLayoutEditor.addComponent(components_Text);
  this.mLayoutEditor.on('change', function (event) {
    self.emit('change', Object.assign({
      formEditor: self
    }, event), this);
  });
}

Object.defineProperties(FormEditor.prototype, Object.getOwnPropertyDescriptors(AppPattern_Context.prototype));
Object.defineProperties(FormEditor.prototype, Object.getOwnPropertyDescriptors(EventEmitter["a" /* default */].prototype));
FormEditor.prototype.constructor = FormEditor;

FormEditor.prototype.getComponentsTree = function () {
  if (this.$compsExpTree) return this.$compExpTree;

  function toggleGroup() {
    this.status = {
      open: 'close',
      close: 'open'
    }[this.status];
  }

  this.$compsExpTree = FormEditor_({
    tag: 'exptree',
    props: {
      name: 'all',
      status: 'open'
    },
    on: {
      press: toggleGroup
    },
    child: [{
      tag: 'exptree',
      props: {
        name: 'layouts',
        status: 'open'
      },
      on: {
        press: toggleGroup
      },
      child: [{
        tag: 'exptree',
        props: {
          name: "RelativeLayout",
          icon: layouts_RelativeLayout.prototype.menuIcon
        }
      }]
    }, {
      tag: 'exptree',
      props: {
        name: 'inputs',
        status: 'open'
      },
      on: {
        press: toggleGroup
      },
      child: [{
        tag: 'exptree',
        props: {
          name: "DateInput",
          icon: components_DateInput.prototype.menuIcon
        }
      }, {
        tag: 'exptree',
        props: {
          name: "TextInput",
          icon: components_TextInput.prototype.menuIcon
        }
      }, {
        tag: 'exptree',
        props: {
          name: "TextArea",
          icon: components_TextArea.prototype.menuIcon
        }
      }, {
        tag: 'exptree',
        props: {
          name: "NumberInput",
          icon: components_NumberInput.prototype.menuIcon
        }
      }, {
        tag: 'exptree',
        props: {
          name: "ComboBox",
          icon: components_ComboBox.prototype.menuIcon
        }
      }, {
        tag: 'exptree',
        props: {
          name: "Radio",
          icon: components_Radio.prototype.menuIcon
        }
      }, {
        tag: 'exptree',
        props: {
          name: "CheckBox",
          icon: Checkbox.prototype.menuIcon
        }
      }]
    }, {
      tag: 'exptree',
      props: {
        name: "static",
        status: 'open'
      },
      on: {
        press: toggleGroup
      },
      child: [{
        tag: 'exptree',
        props: {
          name: "Label",
          icon: components_Label.prototype.menuIcon
        }
      }, {
        tag: 'exptree',
        props: {
          name: "Text",
          icon: 'span.mdi.mdi-format-color-text'
        }
      }]
    }]
  });
  return this.$compsExpTree;
};

FormEditor.prototype.getView = function () {
  if (this.$view) return this.$view;
  var self = this;
  this.$view = FormEditor_({
    "class": 'as-form-editor',
    child: [{
      "class": 'as-form-editor-left-site-container',
      child: {
        tag: 'tabview',
        "class": ['xp-tiny', 'as-form-editor-left-site'],
        child: [{
          tag: 'tabframe',
          attr: {
            name: 'Form',
            id: 'tab-form'
          }
        }, {
          tag: 'tabframe',
          "class": 'absol-bscroller',
          attr: {
            name: 'Component',
            id: 'tab-component'
          },
          child: this.getComponentsTree()
        }, {
          tag: 'tabframe',
          attr: {
            name: 'Outline',
            id: 'tab-outline'
          }
        }]
      }
    }, {
      "class": 'as-form-editor-editor-space-container'
    }, {
      "class": 'as-form-editor-right-site-container',
      child: {
        tag: 'tabview',
        "class": ['xp-tiny', 'as-form-editor-right-site'],
        child: [{
          tag: 'tabframe',
          attr: {
            name: 'Format',
            id: 'tab-format'
          }
        }, {
          tag: 'tabframe',
          attr: {
            name: 'Event',
            id: 'tab-event'
          }
        }, {
          tag: 'tabframe',
          attr: {
            name: 'All',
            id: 'tab-all'
          }
        }]
      }
    }, '.as-form-editor-resizer.vertical.left-site', '.as-form-editor-resizer.vertical.right-site']
  });
  this.$attachhook = FormEditor_('attachook').addTo(this.$view).on('error', function () {
    Dom["a" /* default */].addToResizeSystem(this);
    this.updateSize = this.updateSize || self.ev_resize.bind(this);
  });
  this.$leftSiteCtn = FormEditor_$('.as-form-editor-left-site-container', this.$view);
  this.$rightSiteCtn = FormEditor_$('.as-form-editor-right-site-container', this.$view);
  this.$editorSpaceCtn = FormEditor_$('.as-form-editor-editor-space-container', this.$view);
  this.$editorSpaceCtn.addChild(this.mLayoutEditor.getView());
  this.$leftSiteResizer = js_Draggable(FormEditor_$('.as-form-editor-resizer.vertical.left-site', this.$view)).on('predrag', this.ev_preDragLeftResizer.bind(this)).on('enddrag', this.ev_endDragLeftResizer.bind(this)).on('drag', this.ev_dragLeftResizer.bind(this));
  this.$rightSiteResizer = js_Draggable(FormEditor_$('.as-form-editor-resizer.vertical.right-site', this.$view)).on('predrag', this.ev_preDragRightResizer.bind(this)).on('enddrag', this.ev_endDragRightResizer.bind(this)).on('drag', this.ev_dragRightResizer.bind(this));
  return this.$view;
};

FormEditor.prototype.ev_resize = function () {};

FormEditor.prototype.ev_preDragLeftResizer = function (event) {
  this.$leftSiteResizer.addStyle({
    width: '100px',
    left: 'calc(' + this.style.leftSizeWidth + 'em - 50px)'
  });
  this._dragLeftMovingDate = {
    width: this.style.leftSizeWidth,
    fontSize: this.$view.getFontSize(),
    bound: this.$view.getBoundingClientRect()
  };
};

FormEditor.prototype.ev_endDragLeftResizer = function (event) {
  this.$leftSiteResizer.addStyle({
    left: 'calc(' + this.style.leftSizeWidth + 'em - 0.2em)'
  }).removeStyle('width');
  this._dragLeftMovingDate = undefined;
  delete this._dragLeftMovingDate;
};

FormEditor.prototype.ev_dragLeftResizer = function (event) {
  var dxEm = event.moveDXem;
  var newWidth = this._dragLeftMovingDate.width + dxEm;
  this.$leftSiteResizer.addStyle({
    width: '100px',
    left: 'calc(' + newWidth + 'em - 50px)'
  });
  this.style.leftSizeWidth = Math.max(this.style.leftSizeMinWidth, Math.min(this._dragLeftMovingDate.bound.width / 3 / this._dragLeftMovingDate.fontSize, newWidth));
  this.$leftSiteCtn.addStyle('width', this.style.leftSizeWidth + 'em');
  this.$editorSpaceCtn.addStyle('left', this.style.leftSizeWidth + 0.2 + 'em');
  window.dispatchEvent(new Event('resize'));
};

FormEditor.prototype.ev_preDragRightResizer = function (event) {
  this.$rightSiteResizer.addStyle({
    width: '100px',
    right: 'calc(' + this.style.rightSizeWidth + 'em - 50px)'
  });
  this._dragRightMovingDate = {
    width: this.style.rightSizeWidth,
    fontSize: this.$view.getFontSize(),
    bound: this.$view.getBoundingClientRect()
  };
};

FormEditor.prototype.ev_endDragRightResizer = function (event) {
  this.$rightSiteResizer.addStyle({
    right: 'calc(' + this.style.rightSizeWidth + 'em - 0.2em)'
  }).removeStyle('width');
  this._dragRightMovingDate = undefined;
  delete this._dragRightMovingDate;
};

FormEditor.prototype.ev_dragRightResizer = function (event) {
  var dxEm = event.moveDXem;
  var newWidth = this._dragRightMovingDate.width - dxEm;
  this.$rightSiteResizer.addStyle({
    width: '100px',
    right: 'calc(' + newWidth + 'em - 50px)'
  });
  this.style.rightSizeWidth = Math.max(this.style.rightSizeMinWidth, Math.min(this._dragRightMovingDate.bound.width / 3 / this._dragRightMovingDate.fontSize, newWidth));
  this.$rightSiteCtn.addStyle('width', this.style.rightSizeWidth + 'em');
  this.$editorSpaceCtn.addStyle('right', this.style.rightSizeWidth + 0.2 + 'em');
  window.dispatchEvent(new Event('resize'));
};

FormEditor.prototype.setData = function (data) {
  this.mLayoutEditor.setData(data);
};

FormEditor.prototype.getData = function () {
  return this.mLayoutEditor.getData();
};

/* harmony default export */ var editor_FormEditor = (FormEditor);
// CONCATENATED MODULE: ./index.js











/* harmony default export */ var index_0 = ({
  FormEditor: editor_FormEditor,
  LayoutEditor: editor_LayoutEditor,
  RelativeAnchor: anchors_RelativeAnchor,
  BaseComponent: core_BaseComponent,
  TextInput: components_TextInput,
  RelativeLayout: layouts_RelativeLayout,
  Assembler: core_Assembler,
  DateInput: components_DateInput,
  core: FCore
});
// CONCATENATED MODULE: ./dev.js


window.absol = window.absol || {};
window.absol.form = index_0;
window.absol._ = window.absol._ || FCore._;
window.absol.$ = window.absol.$ || FCore.$;

/***/ })
/******/ ]);

VaKeR 2022